0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >基础知识 > stm32f103rct6标准库串口配置

stm32f103rct6标准库串口配置

来源:
2025-05-21
类别:基础知识
eye 31
文章创建人 拍明芯城

STM32F103RCT6标准库串口配置详解

一、串口通信基础理论

1.1 串口通信概述

串口通信(Serial Communication)是嵌入式系统中常用的数据交换方式,通过两条线(TX发送线、RX接收线)和地线(GND)实现全双工或半双工通信。其核心优势在于硬件成本低、连接简单,适用于低速数据传输场景。在STM32F103RCT6中,串口模块(USART/UART)支持多种通信参数配置,包括波特率、数据位、停止位和校验位,需与通信对端严格匹配以确保数据完整性。

image.png

1.2 关键参数详解

  • 波特率:单位时间内传输的符号数(如9600波特率表示每秒传输9600个符号),需与对端设备一致。

  • 数据位:数据帧中有效信息的位数(常见为8位),影响单次传输的数据量。

  • 停止位:标识数据帧结束的位(1位、1.5位或2位),用于同步时钟。

  • 校验位:可选的奇偶校验位,用于简单错误检测(如奇校验、偶校验)。

1.3 硬件连接规范

STM32F103RCT6的串口引脚需遵循交叉连接原则:

  • 发送端(TX)连接对端接收端(RX)

  • 接收端(RX)连接对端发送端(TX)

  • 地线(GND)需共地

例如,USART1的TX(PA9)接对端RX,RX(PA10)接对端TX。

二、标准库串口配置步骤

2.1 初始化流程

标准库配置串口需完成以下步骤:

  1. 时钟使能:启用USART及GPIO时钟。

  2. GPIO配置:设置TX为复用推挽输出,RX为浮空输入。

  3. USART复位:初始化前复位外设。

  4. 参数初始化:配置波特率、数据位、停止位等。

  5. 中断配置(可选):启用接收中断并配置NVIC。

  6. 使能USART:启动串口模块。

2.2 代码实现示例

以下以USART1为例,展示完整配置代码:


#include "stm32f10x.h"



void USART1_Init(uint32_t bound) {

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;



// 1. 使能时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);



// 2. 配置GPIO

// TX (PA9)

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);



// RX (PA10)

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);



// 3. USART复位

USART_DeInit(USART1);



// 4. 配置USART参数

USART_InitStructure.USART_BaudRate = bound; // 波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 8位数据

USART_InitStructure.USART_StopBits = USART_StopBits_1; // 1位停止位

USART_InitStructure.USART_Parity = USART_Parity_No; // 无校验

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件流控

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 发送+接收

USART_Init(USART1, &USART_InitStructure);



// 5. 启用中断(可选)

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 接收中断



// 6. 配置NVIC

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);



// 7. 使能USART

USART_Cmd(USART1, ENABLE);

}

2.3 中断服务函数

中断模式下需实现接收回调函数,例如:


void USART1_IRQHandler(void) {

if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {

uint8_t data = USART_ReceiveData(USART1); // 读取数据

// 处理数据(如存入缓冲区或触发其他逻辑)

}

}

三、数据发送与接收实现

3.1 发送数据

通过USART_SendData函数发送数据,需等待发送完成:


void USART1_SendChar(char ch) {

while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送缓冲区空

USART_SendData(USART1, (uint8_t)ch);

}



void USART1_SendString(char *str) {

while (*str) {

USART1_SendChar(*str++);

}

}

3.2 接收数据

接收方式分为轮询和中断两种:

  • 轮询模式:通过USART_GetFlagStatus检查RXNE标志位。

  • 中断模式:通过回调函数处理接收数据,适合高实时性场景。

3.3 重定向printf

通过重定向fputc函数实现printf输出到串口:


int fputc(int ch, FILE *f) {

while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

USART_SendData(USART1, (uint8_t)ch);

return ch;

}

四、高级应用与优化

4.1 DMA传输

通过DMA实现高速数据传输,减少CPU占用。需配置DMA通道并关联USART数据寄存器。

4.2 多主机通信

在多设备场景中,需通过硬件流控(RTS/CTS)或软件协议(如帧头帧尾)避免冲突。

4.3 故障排除

  • 无数据收发:检查硬件连接、波特率匹配、时钟使能。

  • 数据错乱:增大缓冲区、优化中断优先级。

  • 死机:避免在中断中执行耗时操作。

五、完整工程示例

5.1 工程结构

Project/
├── Core/
│   ├── Inc/
│   │   └── usart.h
│   ├── Src/
│   │   └── usart.c
│   └── Startup/
│       └── startup_stm32f10x_hd.s
├── User/
│   ├── main.c
│   └── stm32f10x_it.c
└── Libraries/
├── CMSIS/
└── STM32F10x_StdPeriph_Driver/

5.2 主函数示例


#include "stm32f10x.h"

#include "usart.h"



int main(void) {

// 初始化系统时钟、GPIO等

SystemInit();



// 初始化USART1

USART1_Init(115200);



while (1) {

printf("Hello, STM32! ");

Delay_ms(1000);

}

}

六、总结

STM32F103RCT6的串口配置涉及时钟、GPIO、USART及中断的协同工作。通过标准库提供的API,开发者可灵活实现基础通信功能,并通过DMA、多主机协议等高级特性优化性能。实际应用中需结合硬件连接、通信协议及调试工具(如串口助手)进行综合验证,确保系统稳定运行。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: stm32f103rct6

相关资讯

资讯推荐
云母电容公司_云母电容生产厂商

云母电容公司_云母电容生产厂商

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

开关三极管13007的规格参数、引脚图、开关电源电路图?三极管13007可以用什么型号替代?

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

74ls74中文资料汇总(74ls74引脚图及功能_内部结构及应用电路)

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片lm2596s开关电压调节器的中文资料_引脚图及功能_内部结构及原理图_电路图及封装

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

芯片UA741运算放大器的资料及参数_引脚图及功能_电路原理图?ua741运算放大器的替代型号有哪些?

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

28nm光刻机卡住“02专项”——对于督工部分观点的批判(睡前消息353期)

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告