UART
介绍模拟串口的实现方式
1. 模拟串口
1.1. 串口工作原理
物理串口是由单片机的UART模块实现,配置UART模块后,RX引脚接收到数据后会触发中断,在中断中用户可以去获取数据。在代码中我们看到仅此而已,在硬件上,移位寄存器和数据缓存寄存器已经帮我们做了起始位的监听,数据位的接收等,模拟串口就是通过外部中断和定时器的方式去监听和操作输出引脚和输入引脚的高低电平来达到相同的目的。
1.2. 模拟串口实现原理
通过一个外部中断和一个定时器模拟串口的收发。
- 接收:
- 将一个具有外部中断功能的引脚做为rx引脚,设置为下降沿触发,使能。
- 将一个定时器的定时时间设置为串口波特率的一半(比如9600波特率,定时器周期则设为52us)。
- 当RX引脚接收到起始位的电平信号后,打开定时器。
- 在定时器中断函数中,将定时器定时时间设置位104us
- 定时器触发10次,分别是起始位、8位数据位、停止位,接收到停止位后,则表示一个字节接收完毕,可以将数据保存起来。在接收起始位和停止位时需要进行有效性判断。
- 发送:
- 通过定时器,模拟串口发送电平时序,以一定的时间间隔,将tx引脚输出电平信号。
- 注意:
- 接收:检测到低电平信号(起始位)后,打开定时器采集电平信号,采集的时间点要控制在电平信号的中间位置,因此第一次触发定时器为(1/波特率/2),之后每接收一个bit位数据都为(1/波特率)。
- 发送:发送时间间隔为(1/波特率)。