STM32用DMA发送串口数据提前进中断

2019-07-21 01:17发布

我用的是USART2来发送数据,中断使用的是DMA_ITConfig(DMA1_Channel7,DMA_IT_TC,ENABLE);
可是为什么数据还没有发完就进入中断了!我现在是在中断里加一个延时等他发完,这明显不是我想要的!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zmsxhy
1楼-- · 2019-07-21 06:44
In transmission mode, once the DMA has written all the data to be transmitted (the TCIF flag is set in the
DMA_ISR register), the TC flag can be monitored to make sure that the USART communication is
complete. This is required to avoid corrupting the last transmission before disabling the USART or
entering the Stop mode. The software must wait until TC=1. The TC flag remains cleared during all data
transfers and it is set by hardware at the last frame’s end of transmission。
原来如此,明白了,谢谢大家!
9ack
2楼-- · 2019-07-21 08:11
 精彩回答 2  元偷偷看……
shiqinghai
3楼-- · 2019-07-21 13:54
 精彩回答 2  元偷偷看……
zmsxhy
4楼-- · 2019-07-21 14:41
9ack 发表于 2016-4-6 15:44
是不是时序的问题,我的以前也出现过这种问题,后来我就是加的延时好的

不是时序问题,我如果不使用中断,是可以发完的,因为我在中断里关了通道,所以发送一半就不发了!
zmsxhy
5楼-- · 2019-07-21 16:55
shiqinghai 发表于 2016-4-6 15:46
初步怀疑你的DMA_ITConfig()函数用到不对,
void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint3 ...

void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState)
我这是V3.5的版本.....
zmsxhy
6楼-- · 2019-07-21 20:37
yklstudent 发表于 2016-4-6 16:00
你用串口扫描中断来关闭DMA的???

void DMA1_Channel7_IRQHandler(void)
{
         // delay_ms(30);
                DMA_ClearFlag(DMA1_FLAG_TC7);
                DMA_ClearFlag(DMA1_FLAG_TE7);
                DMA_Cmd(DMA1_Channel7,DISABLE);                                 
                USART2_RX;       
}
加上延时发送数据没有问题,可是去掉延时就只能发一半多出去。TC不是发送完成中断吗?

一周热门 更多>