只要你发送的格式符合要求的话就能把数据画出来,效果如下:
当然,也不是随便发个数据就能画的,要遵循某些协议。
简单写了两个函数,实现了傻瓜式使用,如下。
#include "vofa.h"
// 按printf格式写,最后必须加\r\n
void Vofa_FireWater(const char *format, ...)
{
uint8_t txBuffer[100];
uint32_t n;
va_list args;
va_start(args, format);
n = vsnprintf((char *)txBuffer, 100, format, args);
//....在此替换你的串口发送函数...........
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)txBuffer, n);
//......................................
va_end(args);
}
// 输入个数和数组地址
void Vofa_JustFloat(float *_data, uint8_t _num)
{
uint8_t tempData[100];
uint8_t temp_end[4] = {0, 0, 0x80, 0x7F};
float temp_copy[_num];
memcpy(&temp_copy, _data, sizeof(float) * _num);
memcpy(tempData, (uint8_t *)&temp_copy, sizeof(temp_copy));
memcpy(&tempData[_num * 4], &temp_end[0], 4);
//....在此替换你的串口发送函数...........
HAL_UART_Transmit_DMA(&huart1, tempData, (_num + 1) * 4);
//......................................
}
/*...........示例..............
float f1=0.5,f2=114.514;
Vofa_FireWater("%f,%f\r\n", f1, f2);
float f3[3]={88.77,0.66,55.44};
Vofa_JustFloat(f3, 3);
*/
如上所示,非常简短的两个函数,对应两种传输模式。
原理也不难,就是一个知识点:如何使用uint8_t无损传输浮点型,这个以后有机会细说。
但要注意,虽然原理上支持所有以uint8_t为传输单位的芯片,但要根据自己的芯片库函数去替换掉上图的那两行串口传输函数,我的这个仅适用于hal库dma模式下的stm32芯片。
使用方法也很简单,添加到工程里就能用,可以参考我之前的文章。
标签:教程,args,Vofa,temp,float,uint8,num,使用 From: https://blog.csdn.net/weixin_74923758/article/details/141171540