1.波特率:每秒传输的二进制位数,bps。
2.UART用的是标准TTL/CMOS逻辑电平,可以通过MAX3232转换成RS-232逻辑电平。RxD/TxD数据线以位为最小数据传输单位。
3.帧:有效传输单位,具有完整数据意义。里面包含:起始位,数据位,校验位,停止位。一帧数据可以有5-8个数据位,从最低位开始传输,传输前约定好传输的格式和波特率。所以能达到发送和接受的数据同步。
4.奇偶校验:所有数据位中包含1的个数。
5.帧格式:n个停止位+起始位+(低)数据位(高)+奇偶校验位+n个停止位。。。帧的分割是有起始位来标志的。
6.UART工作流程:
发送数据:CPU----》FIFO-------》发送移位寄存器---------》TxD数据线
CPU将数据通过总线发送到FIFO中,UART将FIFO中的数据复制到发送移位寄存器中。发送移位寄存器根据传输格式(添加开始位,数据位,校验位,中止位)一位一位的发送到TxD数据线上发射。
接受数据:RxD数据线--------》接受移位寄存器-----》FIFO----------》CPU
接受移位把RxD数据线上的数据一位一位接受过来,然后复制到FIFO中,CPU就可以访问到FIFO中数据了。
7.硬件控制流:这个可以联系到TCP三次握手,当要发送数据时,要等待接受方准备好,并返回个准备好的信号。当发送方接受到这个信号,才开始发送数据。
只有当nCTS接受到信号后TxD才会发送数据。
8.设置波特率除数因子UBRDIV0。公式:UBRDIVn = (int)((Uart Clock)/(baud)/16) -1; Uart Clock:UART时钟频率。 baud:波特率。一般程序中公式将演变成:rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );./ 为点除,因为pclk/16后为整数,所以点除得到float。+0.5 则是为强转时能够取到整数,因为c语言中强转是直接舍弃小数部分,而该公式要求四舍五入。
如:baud为115200bps 且UART时钟频率为40MHz。
UBRDIVn = (int)(pclk/16./baud+0.5) -1
= (int)22.2-1
= 21
|