网站首页 > 技术文章 正文
串口的使用中我们常用的就是串口的中断收数据,发数据。但除了普通的收发stm32F0系列的串口增加了很多新的功能。如果巧妙的把这些功能用起来就可以达到事半功倍的效果。把能交给硬件处理的就交给硬件可以节约大量的MCU时间用来做其他事情。也能大大调串口通信的可靠性。
功能一:串口多机通信
stm32串口是支持多机通信的,多机通信也很好理解,就是把多个从机的RX连接到主机的TX,多个从机的TX连接到主机的RX。当然也要注意硬件连接上需要做相应的改变,把从机的TX脚都通过线与连接起来。当然也可以简单一点,把所有从机的TX都配置为开漏模式外部加上上拉电阻。那么多机通信到底有什么用处? 其中之一个有点就是一个串口就可以挂多个从机设备。第二个呢就是从机可以在主机没有唤醒自己的时候处于一种事不关己的状态(没有达到唤醒状态就不去接收处理数据)。主机唤醒从机又分为两种模式:
第一种是通过从机检测到RX线上是空闲状态的时候唤醒。这两种我再做个解释,通过IDLE空闲唤醒可以让多个从机同时处于激活状态,当tx不发送数据了,RX线上出现的空闲状态被从机检测到了,这时候多个从机就可以同时被激活。
第二种是从机检测到主机发来和自己相匹配的地址的时候就会唤醒。这种模式更适合于从机需要单独唤醒的时候。每个从机都有个自己的地址,当从机接收到主机发来的地址信号并且和自己匹配上的时候就会唤醒。但是这个地址匹配功能是有规定的。从机会根据主机发送数据的最高位来识别是不是地址。比如主机发送的是8位数据格式,那么最1bit被用来识别是否为地址,只有后面的七位才能放数据。而如果想传输8位的数据,那么从机就要按照9位的数据位来发送。9位的数据位相对来说用的很少,所以我也很少把这种模式用到实际应用中。
功能二:串口Mute静音模式
这种模式呢实际上在多机通讯里面也会用到,只是我在上面把他称呼为“事不关己”的状态。mute模式实际上不仅仅可以再多机模式中使用,在普通模式下也可以使用。在我们请求进入mute模式之前(设置USART_RQR的MMRQ位),需要配置mute模式通过IDLE还是地址匹配唤醒。然后等待条件触发就可以退出mute模式正常接收数据。进入mute模式以后rx线上的数据都会被忽略掉。
功能三:串口字符匹配中断
这个相对来说比较好理解,就是配置一个byte8位的字符,当接收到和这个字符匹配上的数据就会产生字符匹配中断。该模式无法和mute模式同时使用。看下图就会明白,字符匹配和mute的地址设置是共用的:
功能四:串口空闲中断
这个我认为是很有用的一个功能,当rx线上产生空闲的时候触发该中断。可以很方便用来做不定长度的协议接收。但是空闲中断也有需要注意的地方,比如一上电后rx线上一直就没收到数据时不会触发空闲中断的。它 只会在收到数据后从非空闲变到空闲的时候才会产生中断。
之前我写过一篇用空闲中断来接收非定长数据的文章,可以移步参考:http://www.eemaker.com/stm32-uart-budingchangshuju.html
功能五:串口超时中断
这个也好理解,也就是当我们的stm32 串口检测到进入空闲状态以后开始计数,这个计数的单位是以传输一个bit位的时间来算的(所以这个会根据你选用的波特率不同而时间长短不一样),比如我配置20就是检测到空闲出了传输20bit的时间就会产生超时中断。
以上就是我为了在串口协议传输过程中,充分挖掘他的硬件性能而做的功课,整理出来也方便以后参考。
猜你喜欢
- 2024-10-12 STM32单片机-多串口printf()问题与ASCII码解析
- 2024-10-12 STM32串口发送用哪个中断? stm32f4串口发送数据
- 2024-10-12 STM32F103编程学习——USB虚拟串口篇
- 2024-10-12 STM32F4入坑日记——串口发送数据(非中断)
- 2024-10-12 STM32 HAL库串口中断发送过程 stm32f4串口中断
- 2024-10-12 在货物监控设备研发时,STM32串口第一个字节丢失解怎么解决?
- 2024-10-12 STM32单片机采用环形缓冲区实现串口中断数据接收管理
- 2024-10-12 基于STM32的串口与DMA的完美组合(上)
- 2024-10-12 STM32下载程序新思路--使用串口下载STM32程序
- 2024-10-12 STM32F103编程学习——串口接收不定长数据
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)