登录/注册

stm32f103单片机的串口1

stm32f103单片机的串口1

更多

STM32F103 单片机的 USART1(串口1) 是其内置的通用同步异步收发器,常用于实现与外部设备(如PC、传感器、模块等)的串行通信。以下是关于 USART1 的关键点说明和基础配置步骤:


1. USART1 基础特性


2. 基础配置步骤(以标准库为例)

(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) 配置 USART1 参数

USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;          // 波特率
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_Mode = USART_Mode_Tx | USART_Mode_Rx; // 使能收发
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件流控
USART_Init(USART1, &USART_InitStructure);

// 使能 USART1
USART_Cmd(USART1, ENABLE);

3. 数据收发函数

(1) 发送数据

// 发送单字节
USART_SendData(USART1, data);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送完成

// 发送字符串
void USART1_SendString(char* str) {
    while (*str) {
        USART_SendData(USART1, *str++);
        while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    }
}

(2) 接收数据(轮询方式)

while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); // 等待接收完成
uint16_t data = USART_ReceiveData(USART1);

4. 中断配置(推荐接收使用中断)

(1) 使能接收中断

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

// 在 NVIC 中配置中断优先级
NVIC_InitTypeDef NVIC_InitStructure;
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);

(2) 中断服务函数

void USART1_IRQHandler(void) {
    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
        uint8_t data = USART_ReceiveData(USART1);
        // 处理接收到的数据(例如存入缓冲区)
    }
}

5. 常见问题


6. 进阶功能

如果需要更具体的代码示例或问题排查,请进一步说明需求!

stm32F103单片机同时使用串口1和定时器中断会产生冲突吗?

stm32F103单片机同时使用串口1和定时器中断会产生冲突吗?为什么我

2023-11-09 08:21:32

基于STM32F103单片机设计

情况,基于STM32F103单片机设计一个数字电压表仿真设计。该设计应满足的功能要求为: 1、以

2023-09-10 09:53:04

STM32F103单片机时钟树结构图及时钟配置

STM32属于Cortex-M3内核的单片机,时钟结构比之前的51单片机较复杂的多,根据数据手册,

2023-01-19 16:36:00

[笔记]|[stm32]|[寄存器存储器区别]|[PWM]|[串口]|[Timer]stm32f103笔记

录[笔记]|[stm32]|[寄存器存储器区别]|[PWM]|[串口]|[Timer]stm32f103笔记

资料下载 王杰 2021-12-06 18:51:17

stm32f103系列单片机串口初始化

stm32f103系列单片机串口初始化 这篇文章是本人从小白到熟悉这个单片机

资料下载 20762 2021-11-19 11:06:03

基于STM32f103单片机的智能家居步进电机

基于STM32f103单片机的智能家居步进电机

资料下载 jf_42320578 2021-05-20 14:30:38

使用STM32F103单片机实现定时器实验的详细资料说明

本文档的主要内容详细介绍的是使用STM32F103单片机实现定时器实验的详细资料说明。

资料下载 Squirrelgoddess 2020-04-07 08:00:00

STM32F103单片机控制无刷电机的程序源码免费下载

本文档的主要内容详细介绍的是STM32F103单片机控制无刷电机的源代码免费下载。

资料下载 兜宝的游乐园 2019-09-12 08:00:00

基于STM32F103单片机的矩阵按键设计

本实验使用STM32F103单片机,主题代码通用的。

2022-12-09 17:18:46

基于STM32F103单片机的CANopen实现

基于STM32F103系列单片机的CANopen主从机PDO&SDO例程这是一个CANopen协议通信例程,硬件平台为

2022-03-01 06:07:03

stm32f103单片机与嵌入式系统的区别在哪

录[笔记]|[stm32]|[寄存器存储器区别]|[PWM]|[串口]|[Timer]stm32f103笔记

2022-02-10 07:45:45

如何去配置STM32F103单片机串口

STM32F103系列单片机共有几个串口呢?如何去配置STM32F103

2021-12-06 06:48:24

stm32f103单片机串口初始化的过程是怎样的?

stm32f103单片机串口初始化的过程是怎样的?

2021-12-06 06:04:09

STM32F103单片机串口通信带奇偶校验位的代码分享

STM32F103单片机串口通信带奇偶校验位的代码分享

2021-12-03 06:43:33

STM32F103单片机串口空闲中断

前两天在研究STM32F103单片机的串口空闲中断时,突然想起来Modbus通信非常适合用空闲中断来处理。先看看Modbus RTU模式下的通信

2021-08-12 07:14:50
7天热门专题 换一换
相关标签