symc001 发表于 2018-11-20 14:08:11

串口DMA传输发送正常,但不进入DMA中断!

STM32F103的处理器,串口1采用DMA收发,接收工作正常;
发送时,不能进入DMA_IT_TC中断。仿真调试发现DMA传输完成标志位已被置位。
为了提高系统效率,我需要在DMA传输完成中断里检查应用层的环形FIFO发送缓冲器是否还有数据需要发送,
如果需要发送就在中断里将待发送数据移入DMA发送缓冲,再次启动DMA发送;
如果应用层的环形FIFO发送缓冲器为空,则中断里清空待发送字节数后返回;
应用程序在往应用层的环形FIFO发送缓冲器填入数据时,需要检查传输完成标志位(自己定义的)【if(p->tx_status&E_uart_tc){//前次DMA传输已完成】。
该标志位为为1,标志DMA传输已完成,此时需要重新启动DMA传输;
if(p->tx_status&E_uart_tc){//前次DMA传输已完成
   p->tx_status = E_uart_sending;//清除传输完成消息
   DMA_Cmd(DMA1_Channel4, DISABLE);
   DMA1_Channel4->CNDTR = len;//重新设置待发送数据长度。
   DMA_Cmd(DMA1_Channel4, ENABLE);
}

该标志位为0,标志DMA仍在传输中,此时只需要将待发送数据填入应用层的环形FIFO发送缓冲器。


现在卡在,DMA中断这里,导致这个思路进行不下去了。
请各路大神指导!谢过!


symc001 发表于 2018-11-20 14:33:23

仿真界面如图。中断标志位已被置位,但是就是进不了中断入口【void DMAChannel4_IRQHandler(void)】。
在线等!!!

symc001 发表于 2018-11-20 15:45:46

问题找到了。
是因为NVIC中断寄存器没有配置,也就是没有使能DMA中断。
这是一个低级错误,主要是该项目之前都是使用的串口中断,现在做串口优化没有重新阅读NVIC配置。
本帖关闭。
页: [1]
查看完整版本: 串口DMA传输发送正常,但不进入DMA中断!