STM32与K210串口通信的解码问题(基于正点原子源码)

2023-05-16

这次电赛做的声源定位,用的麦克风阵列加k210采集声音,k210需要将数据传送stm32,在这里涉及到一个解码问题,这个解码是我在之前用stm32与其他设备串口通信中从来没有遇到过的,在CSDN搜索了很多,但是很多博主源码都只放一半,而且不讲怎么用,搞得我第三天晚上一头雾水,从半夜一点多到四点一直在研究这个解码,资料少就算了还不怎么讲的清楚,大半夜的脑子还不好,还是没看懂,于是睡到六点多就去看了正点原子的源码之后我懂了,接下来是正文,你不需要看懂它为什么那样做,你只需要会用他来输出自己想要的数据就足够。(在这里只讲串口通信的注意点,基本模块配置不再阐述)

一.K210方面

K210发送数据只能通过以下函数一个字符一个字符的发送,不管你发送多少数据,切记最后要发送‘\r\n’来表明发送数据结束。

uart.write()#发送单个字符的函数
uart.write('I\r\n')

uart.write('I')
uart.write('\r\n')
#这两种发送方法是等效的

二.STM32方面

串口接收(通过\r\n来判断是否接收完成):

usart.c
//切记不管你的stm32要接收k210传过来的什么东西,中断函数都不需要你改动,你需要改的是主函数
void USART3_IRQHandler(void)
{
    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾)
	{
		USART_ClearITPendingBit(USART3,  USART_IT_RXNE);	 
		Res =USART_ReceiveData(USART3);	//读取接收到的数据
		
		if((USART_RX_STA&0x8000)==0)//接收未完成
		{
			if(USART_RX_STA&0x4000)//接收到了0x0d
			{
				if(Res!=0x0a)
				{
				    USART_RX_STA=0;//接收错误,重新开始
				}
				else 
				{
				    USART_RX_STA|=0x8000;	//接收完成了 
				}
			}
			else //还没收到0X0D
			{	
				if(Res==0x0d)USART_RX_STA|=0x4000;
				else
				{
					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
					USART_RX_STA++;
					if(USART_RX_STA>(USART_REC_LEN-1))
						USART_RX_STA=0;//接收数据错误,重新开始接收	  
				}		 
			}
	    }
    } 
}
usart.h
#define USART_REC_LEN  			200  	//定义最大接收字节数 200
#define EN_USART1_RX 			1		//使能(1)/禁止(0)串口1接收
	  	
extern u8  USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 
extern u16 USART_RX_STA;         		//接收状态标记	
extern u8 Res;
main.c
/*USART_RX_STA为接收中断标志,当接收完成时这个变量将会置位,注意要及时给变量清零,方便下次接收
USART_RX_BUF为接收到的数据存放的地方,你只需要对这个变量进行操作达到你的目的就行,别的不需要你动*/
while(1)
{
    if(USART_RX_STA&0x8000)
	{
		len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
		for(t=0;t<len;t++)
		{
			USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
			while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
		}
        //在这里处理你的数据,你的数据全部都已经在缓冲区USART_RX_BUF里面了,直接操作这个数组即可
		USART_RX_STA=0;//标志位及时清零
	}
}

