stm32串口通信支持地址唤醒,但是地址位只有4位,也就是说最多连接16个..在很多情况下都不够用。
除此以外还有其他问题,比如,对于1号地址,接收的数据必须以0x81开头,但是如果给2号地址发送:
82 05 05 81 02 02
那么一号机就会收到81 02 02...
我设想的解决办法是:
1,地址扩展,地址唤醒后再增加一句扩展地址判断,如果扩展地址匹配失败,则进入静默状态。
并且增加校验位,针对第二个问题,在数据帧后面增加校验位 ,比如CRC16,就算一号机接收到错误的数据,也不能通过校验..(但是这样的话,效率很低的样子啊)
2,不使用地址唤醒,使用总线空闲唤醒,从机被唤醒后,检测第一位为地址位,如果地址位不匹配则进入静默状态
大家有没有什么更好的办法?
(还有个问题是,已经被唤醒的情况下,通过软件判断是被错误地唤醒了,怎么设置它再次进入静默状态??RWU要怎么设置?)
这个问题已经有了眉目
除了上面提到的解决方法,还有个解决办法是用DMA接收串口数据,不用中断。
在串口这个方面,stm32和430都用过,说一下他们的区别,430可以直接识别帧头,然后可以软件设置进入静默状态,而stm32貌似就不能软件设置进入静默状态。
但是stm32的帧空闲中断比较好用,在变长通信的时候,可以省下一个定时器资源,而430就必须在串口接收中断中开启定时器,不然就没法确定什么时候数据传完了。
总体上感觉,stm32便宜,性能强,但是有些方面感觉还是不够方便。