匿名上位机V7 stm32f407 串口收发协议

匿名上位机V7 stm32f407 简单串口收发

主要实现多参数的读写上位机绘图功能


上位机下载:

下载链接: 匿名上位机.
笔者使用匿名上位机V7.1.1.16版本进行开发。


通信协议:

提示:这里可以添加计划学习的时间例如:

这一包数据中,主要有7类数据,第一帧为帧头默认0XAA, 第二帧写入目标地址,这里以灵活帧为例(0XFF),第三帧数据是功能ID在匿名上位机中灵活帧数据对应的协议是(0XF1~0XFA),这里以0XF1为例子,数据长度与发送的数据内容相关联,校验数据以所给的协议为参考即可。
校验示例


STM32F407代码:

基于STM32F407VE开发使用HAL库完成
初始化:
外部时钟使能
上图先开启外部时钟使能
时钟树初始化
时钟树初始化
打开串口
打开串口
使能串口中断
使能串口中断

下面生成代码
添加协议文件.c

//使用匿名7.1上位机协议
/
//数据拆分宏定义,在发送大于1字节的数据类型时,比如int16、float等,需要把数据拆分成单独字节进行发送
#define BYTE0(dwTemp)       ( *( (char *)(&dwTemp)	  ) )     /*!< uint32_t 数据拆分 byte0  */
#define BYTE1(dwTemp)       ( *( (char *)(&dwTemp) + 1) )     /*!< uint32_t 数据拆分 byte1  */
#define BYTE2(dwTemp)       ( *( (char *)(&dwTemp) + 2) )     /*!< uint32_t 数据拆分 byte2  */
#define BYTE3(dwTemp)       ( *( (char *)(&dwTemp) + 3) )     /*!< uint32_t 数据拆分 byte3  */
/**  发送数据缓存 */
unsigned char data_to_send[50]; //用于绘图

unsigned char data_to_send_out[50]; //用于传输

unsigned char data_to_get[50];//接收数据缓存

//上面三个数组只是我个人定义的可根据自己需求进行修改

extern UART_HandleTypeDef huart1; //外部申明 此处需要根据开启的串口进行修改
/*!
  * @brief    Send_Data函数是协议中所有发送数据功能使用到的发送函数
  *
  * @param    dataToSend   :   要发送的数据首地址
  * @param    length       :   要发送的数据长度
  *
  * @return   无
  *
  * @note     移植时,用户应根据自身应用的情况,根据使用的通信方式,实现此函数
  *
  * @see      内部调用
  *
  * @date     2021/5/28 星期二
  */
void ANO_DT_Send_Data(unsigned char *dataToSend , unsigned short length)
{

    /**使用串口正常发送数据,大概需要1.5ms*/
		//UART_PutBuff(UART0, dataToSend, length);     //可以修改不同的串口发送数据
		HAL_UART_Transmit(&huart1,(uint8_t*)dataToSend,length,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,length为字符串长度,0xFFFF为超时时间 (需要根据开启的串口进行修改)
}
/*!
  * @brief    向上位机发送发送1个int16_t数据
  *
  * @param    data1: 发送给上位机显示波形 (可以自己加)
  *
  * @return   无
  *
  * @note     无
  *
  * @see      ANO_DT_send_int16 ( 1 );
  *
  * @date     2021/5/28 星期二
  */
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;      //匿名协议帧头  0xAA
	data_to_send[_cnt++] = 0xFF;
	data_to_send[_cnt++] = 0xF1;      //使用用户协议帧0xF1
	
   data_to_send[_cnt++] = 0;        //1个int16_t 长度 2个字节
	
	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]; //从帧头开始,对每一字节进行求和,直到DATA区结束 
		addcheck += sumcheck; //每一字节的求和操作,进行一次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"
/*!
  * @brief    向上位机发送发送8个int16_t数据
  *
  * @param    data1 - data8  : 发送给上位机显示波形
  *
  * @return   无
  *
  * @note     无
  *
  * @see      ANO_DT_send_int16(1, 2, 3, 0, 0, 0, 0, 0);
  *
  * @date     2021/5/28 星期二
  */
void ANO_DT_send_int16(short data1 );
#endif /* SRC_APPSW_TRICORE_USER_ANO_DT_H_ */

在对应的位置写如自己需要发送的数据即可,根据自己需求进行适当的修改 就可以实现与匿名上位机的通信。完整的协议文件在 协议文件。 完整工程文件在工程文件

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱神的箭呵呵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值