21.1 USART 寄存器结构 ..............................................................343
21.2 USART 库函数 ..................................................................344
No | 函数名 | 描述 |
1 | USART_DeInit | 将外设USARTx寄存器重设为缺省值 |
2 | USART_Init | 根据USART_InitStruct中指定的参数初始化外设USARTx寄存器 |
3 | USART_StructInit | 把USART_InitStruct中的每一个参数按缺省值填入 |
4 | USART_Cmd | 使能或失能USART外设 |
5 | USART_ITConfig | 使能或失能指定的USART中断 |
6 | USART_DMACmd | 使能或者失能指定USART的DMA请求 |
7 | USART_SetAddress | 设置USART节点的地址 |
8 | USART_WakeUpConfig | 选择USART的唤醒方式 |
9 | USART_ReceiverWakeUpCmd | 检查USART是否处于静默模式 |
10 | USART_LINBreakDetectLengthConfig | 设置USART LIN中断检测长度 |
11 | USART_LINCmd | 使能或失能USARTx的LIN模式 |
12 | USART_SendData | 通过外设USARTx发送单个数据 |
13 | USART_ReceiveData | 返回USARTx最近接收到的数据 |
14 | 法语专业USART_SendBreak | 发送中断字 |
15 | USART_SetGuardTime | 设置指定的USART保护时间 |
16 | USART_SetPrescaler | 设置USART时钟预分频 |
17 | USART_SmartCardCmd | 使能或失能指定USART的智能卡模式 |
18 | USART_SmartCardNackCmd | 使能或失能NACK传输 |
19 | USART_HalfDuplexCmd | 使能或失能USART半双工模式 |
20 | USART_IrDAConfig | 设置USART IrDA模式 |
21 | USART_IrDACmd | 使能或失能USART IrDA模式 |
22 | USART_GetFlagStatus | 检查指定的USART标志位设置与否 |
迷路的英文23 | 全美超模大赛第十八季USART_ClearFlag | 清除USARTx的待处理标志位 |
24 | USART_GetITStatus | 检查指定的USART中断发生与否 |
25 | USART_ClearITPendingBit | 清除英语4级考试USARTx的中断待处理位 |
26 | USART_ClockInit | USART时钟配置 |
27 | USART_ClockStructInit | USART时钟结构体缺省值初始化 | 亲和力英文
| | |
21 通用同步异步收发器( USART)
通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC 规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。
Section 21.1 USART寄存器结构描述了固件函数库所使用的数据结构,Section 21.2 固件库函数介绍了函数库里的所有函数。
21.1 USART寄存器结构
USART寄存器结构,USART_TypeDeff,在文件stm32f0x_map.h中定义如下:
typedef struct
{
vu16 SR;
u16 RESERVED1;
vu16 DR;
u16 RESERVED2;
vu16 BRR;
u16 RESERVED3;
vu16 CR1;
u16 RESERVED4;
vu16 CR2;
u16 RESERVED5;
vu16 CR3;
u16 RESERVED6;
vu16 GTPR;
u16 RESERVED7;
}USART_TypeDef;
Table 704.例举了USART 所有寄存器
Table 704. USART 寄存器
寄存器 | 描述 |
SR | USART状态寄存器 |
DR | USART数据寄存器 |
BRR | USART波特率寄存器 |
CR1 | USART控制寄存器1 |
CR2 | 绯闻女孩第三季 USART控制寄存器2 |
CR3 | USART控制寄存器3 |
GTPR | USART保护时间和预分频寄存器 |
| |
3 个USART外设声明于文件:
...
#define PERIPH_BASE ((u32)0x40000000)
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)butterfly什么意思
#define USART1_BASE (APB2PERIPH_BASE + 0x3800)
#define USART2_BASE (APB1PERIPH_BASE + 0x4400)
#define USART3_BASE (APB1PERIPH_BASE + 0x4800)
#ifndef DEBUG
...
#ifdef _USART1
#define USART1 ((USART_TypeDef *) USART1_BASE)
#endif /*_USART1 */
#ifdef _USART2
#define USART2 ((USART_TypeDef *) USART2_BASE)
#endif /*_USART2 */
#ifdef _USART3
#define USART3 ((USART_TypeDef *) USART3_BASE)
#endif /*_USART3 */
...
#el /* DEBUG */
...
#ifdef _USART1
EXT USART_TypeDef *USART1;
#endif /*_USART1 */
#ifdef _USART2
EXT USART_TypeDef *USART2;
#endif /*_USART2 */
#ifdef _USART3
EXT USART_TypeDef *USART3;
#endif /*_USART3 */
...
#endif
使用Debug模式时,初始化指针USART1, USART2 和USART3于文件stm2f10x_lib.c :
...
#ifdef _USART1
USART1 = (USART_TypeDef *) USART1_BASE;
#endif /*_USART1 */
lastname#ifdef _USART2
USART2 = (USART_TypeDef *) USART2_BASE;
#endif /*_USART2 */
#ifdef _USART3
USART3 = (USART_TypeDef *) USART3_BASE;
#endif /*_USART3 */
...
为了访问USART 寄存器,_USART,_USART1, _USART2regrettable和_USART3必须在文件中定义如下:
...
#define _USART
#define _USART1 #define _USART2 #define _USART3
21.2 USART库函数
USART库函数【见首页】。
【01】函数USART_DeInit
Table 706. 函数 USART_DeInit
函数名 | USART_DeInit |
函数原形 | void USART_DeInit(USART_TypeDef* USARTx) |
功能描述 | 将外设USARTx寄存器重设为缺省值 |
输入参数 | USARTx:x军事训练目的可以是1/2/3,来选择USART 外设 |
输出参数 | 无 |
返回值 | 无 |
先决条件 | 无 |
被调用函数 | RCC_APB2PeriphRetCmd() RCC_APB1PeriphRetCmd() |
| |
例:
/* Rets the USART1 registers to their default ret value */
USART_DeInit(USART1);
函数原型如下:
void USART_DeInit(USART_TypeDef* USARTx)
{
/* Check the parameters */
asrt_param(IS_USART_ALL_PERIPH(USARTx));//三个USART,两个UART
switch (*(u32*)&USARTx)
{
ca USART1_BASE:
RCC_APB2PeriphRetCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphRetCmd(RCC_APB2Periph_USART1, DISABLE);
break;
ca USART2_BASE:
RCC_APB1PeriphRetCmd(RCC_APB1Periph_USART2, ENABLE);
RCC_APB1PeriphRetCmd(RCC_APB1Periph_USART2, DISABLE);
break;
ca USART3_BASE:
RCC_APB1PeriphRetCmd(RCC_APB1Periph_USART3, ENABLE);
RCC_APB1PeriphRetCmd(RCC_APB1Periph_USART3, DISABLE);
break;
ca UART4_BASE:
RCC_APB1PeriphRetCmd(RCC_APB1Periph_UART4, ENABLE);
RCC_APB1PeriphRetCmd(RCC_APB1Periph_UART4, DISABLE);
break;
ca UART5_BASE:
RCC_APB1PeriphRetCmd(RCC_APB1Periph_UART5, ENABLE);
RCC_APB1PeriphRetCmd(RCC_APB1Periph_UART5, DISABLE);
break;
default:
break;
}