
1.首先你要选好一个能够显示波形的控件,我当时使用的是delphi,所以用了里面一个chart控件,你可以参考下面的网站http://www.steema.com。在c++builder里面也是有控件的,你找找看,会有绘制图表的控件的。学会使用这个图表控件。
2.数据的载入。程序开始运行时,通过file读取函数从本地读取txt文件,读出后保存到内存中。
3.绘图。将读入内存中的数据传递给图表控件(可能需要对格式进行一些调整),这样就能显示出波形了。
4.滤波。巴特沃兹滤波算法你可以从通讯教材或者网上搜索到现成的代码,基本上不需要你自己编写。点击滤波按钮后,将你之前读入内存的数据进行滤波处理,然后将处理后的数据传递给图表控件,就能显示出滤波后的波形了。
各种类型的数据传输和存储就涉及到大小端的问题,首先要简单说下芯片的大小端问题,我们这里主要讨论Cortex-M内核。M内核支持大端或者小端,实际应用中大部分内核都是小端。以STM32为例,全部都是小端,而且是芯片设计之初就固化进去的,不可修改。市面上其他厂家基本也都固化的小端格式。
F1编程手册
F3和F4编程手册
F7和H7编程手册
各种数据类型编程EEPROM,SPI Flash等存储器的简易方法,一般这些存储器都是字节编程,写入浮点等数据类型时不太方便。这里分享一个方法,定义一个结构体,将各种数据类型封装进去:
写入的时候采用下面方式:
读取时可以采用下面方式:
各种数据类型的SPI,UART,I2C等传输问题。这里我们以串口通信为例,比如主机要发送如下格式数据给从机:
我们可以做一个如下结构体格式:
typedef struct
{
uint8_t ucStart
uint16_t usCO2
uint16_t usPM25
uint16_t usHumidity
floatTemprature
uint32_t ulParam
uint8_t ucEnd1
uint8_t ucEnd2
}
UART_T
UART_T g_tUartParam
复制
主机发送的时候我们就可以采用如下方法:
comSendBuf(COM1, (uint8_t *)&g_tUartParam, sizeof(UART_T))
复制
从机工程也定义一个同样的结构体变量,比如我们把接收到一帧数据存到缓冲uint8_t buf[50]里面了。
我们就可以定义一个结构体指针变量:
UART_T *pUartParam
pUartParam = (UART_T *)buf
复制
那么我们就可以pUartParam->usCO2, pUartParam->Temprature等方式来访问,非常方便。
代码实现
结构体数据如下:
typedef struct
{
uint8_t ucStart
uint16_t usCO2
uint16_t usPM25
uint16_t usHumidity
floatTemprature
uint32_t ulParam
uint8_t ucEnd1
uint8_t ucEnd2
}
USART_T
USART_T g_tUartParam/* 串口1发送数据使用 */
USART_T *pUartParam /* 串口2接数据使用 */
uint8_t buf[128]/* 接收记录缓冲 */
复制
数据收发处理:
/*
*********************************************************************************************************
*函 数 名: main
*功能说明: c程序入口
*形参: 无
*返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
uint8_t ucKeyCode
uint8_t read
uint8_t ucStatus = 0 /* 状态机标志 */
uint8_t ucCount=0
float ftest = 0.11f
pUartParam = (USART_T *)buf
bsp_Init() /* 硬件初始化 */
PrintfLogo() /* 打印例程名称和版本等信息 */
PrintfHelp() /* 打印 *** 作提示 */
bsp_StartAutoTimer(0, 100)/* 启动1个100ms的自动重装的定时器 */
memset(buf, 0, 128)
/* 进入主程序循环体 */
while (1)
{
bsp_Idle() /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
/* 判断定时器超时时间 */
if (bsp_CheckTimer(0))
{
/* 每隔100ms 进来一次 */
bsp_LedToggle(2)
}
/* 按键滤波和检测由后台systick中断服务程序实现,我们只需要调用bsp_GetKey读取键值即可。 */
ucKeyCode = bsp_GetKey() /* 读取键值, 无键按下时返回 KEY_NONE = 0 */
if (ucKeyCode != KEY_NONE)
{
switch (ucKeyCode)
{
case KEY_DOWN_K1:/* K1键按下,串口1发送数据给串口2 */
g_tUartParam.ucStart = '$'
g_tUartParam.usCO2 = 1
g_tUartParam.usPM25 = 2
g_tUartParam.usHumidity = 3
g_tUartParam.Temprature = ftest++
g_tUartParam.ulParam = 5
g_tUartParam.ucEnd1 = '\r'
g_tUartParam.ucEnd2 = '\n'
comSendBuf(COM1, (uint8_t *)&g_tUartParam, sizeof(UART_T))
printf("发送数据完成\r\n")
break
default:
/* 其它的键值不处理 */
break
}
}
/* 串口2接收数据解析处理 */
if (comGetChar(COM2, &read))
{
switch (ucStatus)
{
/* 状态0保证接收到0x01 */
case 0:
if(read == '$')
{
ucStatus = 1
buf[ucCount++] = read
}
break
case 1:
buf[ucCount] = read
/* 接收够15个数据 */
if((buf[ucCount-1] == '\r')&&(buf[ucCount] == '\n'))
{
/* 打印接收到的数据值 */
printf("接收到的数据:\r\n")
printf("pUartParam->usCO2 = %d\r\n", pUartParam->usCO2)
printf("pUartParam->usPM25 = %d\r\n", pUartParam->usPM25)
printf("pUartParam->usHumidity = %d\r\n", pUartParam->usHumidity)
printf("pUartParam->Temprature = %f\r\n", pUartParam->Temprature)
printf("pUartParam->ulParam = %d\r\n", pUartParam->ulParam)
printf("\r\n")
memset(buf, 0, 128)
ucStatus = 0
ucCount=0
}
else
{
ucCount++
}
break
default:
break
}
}
}
}
复制
测试效果
单片机
stm32
嵌入式硬件
手机处理器对比
精选推荐
广告
ST发布采用SO8窄封装的SPI串口EEPROM存储器芯片
0下载·0评论
2020年12月4日
串口通信和EEPROM
4下载·0评论
2013年9月18日
硬件通信 I2C SPI EEPROM
11下载·2评论
2012年6月8日
读写I2C FLASH的Verilog程序
62下载·4评论
2010年9月21日
串口SPI FLASH实验
22下载·0评论
2019年2月25日
I2C总线与EEPROM
1941阅读·0评论·11点赞
2017年7月17日
属狗人2023运程,穿3种颜色衣服最旺!1月23日开始转变!
麦玲玲仅供娱乐
广告
完整的读写flash解读(IIC方式与SPI方式相比较,基于STM32F103ZET6)
4396阅读·5评论·7点赞
2020年3月28日
一文搞懂SPI通信协议
1.4W阅读·5评论·32点赞
2022年4月23日
【FPGA】i2c协议详解及eeprom的读写uart串口通信验证
1133阅读·1评论·0点赞
2022年2月18日
FlashTool STM32F103ZET6通过USB串口烧写SPI flash的上位机
41下载·2评论
2018年3月21日
I2C 烧录器| I2C EEPROM烧录器 | I2C Flash烧录器上位机配套软件
128下载·2评论
2013年6月21日
UART2-读写EEPROM
1下载·0评论
2016年8月3日
PIC FW开发,包含SPI,I2C,EEPROM,温度sensor,UART交互
8下载·0评论
2014年11月6日
STM32:I2C接口读写EEPROM(AT24C02)试验例程
1.4W阅读·2评论·5点赞
2017年4月24日
第十六章 IIC协议详解+UART串口读写EEPROM
1490阅读·0评论·1点赞
2017年3月6日
串口通信协议 UART+I2C+SPI
1527阅读·0评论·1点赞
2019年8月26日
UART 串口通讯协议 和I2C 简介
1698阅读·0评论·1点赞
2022年2月24日
I2C—读写EEPROM
4050阅读·2评论·7点赞
2022年3月23日
去首页
看看更多热门内容
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)