STM32 HAL库数据帧发送框架

                                                                        一

1:新建一个.c 和.h的DataFrame文本(文本名称可以任意定义),专门用于写数据帧发送接收的代码

2:在.c文本里面建立一个需要发送数据帧的结构体框架,定义内容:帧头,数据帧ID(如果用不到ID就不定义),数据内容数组,帧尾

typedef struct
{
    uint8_t DataHead;//帧头
    uint8_t DataID;//数据帧ID
    uint8_t Data[2];//数据内容数组,里面的数字代表数据的个数,任意定义
    uint8_t DataTail;//帧尾
    
}DataFrame;//数据帧结构体
 

DataFrame dataframe;

3:写一个发送数据帧的函数,视情况如果用不到数据ID,则不用在形参里面放id

void SendData(uint8_t *Data,uint8_t len,uint8_t id)
{
    dataframe.DataID=id;//定义数据ID,当然也可以不用ID数据,视情况而定
    //例如
    //void SendData(uint8_t *Data,uint8_t len)
    //删除ID号的函数
    
    dataframe.DataHead=0xA5;//定义帧头数据,任意定义帧头数据
    dataframe.DataTail=0x5A;//定义帧尾数据,任意定义帧尾数据
    if(len>sizeof(dataframe.Data))
    {
        len=sizeof(dataframe.Data);
    }
    for(uint8_t i=0;i<len;i++)
    {
        dataframe.Data[i]=Data[i];
    }
    HAL_UART_Transmit(&huart2, (uint8_t*)&dataframe, sizeof(dataframe), HAL_MAX_DELAY);
}

                                                                                         二

1:在.h文本里面添加usart.h头文件,然后把函数名放在.h文本里面

#include "usart.h"

void SendData(uint8_t *Data,uint8_t len,uint8_t id);

                                                                                            三

1:应用:在main.c里面应用就行。 比如我想发送数据内容为0X02,0X03,帧头帧尾为0XA5,0X5A,ID为0X01的一帧数据

则在main.c里面写

uint8_t AT_FrameData[2]={0x02,0x03};//要发送的数据帧内容数据,格式和数组一定要和数据帧结构里面的数组一样

if(KEY1==RESET)//摁下PA12,发送一帧数据:A5 01 02 03 5A
        {
            SendData(AT_FrameData,sizeof(AT_FrameData),0X01);//0x01是ID号
            HAL_Delay(500);
        }

那么摁下PA12摁键,就可以发送A5 01 02 03 5A一帧数据了

以下是完整图示

实验结果

作者:快乐美洲虎

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 HAL库数据帧发送框架

发表回复