ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

土木本科生的STM32探索之旅:用串口助手远程开关LED(0/1控制实战)

土木本科生的STM32探索之旅:用串口助手远程开关LED(0/1控制实战)

一、引言

在上一篇中,我们通过触摸电容传感器实现了无物理按键的 LED 控制。现在,我们要挑战更高阶的交互方式——串口通信(USART)!

各位小伙伴们有没有想过:不用按按钮,也不用碰金属片,只要在电脑上敲一个数字,就能让开发板上的小灯亮起或熄灭。

这就是我们今天要实现的功能:在电脑的串口助手上发送0或1,控制 STM32 上的 LED 亮灭。

在串口助手发送1给stm32f103vet6,stm32f103vet6上pb0引脚位置处的led灯亮起,发送0则其熄灭。

二、软硬件准备与AI指导实验过程

由于我之前就已经写过这个实验的稿子,我偷会懒了哈,我把它截图放上来,另外相关的视频也会录制出来。。

图片来自于我很久之前写的实验流程

三、详细的实验步骤

这里也是之前编写过,我也放截图了哦,代码为了给大家好复制,我会单独贴出来。

网址:https://docs.keysking.com/docs/stm32/resourcePack/

usb转串口,我也管它叫做usb转ttl

图片要是有的地方看不清楚可以询问一下ai,或者对照之前ai给的实验指导,也可以关注我后期更新好的实验视频。

关于nvic,大家在上篇文章或者相关的视频有接触到了中断。

打开main.c,在/* USER CODE BEGIN PV */区域添加: uint8_t uart_rx_data; // 存储串口接收的1字节数据
在main()函数的/* USER CODE BEGIN 2 */区域添加: // 启动串口1接收中断(每次接收1字节) HAL_UART_Receive_IT(&huart1, &uart_rx_data, 1);
在main.c的/* USER CODE BEGIN 4 */区域添加: // 串口接收完成中断回调(HAL库自动调用) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART1) { //发送'1'时输出低电平(LED亮),发送'0'时输出高电平(LED灭) if (uart_rx_data == '1') { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 低电平 → 亮 } else if (uart_rx_data == '0') { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 高电平 → 灭 } // 重新使能接收中断 HAL_UART_Receive_IT(&huart1, &uart_rx_data, 1); } }

可能代码的格式不够美观,大家可以根据实际情况调整一下。

网址:https://serial.baud-dance.com/

由于是已经放寒假了,我回了老家,目前使用的笔记本电脑有一些年代了,所以写文章和录制视频,剪辑视频就会有点和之前不同,或者混乱,请大家见谅,我这里会尽量做到位哈。有疑问可以在文章或者哔哩哔哩视频的评论区提问哦。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进