打印
[资料工具]

UART串口编程基础知识

[复制链接]
1050|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
okyouwin|  楼主 | 2016-12-28 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:把每天当做世界末日、。、

56

主题

765

帖子

3

粉丝