gpio uart接收数据(HAL库)
发布时间
阅读量:
阅读量
GPIO模拟UART的实现机制是依据目标UART通信所需的波特率,计算出每个比特位所占用的时间长度,在该时间范围内读取GPIO的输入状态,随后将读取到的8个比特位组合成一个字节。在此过程中,还需识别起始位与终止位以确保数据的正确性。
UART通信协议中,起始位对应的是电平下降沿,而终止位则为上升沿。
为了提升检测精度,在读取每个比特位时会选择其中间位置进行采样,因此定时器的时间设定为每个比特周期的一半。
以9600波特率为例,每个比特位的时间长度为1/9600秒,即104微秒。因此半个比特周期对应的定时时间为104除以2等于52微秒。在检测到下降沿后,开启定时器并设定52微秒的计时周期,每间隔52微秒读取一次GPIO的状态值。
将这些读取到的状态值按顺序拼接成一个字节即可完成数据的接收。
具体代码实现如下:
- 首先定义枚举类型变量用于状态机控制,在每次定时中断发生时根据当前状态切换至下一个阶段。
enum{
COM_START_BIT = 1, //起始位
COM_START_MID_BIT, //起始位中间点
COM_D0_BIT, //第0个数据位
COM_D0_MID_BIT, //第0个数据位中间点
COM_D1_BIT, //第1个数据位
COM_D1_MID_BIT, //第1个数据位中间点
COM_D2_BIT, //第2
全部评论 (0)
还没有任何评论哟~
