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一帧数据了
以下是完整图示
实验结果
作者:快乐美洲虎