你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

《STM32CubeMX2 实战课程》学习笔记+串口通信

[复制链接]
背影101 发布时间:2026-9-15 23:58

书接上回,今天来进行串口通讯实验

准备进行串口输入输出,串口控制点灯

一、原理图

首先找到需要的usart串口

image.png

通过手册可以知道,此为服用端口,与stlink一致的,所以不需要再外接串口即可

二、MX2操作

image.png

PA5,点灯使用,与昨天保持一致即可

image.png

PA2、PA3串口,设置如下

image.png

image.pngimage.png

image.png

image.png

image.png

时钟选择:

image.png

模组激活:

image.png

生成Cmake

image.png

三、VS调试

代码:

``

/ Includes ------------------------------------------------------------------/

include "main.h"

include <stdio.h>

include <string.h>

include "mx_usart2.h"

include "basic_stdio_core.h"

/ Private variables ---------------------------------------------------------/ uint8_t aRxBuffer; // 单字节接收缓冲 char cmdBuffer[16]; // 命令缓冲区 uint8_t cmdIndex = 0; // 命令缓冲区索引 volatile uint8_t cmdReady = 0; // 命令就绪标志位

int main(void) { if (mx_system_init() != SYSTEM_OK) { return (-1); } else { hal_uart_handle_t *huart2 = mx_usart2_uart_gethandle();

BASIC_STDIO_Init(huart2);

/ 上电打印一次 / printf("System Ready!\r\n"); printf("Send 'on' -> LED ON, 'off' -> LED OFF, others -> echo.\r\n");

/ 开启接收中断 / HAL_UART_Receive_IT(huart2, &aRxBuffer, 1);

while (1) { / 收到完整命令时才处理 / if (cmdReady) { cmdReady = 0;

if (strcmp(cmdBuffer, "on") == 0) { HAL_GPIO_WritePin(HAL_GPIOA, HAL_GPIO_PIN_5, HAL_GPIO_PIN_SET); printf("LED ON\r\n"); } else if (strcmp(cmdBuffer, "off") == 0) { HAL_GPIO_WritePin(HAL_GPIOA, HAL_GPIO_PIN_5, HAL_GPIO_PIN_RESET); printf("LED OFF\r\n"); } else { printf("%s\r\n", cmdBuffer); } } } } }

/ 接收回调函数:负责收字符和判断命令结束 / void HAL_UART_RxCpltCallback(hal_uart_handle_t *huart, uint32_t size_byte, hal_uart_rx_event_types_t rx_event) { if (huart->instance == USART2) { char ch = (char)aRxBuffer;

if (ch == '\r' || ch == '\n') { / 命令结束,加结束符,置标志位 / cmdBuffer[cmdIndex] = '\0'; if (cmdIndex > 0) { cmdReady = 1; // 通知主循环:有新命令 } cmdIndex = 0; } else { / 普通字符,累积到缓冲区 / if (cmdIndex < sizeof(cmdBuffer) - 1) { cmdBuffer[cmdIndex++] = ch; } else { cmdIndex = 0; // 溢出保护 } }

/ 重新开启接收中断,等待下一个字节 / HAL_UART_Receive_IT(huart, &aRxBuffer, 1); } }

四、效果

首先串口打印如下信息:

System Ready! Send 'on' -> LED ON, 'off' -> LED OFF, others -> echo.

然后等待接收信息

如果接收到on,则点亮LD1,并回显LED ON

如果接收到off,则熄灭LD1,并回显LED OFF

如果接收到其他信息,则回显接收到的信息

五、视频

STM32C5开发板串口实验——-串口打印回显以及控制led等亮灭_哔哩哔哩_bilibili

[STM32C5开发板串口实验——-串口打印回显以及控制led等亮灭_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1DteH6AE4S/?vd_source=ba772c0e85968405f3278035d0e204a0)

赞 收藏 评论0 发布时间:2026-9-15 23:58

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版