所以这一套下来你需要做的只是在死循环里面对缓冲区数组进行操作,就这些东西很多博主都只放一半代码,搞得人半知半解的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32与K210串口通信的解码问题(基于正点原子源码) 的相关文章

  • centos克隆

    下一步 下一步 选中创建完整克隆 启动克隆的系统 编辑 xff1a vi etc udev rules d 70 persistent net rules 修改之后 修改端口号和attr 修改完 执行 重启 xff1a reboot pin
  • 用pyhon下载jupyter遇到的问题(pip版本过低)

    首先安装jupyter 的前提是需要提前安装python 3 3版本及以上 然后输入 pip install jupyter 出现下面问题 python V 在命令行窗口输入 xff0c 验证python的版本 pip install ju
  • ubuntu利用usb_cam打开摄像头

    一 安装摄像头驱动usb cam 想要标定多个相机 xff0c 首先得把相机打开吧 xff0c usb cam是针对usb摄像头的ros驱动包 xff0c 简单来说就是得有这个功能包 xff0c 才能在ros中把摄像头打开 首先打开终端 x
  • Jmeter性能测试(1)---基础介绍

    jmeter xff08 一 xff09 基础介绍 参考书籍 xff1a 段念 软件性能测试与案例剖析 第二版 推荐一本书 零成本实现web性能测试 基于Apache jmeter xff0c 主要内容是一些关于jmeter的实战使用 xf
  • 利用Opencv实现物体的跟踪(1)

    目前感觉 xff0c 利用opencv实现的物体追踪 xff0c 关键要设置好你所检测对象的area xff0c 不然很容易出现混乱 本人也是自学 xff0c 敬请批评指正 import cv2 定义运算的核算子 BLUR RADIUS 6
  • C语言连连看秒杀辅助

    图像处理第一课 连连看秒杀辅助 项目效果 直接使用C语言 xff0c 实现 连连看 最强辅助 项目分析 项目的技术核心 不是逆向 xff0c 而是图像处理 图像处理 xff0c 更高维度的技术手段 电影中的图像处理应用 无人机战争 电影 完
  • 推荐10款适合C/C++开发人员的IDE

    IDE是程序员用于编程的应用程序或软件 IDE主要包括三部分 xff0c 即源代码编辑器 xff0c 构建自动化工具 xff08 编译器 xff09 和调试器 源代码编辑器是程序员可以编写代码的地方 xff0c 而程序员使用构建自动化工具来
  • C++五子棋人机对战

    目录 本教程配套视频 1 项目目标 2 效果演示 3 创建项目 4 项目框架设计 4 1 设计项目框架 4 2 根据设计框架创建类 5 给类添加主要接口 5 1 设计棋盘类Chess的主要接口 5 2 设计AI类的主要接口 5 3 设计Ma
  • VSCode这13款插件也太好用了

    又见VsCode Visual Studio Code xff08 简称VS Code xff09 是一个由微软开发 xff0c 同时支持Windows Linux 和 macOS 等操作系统的免费代码编辑器 xff0c 在2019年的St
  • C语言和C++的区别和联系,大多数人都说错了

    前言 C语言和C 43 43 到底是什么关系 xff1f 首先C 43 43 和C语言本来就是两种不同的编程语言 xff0c 但C 43 43 确实是对C语言的扩充和延伸 xff0c 并且对C语言提供后向兼容的能力 对于有些人说的C 43
  • C++之父做决定了:内部自救!

    进入2023年 xff0c 技术圈都在围观大洋彼岸的聊天机器ChatGPT xff0c 但对于编程圈而言 xff0c 没有什么比内存安全更能引起热议 近期美国国家安全局 xff08 NSA xff09 点名批评C 43 43 xff0c 建
  • 使用数组实现:约瑟夫环问题

    使用数组实现约瑟夫环问题的写法 xff1a include lt iostream gt include lt vector gt using namespace std vector lt int gt josephus int n in
  • 何谓春招?

    一 什么是春招 xff1a 春招是指一年中在春季进行的毕业生招聘活动 xff0c 很多公司在这个时间开始准备新一年的业务计划和预算 春招可以理解为是秋招的大型补招 xff0c 规模是秋招的60 左右 xff0c 抓住校园招聘的最后机会上岸心
  • Jmeter性能测试(2)---脚本录制

    jmeter xff08 二 xff09 录制脚本 对大多数刚开始接触性能测试的人来说 xff0c 代码功力可能不是太好 xff0c 我们可以通过工具 xff0c 录制脚本来进行测试 xff0c 以达到我们的目的 一般来讲 xff0c 录制
  • 为什么越来越多的IT人考软考?

    近几年随着国家计算机与软件技术的发展 xff0c 每年报名参加软考考试的人也越来越多 据工信部新闻发布会消息 xff0c 计算机软件与通信专业技术人员职业资格考试累计报考人数超过485万 xff0c 2022年报考人数129万人 01 为什
  • javascript里裁切图片插件库

    第三方库 cropperjs 适用于JS Vue Jquery 安装 npm install cropperjs 按照格式要求配置如下 lt Wrap the image or canvas element with a block ele
  • Ubuntu安装ROS系统

    昨天安装ros系统用了一天时间 xff0c 所以安装ros前一定要做好心理准备 希望我的经验能够有所帮助 以下方式是安装ros系统的一种方法 xff0c 不是具体的安装步骤 Ubuntu安装ROS系统方法 xff1a 一 Bilibili观
  • ROS系统下完成TCP通信 C语言编程

    ROS系统下完成TCP通信 xff0c 服务端和客户端C语言编程 服务端 xff08 Server xff09 xff1a span class token macro property span class token directive
  • 基于图神经网络强化学习解决车辆路径规划问题

    一 实验要求 复现以下论文的方法和结果 Duan L Zhan Y Hu H Gong Y Wei J Zhang X Xu Y Efficiently solving the practical vehicle routing probl
  • ERROR: Cannot uninstall ‘PyYAML‘. It is a distutils installed project and thus we cannot

    pip install upgrade nni ignore installed i https pypi tuna tsinghua edu cn simple 成功

随机推荐