STM32学习——串口接收数据

本文介绍通过STM32的串口接收外部数据,并根据接收到的数据控制LED灯的闪烁次数。具体而言,通过串口调试助手发送特定的指令字符,STM32将解析这些字符并据此控制不同编号的LED灯进行闪烁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32学习——串口接收数据

一、目标
串口调试助手设置波特率115200,周期1ms,
发送数字n和状态开关闪,可以控制对应序号的灯开关闪

二、步骤

在这里插入图片描述
PE5控制DS1灯,PB5控制DS0灯,LED_Blink中,发送的第一个字符a,如果为1,控制DS1灯,
如果为0,控制DS0灯。发送的第二个字符b,控制灯闪的次数。
在这里插入图片描述
三、仿真
发送“13”,DS1灯闪三下
在这里插入图片描述

在这里插入图片描述

### STM32 HAL 库串口接收数据函数使用方法 在STM32 HAL库中,处理串口通信主要依赖于`HAL_UART_Receive()`及其变体来实现数据的接收功能。当涉及到更复杂的场景如DMA传输或是利用空闲线(IDLE line)中断捕获不定长的数据包时,则需进一步调用特定接口并设置相应的回调机制。 对于基本的同步阻塞方式下的单次读取操作可以采用: ```c // 接收指定数量字节到缓冲区buffer内,直到接收到Size个字符或超时发生 HAL_StatusTypeDef status = HAL_UART_Receive(&huart1, buffer, Size, Timeout); if (status != HAL_OK){ // 错误处理逻辑... } ``` 而为了提高效率以及适应实时性需求较高的场合下连续不断地获取输入流中的信息片段——特别是那些长度事先未知的消息体部分——推荐启用DMA模式配合IDLE事件触发策略共同作用[^2]。 具体来说就是先通过CubeMX工具配置好硬件参数选项以开启这些特性支持;接着定义全局变量保存临时状态标记与实际载荷容器,并注册自定义版本的回调入口以便及时响应外部刺激做出恰当反应[^4]。 下面给出一段综合运用上述技术要点的例子代码展示如何高效稳定地完成这项任务: ```c #include "main.h" UART_HandleTypeDef huart1; extern uint8_t rx_buffer[BUFFER_SIZE]; volatile uint8_t rx_length; void UART_Init(void){ /* 初始化USART外设 */ } void HAL_UARTEx_RxCpltCallback(UART_HandleTypeDef *huart){ if(huart->Instance== USART1){ /* 更新已接受的数据量计数器 */ rx_length=rx_length+huart->hdmarx->XferCount; /* 清除 IDLE 中断标志位 */ __HAL_UART_CLEAR_IDLEFLAG(&huart1); /* 如果整个消息已经完全到达则重置准备下次监听*/ if(/*条件满足*/){ rec1_end_flag = 1; HAL_UARTEx_ReceiveToIdle_DMA(&huart1,(uint8_t*)rx_buffer,BUFFER_SIZE); } } } int main(){ ... /* 启动基于IDLE检测的DMA循环接收过程 */ HAL_UARTEx_ReceiveToIdle_DMA(&huart1,(uint8_t *)rx_buffer,BUFFER_SIZE); while(1){ if(rec1_end_flag){ // 处理完整的接收帧 // 重新启动接收流程等待下一个命令到来 rec1_end_flag = 0; HAL_UARTEx_ReceiveToIdle_DMA(&huart1,(uint8_t *)rx_buffer,BUFFER_SIZE); } // 主程序其他业务逻辑... } ... } ``` 此段示范说明了怎样借助DMA引擎的力量加上对特殊状况作出迅速反馈的能力从而达成流畅不间断的信息交换目的。值得注意的是这里还涉及到了对外部中断服务例程内部细节的操作,这通常是在应用程序层面上不太常见但却十分重要的环节之一[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值