STM32的HAL库开发系列 - 串口不定长接收

简介: STM32的HAL库开发系列 - 串口不定长接收

STM32的HAL库开发系列 - 串口不定长接收

串口接收可以分为 定长接收 与 不定长接收 。

不定长接收稍微麻烦一点。需要通过最后两个字节是否为0x0A0x0D`来判断接收是否完成

实现的功能是将上位机发送来的消息接收后再发送给上位机,实现代码如下:

#defin UAR1_MAX_LEN 256
// 变量
uint8_t aRxBuffer;                        // 当前接收
uint8_t Uart1_RxBuff[UAR1_MAX_LEN];        // 接收中断缓冲
uint8_t Uart1_Rx_Cnt = 0;                // 接收缓冲计数

// 在main中开启中断接收
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);

// 中断回调函数中判断是否接收完成
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  
{
    if(Uart1_Rx_Cnt >= UAR1_MAX_LEN)  // 溢出判断
    {
        Uart1_Rx_Cnt = 0;    // Uart1_Rx_Cnt为接收缓冲计数值,当达到UAR1_MAX_LEN(256)时,将清零
        memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //对数组Uart1_RxBuff[]进行清零
        // 发送警告
    }
    else
    {
        Uart1_RxBuff[Uart1_Rx_Cnt ++ ] = aRxBuffer;   
        if((Uart1_RxBuff[Uart1_Rx_Cnt - 1] == 0x0A) && (Uart1_RxBuff[Uart1_Rx_Cnt - 2] == 0x0D)) // 判断是否到0x0A、ox0D结尾
        {
            HAL_UART_Transmit(&huart1, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt, 2); //将收到的信息发送出去
            Uart1_Rx_Cnt = 0;
            memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); // 清空缓冲数组
        }
    }
    HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   // 重新开启接收中断,方便下一次接收
}
目录
相关文章
|
3天前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
11 2
|
3天前
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
8 1
|
3天前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
14 4
|
4天前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
12 2
|
4天前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
17 1
|
29天前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
|
1月前
【STM32】基于HAL库的360度编码器、摇杆代码编写
【STM32】基于HAL库的360度编码器、摇杆代码编写
|
1月前
|
传感器 算法
【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪
【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪
|
1月前
|
传感器