常用通信外设的开发总结

第一次写博客,毕业一年,工作两年,在工作中摸爬滚打,工作虐我千百遍,我待工作如初恋,--前言

在这里总结一下,分享一些经验,当然,有说错的地方请指正,这里的经验之谈是基于STM32系列,讲一下关于常用通信外设的开发,所有的通信都需要做信号完整性分析,使用示波器等工具分析信号的上升,下降时间,需要调整上拉或下拉电阻,这也是一个嵌入式工程师必备的技能。

USART:串口通信,是最简单可靠的通信方式,全双工通信,常用的波特率是9600,115200,只有TX、RX,双方要先规定通信的速率,才能正确解析传输的数据,实际使用中,在通信距离短的地方可以使用更高的波特率通信,使到传输数据的带宽大大提高,通信量也是非常可观的,不亚于can 1M通信的实际通信量

在工作中有用过SBUS协议的,是一种串口反向,然后与常用串口设置略有不同串口,配置为波特率100kbps,8位数据,偶校验,2位停止位,无流控。注意其中停止位是2位。

串口的数据发送接收可以使用DMA,我一般接收使用DMA,发送就没有使用,空闲中断,将DMA接收到的数据拷贝到环形缓冲区,在中断中要注意处理溢出中断,这也是新手常犯的错误,导致程序在调试中一打断点就无法接着调试。

在主循环处理环形缓冲区的数据,如果用RTOS,这种处理只需要修改为在中断里产生任务通知,在外面的任务去处理环形缓冲区的数据即可

I2C:非常常用的通信接口,很多传感器,加密芯片,驱动芯片都是使用这种接口,I2C在软件实现上可以使用软件模拟,也可以用硬件库,通过写寄存器去实现I2C通信功能,首先当然是了解I2C通信协议,软件I2C更能直观地反映到I2C通信过程,建议新手使用,I2C通信就是向一个设备地址的寄存器地址写入、读取对应的值,使用软件I2C要使用逻辑仪分析通信速率,以及是否符合通信协议,不能单单看一个结果,实际可能是不可靠的。

硬件I2C在写入寄存器常用的写法都在等待,这种是否真的占用CPU时间更少还有待定夺,也有高级的写法,使用中断处理

485:485总线通信,一对多的一种通信总线,由于是差分信号,通信距离可以比较长,消除共模噪声的影响,485通信一般是使用串口转485芯片,因此总线里使用的485芯片不同对信号的高低是有影响的,而且485发送的一帧数据里,最后一个字节往往是错的,在发送完后,将芯片从发送置为接收,最后的1bit会被拉低,因此一个有效的办法是在一帧数据的结尾多发送一个字节,使得帧数据没有被影响,一对多的特性使得client想向host发消息,就只能是host请求后做应答,因此,总线的利用效率比较低,但很多电调都是使用485通信,大楼的电梯据说也是,看重的是差分信号通信的可靠性。

can:can总线在工业级里用得比较多,can总线的机制是最完善的,可以设置掩码过滤不想处理的数据,每个节点有一个独立的can id,在总线里节点不能冲突,不能发送,应答用同一个can id,冲突的效果是总线传输的数据是两者的与,比如有一个节点在这一时刻发送0x0f,另一节点发送的是0xf0,接收到的数据是0x00,can有5种帧,一般在通信协议里就只用到数据帧,对于一些不需要携带数据的也可以用远程帧,其他的在一般设计里用不到,can每帧数据最大发送8个字节,而它自己多加了29bit,标准can通信协议,can数据的处理也跟uart类似,在中断里接收写进环形缓冲区,在外部做处理。can通信是可靠的?因为有can crc校验,有重传机制,但是,这些都是can 协议层的可靠,在实际开发中,还是需要对帧数据做校验,防止在应用层出错

就先写到这里了,开篇。

扫描二维码关注公众号,回复: 3323522 查看本文章

猜你喜欢

转载自blog.csdn.net/u014286918/article/details/82823875
今日推荐