怎样将数据放入一个缓冲区stm32
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样将数据放入一个缓冲区stm32相关的知识,希望对你有一定的参考价值。
参考技术A STM32使用DMA接收串口数据》和《STM32使用DMA发送串口数据》讲解了如何使用DMA辅助串口收发数据,使用DMA的好处在于不用CPU即可完成串口收发数据,减轻CPU负担,在串口通信频繁且不想频繁中断的应用中非常有用。除了上述两种场景,还有一种应用场景:串口接收数据长度位置,频率未知,不要求实时处理的场景。如果采用上述方案,接收一帧数据立即处理,那么在处理的时候来的数据包就“丢失”了。这个时候就需要缓冲队列来解决这个问题。
02、缓冲区
缓冲区看名字就知道,是缓冲数据用的。实现缓冲区最简单的办法时,定义多个数组,接收一包数据到数组A,就把接收数据的地址换成数组B,每个数据有个标记字节用于表示这个数组是否收到数据,收到数据是否处理完成。
上述方案是完全可行的,但有缺点:
①缓冲数据组数一定,且有多变量,代码结构不太清晰。
②接收数据长度可能大于数组大小,也可能小于数组大小。不灵活,需要接收数据很长时容易出错,且内存利用率低。
解决这个问题的好办法是:环形缓冲区。
环形缓冲区就是一个带“头指针”和“尾指针”的数组。“头指针”指向环形缓冲区中可读的数据,“尾指针”指向环形缓冲区中可写的缓冲空间。通过移动“头指针”和“尾指针”就可以实现缓冲区的数据读取和写入。在通常情况下,应用程序读取环形缓冲区的数据仅仅会影响“头指针”,而串口接收数据仅仅会影响“尾指针”。当串口接收到新的数组,则将数组保存到环形缓冲区中,同时将“尾指针”加1,以保存下一个数据;应用程序在读取数据时,“头指针”加1,以读取下一个数据。当“尾指针”超过数组大小,则“尾指针”重新指向数组的首元素,从而形成“环形缓冲区”!,有效数据区域在“头指针”和“尾指针”之间。如下图
图片
如上面说的,环形缓冲区其实就是一个数组,将其“剪开”,然后“拉直”后如下图
wt901怎么用stm32读取数据
参考技术A 硬件设备:WT901C485模块、六合一、USB-TTL、杜邦线、STM32F103C8T6单片机。给大家看下图片。(解释下为什么要用六合一模块。由于我们这个STM32F103C8T6这个模块没有485的引角,而六合一有TTL-485的功能。因此就可以把STM32F103C8T6的串口转换成485的电平和我们的WT901C485去连接使用)在这里插入图片描述
WT901C485
1
1
在这里插入图片描述
STM32F103C8T6
1
1
2)软件准备 : KEIL 5 (5.17版本的) 链接:https://pan.baidu.com/share/init?surl=LQ4KnRPxm_a4Zk7PUZSELA 提取码:eq50.
2 接线方式
1、使用数据线将STM32F103C8T6与电脑连接通信
2、WT901C485与六合一连接,然后再与STM32F103C8T6使用杜邦线连接。具体接线如下图所示:
WT901C485 六合一 STM32F103C8T6
VCC————— VCC VCC ————— VCC
A —— —— A TX ————— PA2
B —— —— B RX ————— PA3
GND —— —— GND GND ————— GND
在这里插入图片描述
3 生成下载文件
1、在OUTUT勾选Creat HEX File
在这里插入图片描述
2、找到生成的HEX文件
在这里插入图片描述
4 下载程序
1、用数据线连接好STM32F103C8T6单片机和PC端。
2、按照“软件配置.png”图示设置好软件。
3、找到所需的hex文件。
4、按STM32F103C8T6单片机的红色的Bootloader 键
5、点击开始编程按钮,下载程序
在这里插入图片描述
以上是关于怎样将数据放入一个缓冲区stm32的主要内容,如果未能解决你的问题,请参考以下文章