UART串口通信
协议介绍:串口通信协议_ft232和ch340是串口的哪种协议_夜路难行々的博客-CSDN博客
I.MX6U UART
UART时钟源选择的是pll3_80m,然后在(bit5:0)设置分频值,设置为1分频
ADBR(bit14) :自动波特率检测使能位,为 0 的时候关闭自动波特率检测,为 1 的时候使能自动波特率检测UARTEN(bit0) : UART 使能位,为 0 的时候关闭 UART ,为 1 的时候使能 UART
IRTS(bit14) :为 0 的时候使用 RTS 引脚功能,为 1 的时候忽略 RTS 引脚。PREN(bit8) :奇偶校验使能位,为 0 的时候关闭奇偶校验,为 1 的时候使能奇偶校验。PROE(bit7) :奇偶校验模式选择位,开启奇偶校验以后此位如果为 0 的话就使用偶校验,此位为 1 的话就使能奇校验。STOP(bit6) :停止位数量,为 0 的话 1 位停止位,为 1 的话 2 位停止位。WS(bit5) :数据位长度,为 0 的时候选择 7 位数据位,为 1 的时候选择 8 位数据位。TXEN(bit2) :发送使能位,为 0 的时候关闭 UART 的发送功能,为 1 的时候打开 UART的发送功能。RXEN(bit1) :接收使能位,为 0 的时候关闭 UART 的接收功能,为 1 的时候打开 UART的接收功能。SRST(bit0) :软件复位,为 0 的是时候软件复位 UART ,为 1 的时候表示复位完成。复位完成以后此位会自动置 1 ,表示复位完成。此位只能写 0 ,写 1 会被忽略掉
寄存器 UARTx_UCR3 中的位 RXDMUXSEL(bit2),这个位应该始终为 1
TXDC(bit3):发送完成标志位,为 1 的时候表明发送缓冲(TxFIFO)和移位寄存器为空,也
就是发送完成,向 TxFIFO 写入数据此位就会自动清零。RDR(bit0) :数据接收标志位,为 1 的时候表明至少接收到一个数据,从寄存器UARTx_URXD 读取数据接收到的数据以后此位会自动清零
分频设置:
波特率计算
波特率计算公式:Baud Rate = Ref Freq / (16 * (UBMR + 1)/(UBIR+1))
设定的时钟频率为80MHZ,可以看出UBIR和UBMR的最大值为0XFFFF,,设置的分频系数为1,【0b101】,算出UBIR=71,UBMR=3124的时候,波特率为115200.
实验结果:
串口格式化函数移植实验
串口格式化函数简介 :
格式化函数说的是 printf 、 sprintf 和 scanf 这样的函数,分为格式化输入和格式化输出两类函数,通过 scanf 函数从键盘获取输入。这样就有了输入和输出了,实现了最基本的人机交互,在 I.MX6U-ALPHA 开发板上也可以使用此方法, 将 printf 和 scanf 映射到串口上,完成与开发板的交互
移植两个从uboot来的文件,因为是从uboot源码里面抠出来的,所以导致并不是完全版的格式化函数。【存在功能的欠缺】。