登录/注册

stm32f103串口接收指令

更多

在STM32F103系列微控制器中实现串口接收指令,通常需要以下步骤:


1. 硬件准备


2. 软件配置(以标准库为例)

(1) 初始化GPIO

// 以USART1为例
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);

// 配置TX引脚为复用推挽输出
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引脚为浮空输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

(2) 配置串口参数

USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;  // 波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;  // 数据位长度
USART_InitStructure.USART_StopBits = USART_StopBits_1;       // 停止位
USART_InitStructure.USART_Parity = USART_Parity_No;          // 校验位
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 启用收发
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无流控
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);

(3) 开启接收中断

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // 启用接收中断
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);

3. 中断服务函数处理

// 定义接收缓冲区和索引
uint8_t rx_buffer[128];
uint16_t rx_index = 0;

void USART1_IRQHandler(void) {
    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
        uint8_t data = USART_ReceiveData(USART1);

        // 判断是否为指令结束符(例如回车或换行)
        if (data == '\r' || data == '\n') {
            rx_buffer[rx_index] = '\0'; // 添加字符串结束符
            rx_index = 0;
            // 触发指令解析标志
            instruction_received = 1;
        } else {
            rx_buffer[rx_index++] = data;
            if (rx_index >= sizeof(rx_buffer)) rx_index = 0; // 防止溢出
        }
    }
}

4. 主循环处理指令

extern uint8_t instruction_received;
extern uint8_t rx_buffer[];

while (1) {
    if (instruction_received) {
        instruction_received = 0;
        // 解析指令并执行操作
        if (strcmp((char*)rx_buffer, "LED_ON") == 0) {
            GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET); // 打开LED
        } else if (strcmp((char*)rx_buffer, "LED_OFF") == 0) {
            GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET); // 关闭LED
        }
    }
}

5. 注意事项


扩展优化

通过以上步骤,即可实现STM32F103的串口指令接收与响应。

如何实现STM32F103串口通信和定时??

如何实现STM32F103串口通信和定时??

2021-12-16 07:15:04

stm32f103串口如何实现映射功能?

stm32f103串口如何实现映射功能?

2021-12-15 06:53:25

如何去配置STM32F103串口4和串口5的中断接收程序呢

如何去配置STM32F103串口4和串口5的中断接收程序呢?

2021-12-14 07:44:28

基于STM32F103的IAP串口升级源码

基于STM32F103的IAP串口升级源码代码,共两个工程,bl+app分享

资料下载 jinyi7016 2022-09-23 17:08:02

(二)STM32串口总结(库函数版)

一.STM32F103有两个串口图中 TXD/RXD 是相对 CH340G 来说的,也就是 USB 串口的发送和

资料下载 ah此生不换 2022-01-14 13:56:33

STM32F103中断串口通信USART

本文基于笔者之前的博客STM32F103串口通信USART小试牛刀,在此基础上,加上中断函数,并补充HAL函数实现。文章目录一、实验原理二、实验代码1.库函数2.HAL库函数三、实验结果四、总结五

资料下载 李辉 2022-01-14 10:39:40

嵌入式单片机基础篇(二十五)之stm32F103串口接收发送固定大小字符程序

stm32F103串口接收发送固定大小字符串程序#include "

资料下载 王兰 2021-12-27 19:26:59

STM32F103学习笔记三 串口通信

STM32F103学习笔记三 串口通信

资料下载 佚名 2021-11-25 09:06:03

求大佬分享stm32f103串口程序

求大佬分享stm32f103串口程序

2021-12-14 06:53:30

STM32f103串口接收不定长数据的方法有哪几种?

STM32f103串口接收不定长数据的方法有哪几种?

2021-12-07 07:26:54

如何解决stm32f103串口通信乱码问题?

如何解决stm32f103串口通信乱码问题?

2021-12-06 07:34:36

STM32F103串口怎么使用?

STM32F103串口怎么使用?

2021-12-03 06:19:48

如何解决STM32F103串口BUG?

如何解决STM32F103串口BUG?

2021-12-02 07:00:37

stm32f103串口3程序为什么会频繁进入串口接收中断呢

stm32f103串口3程序为什么会频繁进入串口接收中断呢?是什么原因呢

2021-11-16 06:20:37

stm32f103串口数据接收

stm32f103串口数据接收,通用同步/异步收发器(USART)STM32F103

2021-08-09 09:03:17
7天热门专题 换一换
相关标签