STM32 DMA无法进入中断

目的:从USART1接收电脑串口传入的数据,通过DMA写入SRAM存储数组。DMA传输完成10个字符(指定长度)后,进入中断执行USART1输出数据到电脑串口。问题:仅仅... 目的:从USART1接收电脑串口传入的数据,通过DMA写入SRAM存储数组。DMA传输完成10个字符(指定长度)后,进入中断执行USART1输出数据到电脑串口。
问题:仅仅是进不了中断,其他都正常。
代码:
主函数,启动USART及初始化DMA:
delay_init();

NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

uart_init(9600); //串口初始化为9600

//配置DMA

Dma_Usart_Config(DMA1_Channel5,(u32)&USART1->DR,(u32)SRAM_USART1_RX,SRAM_USART1_RX_SIZE);

USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);

DMA_ITConfig(DMA1_Channel5,DMA_IT_TC,ENABLE);//启动传输完成中断

DMA_Cmd(DMA1_Channel5, ENABLE); //启动DMA通道
展开
 我来答
追悔七年
推荐于2017-11-26 · TA获得超过587个赞
知道小有建树答主
回答量:251
采纳率:66%
帮助的人:271万
展开全部

如果只是无法进中断,你检查下NVIC的中断映射是否配置,我用的是DMA发送,给你参考下。

相关定义:

#define USART1_Tx_DMA_Channel    DMA1_Channel4
#define USART1_Tx_DMA_STREAM     DMA2_Stream7
#define USART1_Tx_DMA_TCIF       DMA1_FLAG_TC4
#define USART1_Rx_DMA_Channel    DMA1_Channel5
#define USART1_Rx_DMA_FLAG       DMA1_FLAG_TC5 
#define USART1_DR_Base           ((uint32_t)&USART1->DR)

代码:

#ifdef USART1_USE_DMA_MODE
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA1时钟

#ifdef USART1_DMA_TX
    NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn; //设置中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //主优先级设置
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         //设置优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开中断
    NVIC_Init(&NVIC_InitStructure); 

    DMA_DeInit(USART1_Tx_DMA_Channel);  
    DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)m_UartDCB.pSendBuff;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
    DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init(USART1_Tx_DMA_Channel, &DMA_InitStructure); //配置DMA1
    DMA_ITConfig(USART1_Tx_DMA_Channel, DMA_IT_TC, ENABLE);    //使能DMA发送中断
#endif //_USART_DMA_TX__
#endif //USE_DMA_MODE
追问
你的设置我都有,找不到问题原题。但是我不能把代码贴进来。请问下你是怎么把代码贴进来的?
追答

贴代码很简单,下图中,

看到红色圈起来的地方没有,下拉展开,选C/C++就行了.

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式