打印
[STM32F1]

STM32F103C8T6串口通讯说明

[复制链接]
1367|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
好几遍vh|  楼主 | 2024-3-31 00:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于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 :硬件流控制选择,只有在硬件流控制模式才有效。


使用特权

评论回复
沙发
好几遍vh|  楼主 | 2024-3-31 00:35 | 只看该作者
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 位的值。

使用特权

评论回复
板凳
好几遍vh|  楼主 | 2024-3-31 00:35 | 只看该作者
配置USART流程
目的:调试专用。首先,我们来编写一个程序实现开发板与电脑通信,在开发板上电时通过 USART 发送一串字符 串给电脑,然后开发板进入中断接收等待状态,如果电脑有发送数据过来,开发板就会产生中断, 我们在中断服务函数接收数据,并马上把数据返回发送给电脑。

1.查看芯片数据手册,确定串口挂在哪条总线上,根据自己所用串口使能总线时钟和端口时钟即开启串口时钟和引脚时钟。

2.因为使用串口功能,所以引脚设置为复用功能,把串口的 Tx 引脚配置为复用推挽输出, Rx 引脚为浮空输入,数据完全由外部 输入决定。

3.配置串口即初始化串口。

一般将波特率设置为115200,字长设置为8位,1个停止位,无校验,模式为USART_Mode_Rx | USART_Mode_Tx,无硬件数据流控制。

4.设置串口中断

开启串口中断(接受和发送数据分别开启串口中断)。设置串口中断优先级,开启串口中断通道(用到NVIC)。

5.编写中断服务函数

使用特权

评论回复
地板
好几遍vh|  楼主 | 2024-3-31 00:36 | 只看该作者
以下是串口创建模板
//串口初始化
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 中断服务程序
{

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

230

帖子

0

粉丝