本帖最后由 刘洋讲单片机 于 2017-1-11 14:50 编辑
第21讲.通用同步异步收发器(UART).zip
(232.63 KB)
众拳【剑齿虎STM8】开发板学习笔记分享
点击此处查看全部资料
第21讲 通用同步异步收发器(UART)
目 录
21.1概述 2
21.2 串口主要特点 3
21.3 UART功能描述 4
21.4 UART主要特点 5
21.5 异步串行通信的字符格式 6
21.6 串行通信的传送速率 6
21.7 UART1库函数 7
21.1概述
STM8S微控制器家族的通用同步异步收发器(UART1,UART2或者UART3)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。STM8的UART提供范围的波特率选择,并且支持多处理器通讯。UART也支持LIN(局部互联网)协议版本1.3,2.0,和2.1以及在主模式下的J2602。
UART1和UART2具有以下扩展特征:
UART2和UART3支持LIN从模式。
UART1和UART2支持同步单向通讯,也支持智能卡协议和IrDA规范。
UART1支持半双工单线通讯。
关于每个STM8微控制器型型号中的可用UART配置信息,请查阅数据手册。
21.2 串口主要特点
●全双工的,异步通信
● NRZ标准格式
● 高精度波特率发生器系统 ─ 发送和接收共用的可编程波特率,最高达2.5Mbits/s
● 可编程数据字长度(8位或9位)
● 可配置的停止位-支持1或2个停止位
LIN主模式
─ LIN断开和分隔符生成
通过不同标志位和不同中断源检测LIN断开和分隔符,用于回读检测。
● 发送方为同步传输提供时钟(UART1,UART2)
● IRDA SIR 编码器解码器(UART1,UART2)
在正常模式下支持3/16位的持续时间
● 智能卡模拟功能(UART1,UART2)
─ 智能卡接口支持ISO7816-3标准里定义的异步智能卡协议
─ 智能卡用到的1.5个停止位
● 单线半双工通信(UART1)
21.3 UART功能描述
接口通过两个或三个引脚与其他设备连接在一起。任何UART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。
UART_RX:串行数据输入。使用采样技术来区别数据和噪音,从而恢复数据。
UART_TX:串行数据输出。当发送器被禁止时,输出引脚状态由其GPIO端口配置决定。当发送器被激活,并且不发送数据时,TX引脚处于高电平。
UART_SK:发送器时钟输出。此引脚输出用于同步传输的时钟。
通过这些管脚,在普通UART模式下串行数据的发送接收帧结构组成如下:
● 总线在发送或接收前应处于空闲状态
● 一个起始位
● 一个数据字(8或9位),最低有效位在前
● 1,1.5,2个的停止位,由此表明数据帧的结束
● 一个状态寄存器(UART_SR)
● 一个数据寄存器(UART_DR)
● 一个16位波特率寄存器(UART_BRR)
● 一个16智能卡模式下的保护时间寄存器(UART_GTR)
21.4 UART主要特点
● 单独的发送器和接收器使能位
● 检测标志
─ 接收缓冲器满
─ 发送缓冲器空
─ 传输结束标志
● 奇偶校验控制
─ 发送奇偶校验位
─ 对接收数据进行校验
● 四个错误检测标志
─ 溢出错误
─ 噪音错误
─ 帧错误
─ 奇偶校验错误
● 2个中断向量
─ 发送中断
─ 接收中断
● 低功耗模式
● 多处理器通信 -- 如果地址不匹配,则进入静默模式
● 从静默模式中唤醒(通过空闲总线检测或地址标志检测)
21.5 异步串行通信的字符格式
图21.1 异步串行通信的字符格式
异步串行通信以字符为单位,即一个字符一个字符地传送。
奇偶校验
在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。
21.6 串行通信的传送速率
传送速率用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送格式位的数目来表示,称之为波特率(band rate)。每秒传送一个格式位就是1波特。
常用的有: 4800、9600、19200、115200波特。
1波特=1bps(位/秒)。
21.7 UART1库函数
下面列出了一些UART1功能的库函数,初学者可以作为知识点可以了解一下。
void UART1_DeInit(void);
void UART1_Init(uint32_t BaudRate, UART1_WordLength_TypeDef WordLength,
UART1_StopBits_TypeDef StopBits, UART1_Parity_TypeDef Parity,
UART1_SyncMode_TypeDef SyncMode, UART1_Mode_TypeDef Mode);
void UART1_Cmd(FunctionalState NewState);
void UART1_ITConfig(UART1_IT_TypeDef UART1_IT, FunctionalState NewState);
void UART1_HalfDuplexCmd(FunctionalState NewState);
void UART1_IrDAConfig(UART1_IrDAMode_TypeDef UART1_IrDAMode);
void UART1_IrDACmd(FunctionalState NewState);
void UART1_LINBreakDetectionConfig (
UART1_LINBreakDetectionLength_TypeDef
UART1_LINBreakDetectionLength);
void UART1_LINCmd(FunctionalState NewState);
void UART1_SmartCardCmd(FunctionalState NewState);
void UART1_SmartCardNACKCmd(FunctionalState NewState);
void UART1_WakeUpConfig(UART1_WakeUp_TypeDef UART1_WakeUp);
void UART1_ReceiverWakeUpCmd(FunctionalState NewState);
uint8_t UART1_ReceiveData8(void);
uint16_t UART1_ReceiveData9(void);
void UART1_SendData8(uint8_t Data);
void UART1_SendData9(uint16_t Data);
void UART1_SendBreak(void);
void UART1_SetAddress(uint8_t UART1_Address);
void UART1_SetGuardTime(uint8_t UART1_GuardTime);
void UART1_SetPrescaler(uint8_t UART1_Prescaler);
FlagStatus UART1_GetFlagStatus(UART1_Flag_TypeDef UART1_FLAG);
void UART1_ClearFlag(UART1_Flag_TypeDef UART1_FLAG);
ITStatus UART1_GetITStatus(UART1_IT_TypeDef UART1_IT);
void UART1_ClearITPendingBit(UART1_IT_TypeDef UART1_IT);
void UART3_DeInit(void);
void UART3_Init(uint32_t BaudRate, UART3_WordLength_TypeDef WordLength,
UART3_StopBits_TypeDef StopBits,
UART3_Parity_TypeDef Parity,
UART3_Mode_TypeDef Mode);
void UART3_Cmd(FunctionalState NewState);
void UART3_ITConfig(UART3_IT_TypeDef UART3_IT, FunctionalState NewState);
void UART3_LINBreakDetectionConfig(
UART3_LINBreakDetectionLength_TypeDef
UART3_LINBreakDetectionLength);
void UART3_LINConfig(UART3_LinMode_TypeDef UART3_Mode,
UART3_LinAutosync_TypeDef UART3_Autosync,
UART3_LinDivUp_TypeDef UART3_DivUp);
void UART3_LINCmd(FunctionalState NewState);
void UART3_ReceiverWakeUpCmd(FunctionalState NewState);
void UART3_WakeUpConfig( UART3_WakeUp_TypeDef UART3_WakeUp);
uint8_t UART3_ReceiveData8(void);
uint16_t UART3_ReceiveData9(void);
void UART3_SendData8(uint8_t Data);
void UART3_SendData9(uint16_t Data);
void UART3_SendBreak(void);
void UART3_SetAddress(uint8_t UART3_Address);
FlagStatus UART3_GetFlagStatus(UART3_Flag_TypeDef UART3_FLAG);
void UART3_ClearFlag(UART3_Flag_TypeDef UART3_FLAG);
ITStatus UART3_GetITStatus(UART3_IT_TypeDef UART3_IT);
void UART3_ClearITPendingBit(UART3_IT_TypeDef UART3_IT);
|