STM32F103C8T6串口通讯说明

对于USART初始化结构体的说明

初始库函数定义在stm32f10x_usart.c 文件中,即USART_InitTypeDef。

USART_BaudRate:波特率设置。一般设置为 2400960019200115200。波特率越高,传输速率越快。

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 中断服务程序
{

}

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值