概述
UART串口
- 一、I.MUX6ULL串口UART
- 1、串口原理
- 2、I.MUX6U的UART时钟源设置
- 3、I.MUX6U的UART波特率设置
- 4、其他UART的寄存器的主要功能介绍
- 二、部分例程代码
一、I.MUX6ULL串口UART
1、串口原理
UART,也就是异步串行收发器,使用UART与外界相连最少只要三条线:TXD(发送)、RXD(接收)和GND(地线)。UART串口的接口电平有TTL和RS-232两种,在正电原子的这款Mini Linux开发板上有CH340芯片,可以实现USB和串口TTL信号之间的转换,这里用到的是UART1,因此在电脑和开发板之间的串口UART通信只需要一条USB线即可。
下图是UART通信格式:
数据线一开始空闲状态的时候为高电平,要传输数据时先将数据线拉低,表示开始传输数据,后面即为要传输的数据(可以通过设置选择数据位数),数据发送完成后,如果使能了奇偶校验,就进行校验,如果关闭则跳过。最后就是停止位(位数可以选择)。
2、I.MUX6U的UART时钟源设置
根据I.MUX6U参考手册中的时钟树图,可以看出UART的时钟源可以通过设置CCM_CSCDR1中的UART_CLK_SEL位来选择是PLL3进行6分频(80MHz)或者是OSC时钟(24MHz)。之后还可以设置该寄存器的UART_CLK_PODF进行1~64分频,产生最终的UART时钟源。
3、I.MUX6U的UART波特率设置
I.MUX6U串口波特率的设置原理基于三个寄存器,分别是UART_UFCR、UART_UBIR和UART_UBMR寄存器。其中UART_UFCR寄存器用到其bit[9:7],可以在UART时钟源的基础上再进行分频。然后再根据公式设置UART_UBIR和UART_UBMR的bit[15:0]。下面为波特率设置的具体公式:
例程中给出了两种波特率设置的方式:
①、根据公式手动配置三个寄存器的值,达到理想的波特率(每次转换不同的波特率需要重新计算配置三个寄存器值的)。
②、使用波特率配置函数void uart_setbaudrate(UART_Type *base, unsigned int baudrate, unsigned int srcclock_hz);(可以直接将想要的波特率写入函数,函数将自动配置)。
4、其他UART的寄存器的主要功能介绍
①、UART_URXD寄存器
bit[7:0]保存着串口收到的数据。
②、UART_UTXD寄存器
bit[7:0]保存着串口要发送的数据。
③、UART_UCR1寄存器
bit0用来使能和禁止UART,bit14为自动控制波特率使能位(仅进行介绍,并没有使用)。
④、UART_UCR2寄存器
bit0为软件复位位,为0时复位UART。
bit1,bit2分别是使能UART的接收和发送。
bit5设置数据为长度(0表示7位数据位,1表示8位数据位)。
bit6设置停止位(0表示1位停止位,1表示2位停止位)。
bit7设置奇偶校验(0表示偶校验,1表示奇校验)。
bit8时奇偶校验位的使能位,为1时使能,0时关闭。
⑤、UART_UCR3寄存器
bit2必须为1(手册中NOTE写到必须一直置1)。
⑥、UART_USR2寄存器
bit0为1的时候表示有数据可以读取。
bit3为1的时候表示数据发送完成。
UART还有许多其他的寄存器,本例程没有使用到,可以自行查阅。
二、部分例程代码
下面时总的UART初始化的代码。
/* UART1初始化总函数 */
void uart_init(void)
{
uart_io_init(); /* 初始化UART1的所有IO,包括IO的复用和电气属性设置 */
uart_disable(UART1); /* 关闭UART1,通过置零UART1_UCR1寄存器bit0 */
uart_softreset(UART1); /* 软复位UART1,通过置零UART1_UCR2寄存器bit0 */
/* 配置UART1的数据位、奇偶校验、停止位等等 */
UART1->UCR2 = 0; /* 先清零UCR2寄存器的值 */
UART1->UCR2 |= (1 << 1) | (1 << 2) | (1 << 5) | (1 << 14);
UART1->UCR3 |= (1 << 2);} /* UCR3寄存器的bit2必须置1 */
/* 手动配置波特率 */
#if 0
/* 设置波特率为115200 */
UART1->UFCR &= ~(7 << 7); /* 对RFDIV进行清零 */
UART1->UFCR |= (5 << 7); /* 1分频,uart_clk = 80MHz */
UART1->UBIR = 71;
UART1->UBMR = 3124;
#endif
/* 只用函数配置波特率 */
uart_setbaudrate(UART1, 115200, 80000000);
uart_enable(UART1); /* 开启UART1,通过置1UART1_UCR1寄存器bit0 */
最后
以上就是魔幻发带为你收集整理的正点原子Mini Linux—UART串口简单介绍一、I.MUX6ULL串口UART二、部分例程代码的全部内容,希望文章能够帮你解决正点原子Mini Linux—UART串口简单介绍一、I.MUX6ULL串口UART二、部分例程代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复