第十二届蓝桥杯物联网试题(省赛)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:

这个考了一个RTC的配置,RTC我只配过一次,所以有些生疏,还是不能大意,一些偏僻的考点还是要多练,在获取RTC时间的时候也遇到一些bug,这个后续会用一篇博客将最近遇到的BUG都总结一下

主要的难点还是通信协议问题因为B板在收到串口的通信的时候要立即给A板发指令,A板还要将信息传递给B板,B板子还要接收消息,然后用串口发送给用户,这个通信之间要处理适当,不要产生通信干扰

其中串口通信和接收就比较宽松,只要程序不陷入死循环,串口发出的数据一般都是能收到的,串口通信的发送和接收都采用等待阻塞,如果有数据传输,那么就会阻塞住直到数据被全部接收完,如果这个时间没有数据,程序也会等待一会,一般设置的是0xff也就是255ms

即:串口会阻塞255ms在这期间数据能被接收完整即可,如果只是一条简单的if语句那么电脑执行时间大概是ns级的,当串口波特率为9600的时候传输一个数据所要的时间大概是1/9600大概104us换算成ns大概是104000ns如果程序中没有其他延时的话够整个程序执行一个周期了。所以串口收发时间是很充裕的,串口发送是有数据在255ms内发送完,没数据直接跳过不阻塞

那么问题的关键自然就来到LORA收发了,LORA通信原理之前我已经详细说过,不再多赘述,重点在于LORA一般情况下都处于接收数据的状态,数据传递过来会被放到FIFO数据线上,LORA_RX只是取数据线上的数据,所以本质上讲LORA不是实时传输,数据传输过来会被储存起来,等待LORA_Rx取出
但是要注意在调用LORA_Tx的时候,整个系统会在这期间进入发送状态,发送的时候也需要将数据放入FIFO数据线上,这就意味着,如果数据没有被取出,LORA_Tx会清除之前的数据,将自己发送的数据放入数据线,且发送过程中不接收别的设备发送的数据

所以有FIFO中数据必须要即时取出,且LORA_Rx和LORA_Tx不能同时在主函数中循环,因为LORA_Tx会破坏接收到但还未取出的数据,所以必须要将LORA_Tx与前者分开

解决通信冲突的方法:

主函数一直调用LORA_Rx确保数据能被即时取出,LORA_Tx在发送数据数组不为空的时候才发送,且发送完后立即将发送数据数组清空

串口通信也可以采用同样的方式,既可以避免通信矛盾也可以防止数据的重复发送

相关推荐

最近更新

  1. PHP String manipulation: A comprehensive guide

    2024-03-26 11:12:01       0 阅读
  2. Qt5 Ubuntu18 QStackedWidget

    2024-03-26 11:12:01       0 阅读
  3. WebKit源代码探秘:深入理解其组织结构与组件

    2024-03-26 11:12:01       1 阅读
  4. 【回溯+双指针算法题记录】回文字符串汇总

    2024-03-26 11:12:01       1 阅读
  5. 2288. 价格减免

    2024-03-26 11:12:01       1 阅读
  6. Quartz 介绍

    2024-03-26 11:12:01       1 阅读
  7. Taro自定义实现本地路径转换为文件

    2024-03-26 11:12:01       1 阅读
  8. Python 类与对象:深入理解与应用

    2024-03-26 11:12:01       0 阅读

热门阅读

  1. 【华大 HC32L110】低功耗开发记录

    2024-03-26 11:12:01       23 阅读
  2. Linux C++ 004-流程控制语句

    2024-03-26 11:12:01       17 阅读
  3. C++前端述职报告

    2024-03-26 11:12:01       23 阅读
  4. 算法——矩阵

    2024-03-26 11:12:01       21 阅读
  5. 基于SpringBoot IP黑白名单的实现3

    2024-03-26 11:12:01       18 阅读
  6. 数据分析-Pandas类别数据序列合并

    2024-03-26 11:12:01       20 阅读
  7. uniapp打包小程序,使用$refs报错解决办法

    2024-03-26 11:12:01       20 阅读
  8. FastAPI+React全栈开发03 为什么使用MongoDB

    2024-03-26 11:12:01       19 阅读
  9. 深入理解Flutter中的ValueNotifier

    2024-03-26 11:12:01       19 阅读
  10. JVM加类加载器

    2024-03-26 11:12:01       20 阅读
  11. 【LeetCode-300.最长递增子序列】

    2024-03-26 11:12:01       17 阅读
  12. APIKit探索之旅:bug拦截

    2024-03-26 11:12:01       18 阅读