请问:STM32串口通信三种方式(查询,中断,DMA)各自的特点以及实现方法是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问:STM32串口通信三种方式(查询,中断,DMA)各自的特点以及实现方法是啥相关的知识,希望对你有一定的参考价值。
查询就是一直在查看标志位,是不是被置1了,如果是就去读或者其他操作中断就是平时不用管,一单有东西来就会进入中断服务程序,你再去操作
DMA是你初始化的时候把串口地址和需要传输的地址写上,来东西他就自己把数据存到你初始化的地址上,可以连续,或者传输完中断,丫的,不采纳我真是对不起我。都是手打的 参考技术A 不用中断的话只能在住循环里面查询了,这样不太好的,实时性不强,容易丢包。建议你用用DMA通道试试,但是也要开中断,但是一般DMA不消耗CPU的。只是给个思路,自己试试吧,呵呵我也是新手,没试过。源码更是没有 了
STM32串口发送中断
今日进行串口数据通信时,使用DMA串口485发送完成中断进行485发送至接收的状态转换时发现,当DMA传输完成时,串口发送寄存器中的数据还未通过发送端口传输完成,在中断中需等待查询串口发送的状态,while((USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET)); 造成中断程序程序的阻塞,以5Mbit/s的波特率的计算的话阻塞约3us。 对控制程序仍有很大影响,以简化中断处理时间的原则,
采用以下改正方法:
1、使用485自动收发电路,(存在的问题是:成本较高,波特率可能达不到,接收状态时同样需要信号输出引脚端置为低电平,若切换时有中断进来,延长发送状态会对总线的数据造成影响。 (电路参考485通讯电路总结http://www.cnblogs.com/my-trees/p/8028960.html))所以不可取。
2、改用发送完成中断进行485发收状态的切换,(用DMA串口空闲中断进行收据的接收)。这样在串口传输完成后即可进行485接收状态的切换,避免程序阻塞,减少了中断的执行时间,降低了对控制程序的影响。
在采用方法2进行处理时,在程序中对中断类型进行判断,发现在使用串口1中断后,程序会频繁进入串口中断,断开通讯、关闭接受空闲中断同样也会进入,
原因是在发送完成中断使能后,使能串口USART_Cmd(USART1, ENABLE)时触发串口中断;通过仿真看到。CR寄存器发送中断标志第6位发送完成中断位置位,触发发送完成中断。 所以在使能发送完成中断状态时,当使能串口时USART_Cmd(USART1, ENABLE);程序会进入一次发送完成中断程序(这与MODBUS发数据协议中介绍的相同,当使能串口发送中断时STM32会自动发送一个空闲帧触发中断描述相同 )。
循环进入中断是因为在发送完成中断中转换485为接受状态后,重新配置了串口接收DMA,重新使能了串口,造成串口发送完成中断循环进入。
以上是关于请问:STM32串口通信三种方式(查询,中断,DMA)各自的特点以及实现方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
stm32 串口中断发送和接收怎么回事,就是串口的中断方式和查询方式有啥区别?