微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记之USART

STM32学习笔记之USART

时间:11-26 来源:互联网 点击:
USART功能概述

接口通过三个引脚与其他设备连接在一起(见图248)。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。

RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。

TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。

总线在发送或接收前应处于空闲状态

● 一个起始位

● 一个数据字(8或9位),最低有效位在前

● 0.5,1.5,2个的停止位,由此表明数据帧的结束

● 使用分数波特率发生器 —— 12位整数和4位小数的表示方法。

● 一个状态寄存器(USART_SR)

● 数据寄存器(USART_DR)

● 一个波特率寄存器(USART_BRR),12位的整数和4位小数

● 一个智能卡模式下的保护时间寄存器(USART_GTPR)

关于以上寄存器中每个位的具体定义,请参考寄存器描述第节:USART寄存器描述。

在同步模式中需要下列引脚:

● CK:发送器时钟输出。此引脚输出用于同步传输的 时钟, (在Start位和Stop位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。数据可以在RX上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式里,CK可以为智能卡提供时钟。

在IrDA模式里需要下列引脚:

● IrDA_RDI: IrDA模式下的数据输入。

● IrDA_TDO: IrDA模式下的数据输出。

下列引脚在硬件流控模式中需要:

● nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。

void USART_SendChar(USART_TypeDef* USARTx, uint16_t Data)

{

//检测参数

assert_param(IS_USART_ALL_PERIPH(USARTx));

assert_param(IS_USART_DATA(Data));

USARTx->DR = (Data & (uint16_t)0x01FF);

while(!(USARTx->SR & USART_SR_TC));

}

void USART_SendString(USART_TypeDef* USARTx, uint8_t *pString)

{

while(*pString)

{

USART_SendChar(USARTx, *pString++);

}

PS: 在非中断情况下,要通过检测SR位来判断是否发送完成:while(!(USARTx->SR & USART_SR_TC));

中断情况下: if(USART_GetITStatus(USARTy, USART_IT_TXE) != RESET)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top