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中断这里,导致这个思路进行不下去了。 请各路大神指导!谢过! |
是因为NVIC中断寄存器没有配置,也就是没有使能DMA中断。
这是一个低级错误,主要是该项目之前都是使用的串口中断,现在做串口优化没有重新阅读NVIC配置。
本帖关闭。
在线等!!!