对于USART初始化结构体的说明
初始库函数定义在stm32f10x_usart.c 文件中,即USART_InitTypeDef。
USART_BaudRate:波特率设置。一般设置为 2400、9600、19200、115200。波特率越高,传输速率越快。
USART_WordLength:数据帧字长,可选 8 位或 9 位。我们一般使用8位。
一个字符帧发送需要三个部分:起始位 + 数据帧 + 停止位。
起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从最低位开始传输 的;停止位是一定时间周期的高电平。
为什么是9位?STM32F103 系列控制器 USART 支持奇偶校验。当使用校验位时,串口传输的长度将是 8 位的数据帧加上 1 位的校验位总共 9 位,此时USART_WordLength需要设置为9位。
使能了奇偶校验控制后,每个字符帧的格式将变成:起始位 + 数据帧 + 校验位 + 停止位。
USART_StopBits :停止位设置,可选 0.5 个、 1 个、 1.5 个和 2 个停止位,一般我们选择 1 个停止位。默认使用 1 个停止位。2 个停止位适用于正常 USART 模式、单线模式和调制解调器模式。0.5 个和 1.5 个停止位用于智能卡模式。
USART_Parity :奇偶校验控制选择,可选 USART_Parity_No( 无校验 ) 、 USART_Parity_Even( 偶
校验 ) 以及 USART_Parity_Odd( 奇校验 )。
USART_Mode : USART 模式选择,有 USART_Mode_Rx 和 USART_Mode_Tx ,允许使用逻辑或 运算选择两个。
USART_HardwareFlowControl :硬件流控制选择,只有在硬件流控制模式才有效。
USART 时钟初始化结构体
1) USART_Clock:同步模式下 SCLK 引脚上时钟输出使能控制,可选禁止时钟输出 (USART_Clock_Disable) 或开启时钟输出 (USART_Clock_Enable);如果使用同步模式发送,一般都 需要开启时钟。它设定 USART_CR2 寄存器的 CLKEN 位的值。
2) USART_CPOL:同步模式下 SCLK 引脚上输出时钟极性设置,可设置在空闲时 SCLK 引脚为低 电平 (USART_CPOL_Low) 或高电平 (USART_CPOL_High)。它设定 USART_CR2 寄存器的 CPOL 位的值。
3) USART_CPHA:同步模式下 SCLK 引脚上输出时钟相位设置,可设置在时钟第一个变化沿捕 获数据 (USART_CPHA_1Edge) 或在时钟第二个变化沿捕获数据。它设定 USART_CR2 寄存器的 CPHA 位的值。USART_CPHA 与 USART_CPOL 配合使用可以获得多种模式时钟关系。
4) USART_LastBit:选择在发送最后一个数据位的时候时钟脉冲是否在 SCLK 引脚输出,可以是 不输出脉冲 (USART_LastBit_Disable)、输出脉冲 (USART_LastBit_Enable)。它设定 USART_CR2 寄 存器的 LBCL 位的值。
配置USART流程
目的:调试专用。首先,我们来编写一个程序实现开发板与电脑通信,在开发板上电时通过 USART 发送一串字符 串给电脑,然后开发板进入中断接收等待状态,如果电脑有发送数据过来,开发板就会产生中断, 我们在中断服务函数接收数据,并马上把数据返回发送给电脑。
1.查看芯片数据手册,确定串口挂在哪条总线上,根据自己所用串口使能总线时钟和端口时钟即开启串口时钟和引脚时钟。
2.因为使用串口功能,所以引脚设置为复用功能,把串口的 Tx 引脚配置为复用推挽输出, Rx 引脚为浮空输入,数据完全由外部 输入决定。
3.配置串口即初始化串口。
一般将波特率设置为115200,字长设置为8位,1个停止位,无校验,模式为USART_Mode_Rx | USART_Mode_Tx,无硬件数据流控制。
4.设置串口中断
开启串口中断(接受和发送数据分别开启串口中断)。设置串口中断优先级,开启串口中断通道(用到NVIC)。
5.编写中断服务函数
以下是串口创建模板
//串口初始化
void USART1_Init(u32 bound)
{
//GPIO 端口设置
/*引用GPIO_InitTypeDef ,将GPIO_InitTypeDef 命名为GPIO_InitStructure*/
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/* 配置 GPIO 的模式和 IO 口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX //串口输出 PA9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure); /*初始化串口输入 IO */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX //串口输入 PA10 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //模拟输入 GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化 GPIO */
//USART1 初始化设置
USART_InitStructure.USART_BaudRate = bound;//波特率设置 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为 8 位数 据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowContro l_None;//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模 式 USART_Init(USART1, &USART_InitStructure); //初始化串口 1
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口 1 中断通道
//记得中断分组
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级 3 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级 3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能
NVIC_Init(&NVIC_InitStructure); //初始化中断
}
//USARTI中断服务函数
void USART1_IRQHandler(void) //串口 1 中断服务程序
{
}
上一篇:STM32F103串口配置
下一篇:STM32 上使用 printf 输出函数
推荐阅读最新更新时间:2024-11-12 13:08
设计资源 培训 开发板 精华推荐
- MIC5303单300mA CMOS超小ULDO典型应用
- 使用 Z8 Encore F0830 系列 MCU 控制无绳钻机电机和电池充电器的应用电路
- 采用 EZ-PD™ PAG1 的 65W USB-C 电源适配器解决方案
- AD7805 四路、10 位并行加载数模转换器的典型应用
- #第五届立创电子设计大赛#智能家居
- EVAL-AD8555-SOIC,评估套件允许快速演示和评估 AD8555 零漂移
- NCP1339GEVB,基于带有准谐振控制器的 NCP1339 45W 适配器的评估板
- 使用 Analog Devices 的 LTC1434CGN 的参考设计
- A5191HRTNGEVB:Hart 调制解调器 QFN 评估板
- 4056-1.5v鼠标锂电改造