本帖最后由 MindMotion 于 2024-3-21 11:49 编辑
UART简介
UART是通用异步收发器,全称为Universal Asynchronous Receiver and Transmitter,属于异步串口通信协议的一种,能够灵活进行全双工数据交换。
MM32F0140的UART支持全双工数据交换、同步单向通信、半双工单线通信、多处理器之间的通信以及调制解调器(CTS/RTS)操作。
一、串行通信
串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度,只需要少数几条线就可以在系统间交换信息。
串行通信按照数据传输方向分为:
数据只能在一个方向上传输,通常采用两线进行通信,分别是:GND、TX(发送数据输出引脚)或RX(接收数据输入引脚),发送设备与接收设备共地将参考电压调节一致,MCU做发送或接收。
相当于可切换方向的单工通信,在具体时刻,只允许数据在一个方向上传输,不能同时在两个方向上传输。
允许数据同时在两个方向上传输,通常采用三线,分别是:GND、TX、RX,接收设备与发送设备均为双向通信设备,若通信双方有一方需为另一方提供电源,则两设备的VDD相连。
二、异步通信
异步通信过程中,接收器和发送器使用各自的时钟,以一个字符为传输单位,通信中两个字符间的时间间隔不固定,但在同一个字符中的两个相邻位间的时间间隔固定,每一个字符要用起始位和停止位作为字符开始和结束的标志。
三、UART功能
如图1所示,Device1做发送器,Device2做接收器进行通信,发送器对发送数据执行“并->串”转换,然后,数据从发送器的发送数据输出引脚(TX)输出,在传输线路上一位一位的传输到接收器的接收数据输入引脚(RX),接收器对接收到的数据进行“串->并”转换。
图1. UART通信
数据传输
UART的数据传输如图2所示,包含起始位、数据帧、奇偶校验位、停止位、空闲帧与断开帧。
一、起始位
在发送器被使能,且无数据发送时,TX引脚处于高电平,若要进行数据传输,发送器会在发送起始位拉低TX引脚,即将传输线从高电平拉到低电平并保持1个时钟周期。
二、数据帧
数据帧包含需要传输的数据,数据长度由UART通用控制寄存器(UART_CCR)的CHAR位配置,通常可以设置为5 ~ 8位,若不使用奇偶校验位,数据帧长度可为9位。
发送数据需要将UART全局控制寄存器(UART_GCR)的TXEN位置1,数据从UART发送数据寄存器(UART_TDR)写入,经过一字节缓冲器缓冲,最后通过发送移位寄存器,以最低字节到最高字节的顺序,串行在TX引脚上输出。
接收数据需要将UART全局控制寄存器(UART_GCR)的RXEN位置1,读UART接收数据寄存器(UART_RDR)可获取接收到的数据并清零中断状态寄存器(UART_ISR)的RX_INTF(接收有效数据中断标志)。
三、奇偶校验位
检验数据中1的总个数为奇或偶,判断传输器件数据是否发生改变。奇偶校验可以通过UART通用控制寄存器(UART_CCR)的PEN位置1使能发送接收校验,UART_CCR寄存器的PSEL位为1则数据偶校验,PSEL位为0则数据奇校验。
奇校验:若数据位中1的数目是偶数,则校验位为1,如果1的数目是奇数,校验位为0。
偶校验:若数据位中1的数目是偶数,则校验位为0,如果1的数目是奇数,校验位为1。
四、停止位
停止位用1表示一帧的结束,可通过配置UART通用控制寄存器(UART_CCR)的SPB0位设置停止位位数,位数可设置为0.5、1、1.5、2个停止位。
五、空闲帧
包括停止位在内,一个完全由1组成的完整数据帧,定义为一个空闲符号,下一个数据帧的起始位跟在空闲符之后。
六、断开帧
包括停止位在内,一个完全由0组成的完整数据帧,定义为一个断开符号,在断开帧结束时,发送器再发送一个停止位1,使得下一帧的起始位能够被识别到(产生下降沿被检测到)。断开符号通过设置UART_CCR寄存器的BRK位进行发送,若BKP位置1,在当前数据发送完成后,将会发送一个断开符号到TX引脚上。
图2. UART数据传输
波特率
波特率表示数据传输速率,波特率发生器产生时钟,经过发送器和接收器的使能位置位控制后,供给发送或接收使用。对于大多数串行通信,需要将发送和接收设备的波特率设置为相同的值,若波特率不同,则发送与接收数据的时序可能受到影响。波特率的计算公式如图3所示,UART波特率寄存器(UART_BRR)存放UART分配器除法因子(UARTDIV)的整数部分,UART分数波特率寄存器(UART_FRA)存放UARTDIV的小数部分。例如,若系统时钟为48M,配置波特率为9600(每秒传输9600bit的数据),则(48000000 /9600) / 16的结果赋值到UART_BRR寄存器中,(48000000 / 9600) % 16的取余结果赋值到UART_FRA寄存器中。
图3. UART的波特率公式
实验
本实验配置UART的基本发送与接收功能,配置时钟速率为48MHz,波特率为9600,数据长度为8位,不使用校验及自动流控制,设置PA9为TX引脚,PA10为RX引脚。通过串口调试工具观察数据的传输,发送数据与接收数据相同。
配置系统时钟 clock_init()
如图4所示,高速外部时钟(HSE)的频率范围为4 ~ 24MHz,实验所使用的晶振为12M,要使系统时钟为48MHz,则配置PLL输出48MHz做系统时钟,操作时钟控制寄存器(RCC_CR)的HSEON位使能HSE,等待HSERDY位拉高(即HSE时钟被释放),设置PLL配置寄存器(RCC_PLLCFGR)中的PLLSRC位为1,并根据公式配置对应参数,PLL配置公式如图5所示。配置闪存访问控制寄存器(FLASH_ACR)启用闪存预取,配置时钟配置寄存器(RCC_CFGR)设置分频并配置PLL输出做系统时钟。
|