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

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数值了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 为啥快手广告联盟的广告这么难出来
  • ¥15 k8s集群重启后,kubelet一直报systemctl restart kubelet.service "Failed to delete cgroup paths"
  • ¥15 微信小程序构建工具类发布到npm,install后报错
  • ¥15 amesim液压仿真问题
  • ¥15 MATLAB优化设计
  • ¥15 ANN预测模型 200大米
  • ¥20 优秀学生的问题 oj java
  • ¥15 scratch-gui 如何集成进 react native
  • ¥15 把全局悬浮窗改为局内悬浮窗
  • ¥15 Excel vba编程调用word如何读取换行符