zoukankan      html  css  js  c++  java
  • 单片机模块化程序: 关于串口接收处理数据

    一,处理思路(定时器模拟空闲中断)

      判断串口接收到一条完整的数据以后置位一个标志位,主循环判断此标志位处理数据.

      如何判断接收到一条完整的数据:

        无论做的什么串口通信,数据总是一条一条的发送,发送完一条再发送另一条,

        发送每一条数据之间存在时间间隔,串口接收数据的时候控制一个

        变量在定时器里面累加,同时串口中断接收数据的时候对这个变量清零!

        如果串口一直接收数据这个变量永远累加不到期望的数值,如果串口接收

        数据以后不再接收数据,变量会累加到期望的数值,然后就是判断接收到一条完整的数据.

    二,由于每个单片机串口配置的写法不一,只截图说明使用

    串口接收到数据时:Usart1ReadCnt++;  Usart1IdleCnt = 0;

    定时器 判断Usart1ReadCnt !=0 说明串口接收到数据  然后 Usart1IdleCnt++

    如果串口一直接收数据 Usart1IdleCnt将不能累加到 Usart1IdleTime (本程序设置的10)  Ms

    串口接收完一串数据以后,停了10Ms 没有发过来数据, 则会执行

    Usart1IdleCnt = 0;
    Usart1ReadCntCopy = Usart1ReadCnt;
    Usart1ReadCnt = 0;
    Usart1ReadFlage = 1;

    三,主循环调用

    注意:如果通信时间过短小于10Ms,可修改定时器中断进入时间

    或者

    四,其实STM32自带空闲中断检测

    五,测试

    STM32自带的串口空闲中断判断的相当及时!所以我不用它!因为很多时候我需要动态的空闲时间.

    注:上面方案并不是最优的方式

    想学习更优的方式请接着往下学习

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/11669373.html
Copyright © 2011-2022 走看看