努力奋斗的王总
2021-06-16 23:25
采纳率: 100%
浏览 51

stm32f4采集5个温度数据通过串口发送

开发板:stm32f407zgt6

要求:总共使用2个f4开发板,将第一个开发板采集的5个温度数据,通过串口发送到第二个开发板并在oled上显示,请问第一个开发板怎么发送?第二个开发板怎么接收?麻烦给出具体程序,有重谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • soar3033 2021-06-17 09:53
    已采纳

    设置一个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数值了。

    点赞 评论
  • 有问必答小助手 2021-06-18 13:06

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m

    点赞 评论

相关推荐 更多相似问题