开发板:stm32f407zgt6
要求:总共使用2个f4开发板,将第一个开发板采集的5个温度数据,通过串口发送到第二个开发板并在oled上显示,请问第一个开发板怎么发送?第二个开发板怎么接收?麻烦给出具体程序,有重谢!
开发板:stm32f407zgt6
要求:总共使用2个f4开发板,将第一个开发板采集的5个温度数据,通过串口发送到第二个开发板并在oled上显示,请问第一个开发板怎么发送?第二个开发板怎么接收?麻烦给出具体程序,有重谢!
设置一个12个长度的unsinged char数组(比如unsinged char adc_v[12];),数组索引0的位置存储0x02(adc_v[0]=0x02;),数组索引11的位置存储0x03(adc_v[11]=0x03;),然后每次adc读数据的时候,把5个adc的数据分别存在数组索引1-10的位置里(1\2存第一个adc值的低字节\高字节;3\4存第二个adc值的低字节\高字节;以此类推)。
这里举例adc得到的数据怎么往数组里存:假设你adc0获得的值存在adc0_v,因为stm32的adc的值是两个字节的,所以adc_v[1]=adc0_v;adc_v[2]=adc0_v>>8;这样一来adc_v[1]里存储了adc的低字节,adc_v[2]里存储了adc的高字节。
假设你的5个adc的值分别为:0x013f,0x02ce,0x0123,0x04e1,0x0751(这里假设是12位adc,其它位的同理);那么你执行完上面的逻辑后,adc_v数组内的值为{0x02,0x3f,0x01,0xce,0x02,0x23,0x01,0xe1,0x0e,0x51,0x07,0x03}
然后让串口发送adc_v数组,中断方式还是普通方式随意。
第二个单片机也中设置一个12个长度的unsinged char数组用来接收,比如get_v[12];再设置一个5个长度的int数组用于存储5个adc的值比如adc[5]。
第二个单片机接收到第一个单片机发送的adc_v,于是get_v[12]的内容变成{0x02,0x3f,0x01,0xce,0x02,0x23,0x01,0xe1,0x0e,0x51,0x07,0x03}。
首先验证数据格式:if(get_v[0]==0x02 && get_v[11]==0x03) 来看数据帧的开头与结尾对不对,对了以后再往下执行,不执行下面的数据转换,并直接清空串口缓冲区。(这里是以0x02,0x03来看数据帧的结构,如果不嫌麻烦也可用CRC校验,但是整个写法就更复杂)
如果帧结构是对的,就开始转换数据:
for(unsined char i =0;i<5;i++)\\遍历5个adc
{
adc[i]=get_v[i*2+2]<<8; \\读取高字节
adc[i]|=get_v[i*2+1]; \\读取低字节
}
如此执行完后,第二个单片机的adc数组就存的接收到的5个adc数值了。