如果想实现多机通讯,必须要实现:发送或者接收某一个固定地址或者广播地址。大家都知道51单片机采用附加的第九位TB8或者RB8实现上述功能。
本来以为STM32也具有上述功能,但仔细看了不尽然:
1:它本身有一个address寄存器,当接收到的数据(当然第九位应该为1)它首先要和这个address寄存器中的值进行比较,然后才能进入继续接收状态。
看下图:
为了实现和原有的51进行通讯,应该可以采用如下办法:
Address::1字节加mark
device ID:1字节,其实是slave address
length:1字节数据包的长度(只length后面的数据的长度,包括crc部分)
data 0~ datan:数据,最多255-2=253个字节
crc high byte:
crc low byte:
crc可以使用crc16;
第一个字节只起到把芯片的uart唤醒的作用,接收的设备在中断服务程序中再对接收到的device ID进行比较,如果是自己的地址或者广播地址,则继续接收后续的数据;否则退出中断,继续等待下一个address中断的到来。
由于没有STM32开发板,没办法测试,只能过一段时间有板子后再测试一下。