找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2994|回复: 0
收起左侧

STM32 ADC+DMA程序不进中断问题?

[复制链接]
ID:285416 发表于 2020-3-9 12:43 | 显示全部楼层 |阅读模式
怎么配置也不行,中断就是没反应,找不到问题,我没有哪里没开,开中断就是一个函数,还有别的嘛,
#include "dma.h"
#include "usart.h"
__IO uint16_t ADC_ConvertedValue[RHEOSTAT_NOFCHANEL]={0};

void My_DMA_Init(void)
{
        DMA_InitTypeDef DMA_InitStructure;
        
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); //F1X的是AHB使用能
        
        DMA_InitStructure.DMA_PeripheralBaseAddr = RHEOSTAT_ADC_DR_ADDR;                                                        //外设ACD的源基地址
        DMA_InitStructure.DMA_Memory0BaseAddr = (u32)ADC_ConvertedValue;                                                        //存放数据的寄存器地址就是最上面定义的数譇DC_ConvertedValue楸淞?
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;        //方向从外设到寄存器这里与F1X系列的区别是F1X是选择哪个源这里是哪到哪
        DMA_InitStructure.DMA_BufferSize = RHEOSTAT_NOFCHANEL;                                                                                                //数据大小
        DMA_InitStructure.DMA_Channel = DMA_Channel_0;                                                                //DMA通道0         这里不是知道是什么意思///****,待查*****/
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设基地址不变 F1X的理解是地址是否增加一般不以用选择禁止
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                        //同F1XX一样存放数据寄存器地址增加对应多通道的这里选增加
        DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;                                                //目的的数据大小就是16位半字两个字节
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;                //同上就是源数据大小半字两个字节
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                                                                //DMA循环模式这个一般情况都是循环
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;                        //传输通道优先级别一般都是为高 如果是单的就无所谓了
        /////////////下面关于FIFO待查
        DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;                                                                                                //不用FIFO用直接模式
        DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;                                                        //半字两个字节
        DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;                                                                                //FIFO禁止不需要配置
        DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;                                                //没有FIFO不需要配置这里
        DMA_Init(DMA2_Stream0, &DMA_InitStructure);
        //////////////////////////////////////配置完成只是如果是单通道的DMA_MemoryIn的也选择不增加禁止
                                                                                                                                         //使能DMA流DMA2_Stream0_IRQHandler

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
        DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,ENABLE);
         DMA_Cmd(DMA2_Stream0, ENABLE);               
}
void DMA2_Stream0_IRQHandler(void)        
{
         if (DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0) == SET)  
    {
                        DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0);
                }
                        printf("\r\n K中断开启 V \r\n" );
}


18-1 ADC多通道DM.7z

301.41 KB, 下载次数: 13

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表