匿名上位机V7 stm32f407 简单串口收发
主要实现多参数的读写上位机绘图功能
上位机下载:
下载链接: 匿名上位机. 笔者使用匿名上位机V7.1.1.16版本进行开发。
通信协议:
这一包数据中,主要有7类数据,第一帧为帧头默认0XAA, 第二帧写入目标地址,这里以灵活帧为例(0XFF),第三帧数据是功能ID在匿名上位机中灵活帧数据对应的协议是(0XF1~0XFA),这里以0XF1为例子,数据长度与发送的数据内容相关联,校验数据以所给的协议为参考即可。
STM32F407代码:
基于STM32F407VE开发使用HAL库完成 初始化: 上图先开启外部时钟使能 时钟树初始化 打开串口 使能串口中断
下面生成代码 添加协议文件.c
#define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) )
#define BYTE1(dwTemp) ( *( (char *)(&dwTemp) + 1) )
#define BYTE2(dwTemp) ( *( (char *)(&dwTemp) + 2) )
#define BYTE3(dwTemp) ( *( (char *)(&dwTemp) + 3) )
unsigned char data_to_send[50];
unsigned char data_to_send_out[50];
unsigned char data_to_get[50];
extern UART_HandleTypeDef huart1;
void ANO_DT_Send_Data(unsigned char *dataToSend , unsigned short length)
{
HAL_UART_Transmit(&huart1,(uint8_t*)dataToSend,length,0xFFFF);
}
void ANO_DT_send_int16(short data1 )
{
unsigned char _cnt=0;
unsigned char i = 0;
unsigned char sumcheck = 0;
unsigned char addcheck = 0;
data_to_send[_cnt++] = 0xAA;
data_to_send[_cnt++] = 0xFF;
data_to_send[_cnt++] = 0xF1;
data_to_send[_cnt++] = 0;
data_to_send[_cnt++]=BYTE0(data1);
data_to_send[_cnt++]=BYTE1(data1);
data_to_send_out[3] = _cnt - 4;
for(i=0; i < (data_to_send[3]+4); i++)
{
sumcheck += data_to_send[i];
addcheck += sumcheck;
};
data_to_send[_cnt++]=sumcheck;
data_to_send[_cnt++]=addcheck;
ANO_DT_Send_Data(data_to_send, _cnt);
}
添加协议文件.h
#ifndef SRC_APPSW_TRICORE_USER_ANO_DT_H_
#define SRC_APPSW_TRICORE_USER_ANO_DT_H_
#include "stdint.h"
#include "main.h"
#include "usart.h"
void ANO_DT_send_int16(short data1 );
#endif
在对应的位置写如自己需要发送的数据即可,根据自己需求进行适当的修改 就可以实现与匿名上位机的通信。完整的协议文件在 协议文件。 完整工程文件在工程文件。
|