[ BLE4.0 ] 伦茨ST17H66开发-串口UART0的接收与发送

news2024/9/9 4:52:18

目录

一、前言

二、实现步骤

        1.设置回调函数

        2.关闭睡眠模式

三、效果展示

四、工程源代码


一、前言

        串口通信在任何一款单片机开发中都是尤为重要的。本文涉及的开发所使用的例程依然是基于[ BLE4.0 ] 伦茨ST17H66开发-OSAL系统中添加自己的Task任务文章的工程源码,本文实现的任务主要是将接收到的串口数据再打印出去。

        伦茨ST17H66的SDK中为我们提供了AT_LOG()函数和LOG()函数,这两个函数以及帮助我们实现了串口打印的功能,但是对于串口接收,官方的SDK中并没有为我们实现。

二、实现步骤

        1.设置回调函数

        首先在my_printf.c文件中找到dbg_printf_init函数,这是UART0的初始化函数。

        通过程序,我们可以看出串口的波特率设置和TX以及RX的引脚设置,同样的我们可以利用这个初始化函数自行仿照配置UART1,但此处不多赘述。通过最后一个属性 evt_handler = NULL 我们不难看出SDK没有为串口设置中断回调函数,通过查阅手册,我们可以找到标准的示例回调函数。

        因此我们根据其标准示例,仿照完成自己的中断回调函数。这里有点问题,即rx_size的类型被设定为uint8,其最大值为255,这与数组长度1024相差甚远,这将会浪费1024-255个字节控件,因此在之后的函数中,我将其改为了uint16,确保空间利用率。当然也可以选择将数组大小改为255,异曲同工。

        程序的具体实现代码如下:

uint8_t receive_buf[1024];
uint16_t receive_size = 0;
__ATTR_SECTION_SRAM__ void uart_evt_hdl(uart_Evt_t* pev)
{
	switch(pev->type)
	{
		case UART_EVT_TYPE_RX_DATA:
		case UART_EVT_TYPE_RX_DATA_TO://接收回调
			memset(receive_buf,'\0',1024);
			memcpy(receive_buf,pev->data,pev->len);//保存接收信息
			receive_size = pev->len;//保存接收长度
			//打印接收信息
			LOG("%s",receive_buf);
			break;
		case UART_EVT_TYPE_TX_COMPLETED://发送完成回调
			
			break;
	}
}

        与示例不同,示例采用了拼接的方式,而在常规开发中这是不常见的。我们往往系统接收的数组里仅有这次收到的数据,因此我做了修改,只保留了本次接收的数据,没有和之前的数据做拼接,并使用LOG将数据打印出来。

        编译并烧录程序,发现程序对发送的数据没有反应,这是什么原因呢?

        2.关闭睡眠模式

        查阅文档,我们发现串口RX接收数据是不能处于睡眠模式的,这就说明其实芯片根本没有收到我们发送的数据。按照上一篇文章的方法,我们继续在宏定义中取消睡眠模式。

三、效果展示

        编译并烧录进芯片后,使用串口调试助手,进行查看。可以看到,程序顺利返回发送的信息。

四、工程源代码

        将该文件解压后放到下图所示位置即可,全局有效。

        源文件:【免费】ST17H66串口文件.zip资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程间通信--套接字socket

前面提到的管道、消息队列、共享内存、信号和信号量都是在同一台主机上进行进程间通信,那要想跨网络与不同主机上的进程之间通信,就需要Socket通信了。 实际上,Socket通信不仅可以跨网络与不同主机的进程间通信,还可以在同主机上…

一键升级GIS场景视觉效果,告别繁琐操作

在当今的数字化时代,GIS(地理信息系统)不再仅仅只能通过一些二维示意图或简陋的三维地形图表示,它可以通过专业的软件简单升级视效。想象一下,在你的GIS场景中,阳光明媚的天气、突如其来的暴风雨、缭绕的晨…

工时管理平台核心功能解析:你需要了解的

国内外主流的10款工时管理平台对比:PingCode、Worktile、Todoist、ClickUp、滴答清单、专注清单、一木清单、NarTick、Tweek、朝暮计划。 在选择合适的工时管理平台时,你是否感到挑战重重?市场上的各种选项似乎都声称能够提升效率和减轻管理负…

【SQL Server点滴积累】SQL Server 2016数据库邮件(Database Mail)功能故障的解决方法

今天和大家分享SQL Server 2016数据库邮件(Database Mail)功能故障的解决方法 故障现象: 在SQL Server 2016中配置完成数据库邮件(Database Mail)功能后,当你尝试发送测试邮件后,既收不到测试邮件,也不显示错误消息 KB3186435 -…

Python数值计算(11)——拉格朗日插值

本篇介绍一下多项式插值中,拉格朗日法的原理及其实现。 1. 一点数学知识 先引用数学背景。如果给定N个点,然后要求一个多项式通过这N个点,最简单直接的方式是列出线性方程求解,N个点可以确定N个未知量,则所求的拟合多…

下面关于枚举的描述正确的一项是?

A. 枚举中定义的每一个枚举项其类型都是String; B. 在Java中可以直接继承java.util.Enum类实现枚举类的定义; C. 利用枚举类中的values()方法可以取得全部的枚举项; D. 枚举中定义的构造方法只能够使用private权限声明; 答案选择…

springboot山东外事职业大学校园食堂点餐系统-计算机毕业设计源码10417

摘 要 近年来,随着国民收入的提高,各行业取得长足进步,也带动了互联网行业的快速发展,许多传统行业开始与互联网相结合,通过数字化转型打造新的发展生态。 本文针对山东外事大学校园食堂点餐系统的需求,基于…

Java内存区域与内存溢出异常详解

在Java编程中,理解Java虚拟机的内存布局及其管理机制对于开发高效、稳定的应用程序至关重要。Java虚拟机的内存主要分为几个运行时区域,这些区域各司其职,共同支撑起Java程序的运行。本文将详细探讨Java虚拟机的内存区域以及这些区域如何与内…

Yolov模型的使用及数据集准备(1)LabelImg的下载和使用

1、LabelImg下载: labelimg简单来说就是打标签用的软件,当需要使用自定义数据集进行模型训练时,往往需要使用该软件来打标签。 下载地址:GitHub - HumanSignal/labelImg 1.1下载之后对压缩包进行解压 2、打开电脑的anaconda pro…

MyBatis XML配置文件

目录 一、引入依赖 二、配置数据库的连接信息 三、实现持久层代码 3.1 添加mapper接口 3.2 添加UserInfoXMLMapper.xml 3.3 增删改查操作 3.3.1 增(insert) 3.3.2 删(delete) 3.3.3 改(update) 3.3.4 查(select) 本篇内容仍然衔接上篇内容,使用的代码及案…

8G 显存玩转书生大模型 Demo

创建可用环境 # 创建环境 conda create -n demo python3.10 -y # 激活环境 conda activate demo # 安装 torch conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda12.1 -c pytorch -c nvidia -y # 安装其他依赖 pip install transformers4.38 pip in…

Moving Object Segmentation: All You Need Is SAM(and Flow) 论文详解

系列文章目录 文章目录 系列文章目录前言摘要1 引言2 相关工作3 SAM Preliminaries4 帧级分割Ⅰ:以流作为输入5 帧级分割Ⅱ:以流为提示6 序列级掩膜关联7 实验7.1 数据集7.2 评价指标7 .3 实施细节7.4 消融实验7.5 定量结果7 .定性可视化 8 结论致谢附录…

01 - 计算机组成原理与体系结构

文章目录 一,计算机系统硬件基本组成硬件软件 二,CPU的功能与组成功能组成运算器控制器 三,数据表示计算机的基本单位进制转换原码,反码,补码,移码数值表示范围浮点数表示 四,寻址五&#xff0c…

【Unity模型】古代亚洲建筑

在Unity Asset Store上,一款名为"Ancient Asian Buildings Pack"(古代亚洲建筑包)的3D模型资源包,为广大开发者和设计师提供了一个将古代亚洲建筑风格融入Unity项目的机会。本文将详细介绍这款资源包的特点、使用方式以…

如何选择合适的自动化测试工具!

选择合适的自动化测试工具是一个涉及多方面因素的决策过程。以下是一些关键步骤和考虑因素,帮助您做出明智的选择: 一、明确测试需求和目标 测试范围:确定需要自动化的测试类型(如单元测试、集成测试、UI测试等)和测试…

AI视频实战教程:DiffIR2VR-Zero-模糊视频8K高清修复技术

〔探索AI的无限可能,微信关注“AIGCmagic”公众号,让AIGC科技点亮生活〕 本文作者:AIGCmagic社区 猫先生 一、简 介 DiffIR2VR-Zero:一种创新的零样本视频恢复技术,该技术利用预训练的图像恢复模型,解决…

C++高性能通信:图形简述高性能中间件Iceoryx

文章目录 1. 概述2. 支持一个发布者多个订阅者2.2 Iceoryx为何不支持多个发布者发布到同一个主题 3. Iceoryx的架构和数据传输示意图3.1 发布者与订阅者的通信机制3.2 零拷贝共享内存通信机制 4. 使用事件驱动机制4.1 WaitSet机制4.2 Listener机制 5. 已知限制6. 参考 1. 概述 …

sci-hub下载不了的文献去哪里获取全文

我们在查找外文文献时经常会用到sci-hub,但sci-hub也有没有收录的文献,遇到这种情况我们可以用另一个途径来获取该文献。 例如这篇Wiley数据库中的文献:Unveiling Gating Behavior in Piezoionic Effect: toward Neuromimetic Tactile Sensin…

Linux服务管理(四)Apache服务

Apache服务 1、基于IP的虚拟主机2、基于IP端口的虚拟主机3、基于域名的虚拟主机4、prefork模式5、worker模式6、event模式7、细说驱动工作模式和MPM(多处理模块)工作模式 新旧域名都保留,因为旧域名已有一定的知名度和流量,直接下…

Cocos Creator2D游戏开发(8)-飞机大战(6)-炸机

碰撞 飞机与飞机碰撞 子弹与飞机碰撞 ① 设置碰撞矩阵 设置碰撞矩阵,就是设置谁跟谁碰撞(添加Enemy,PlayerBullet,Player) ②设置刚体和碰撞体 两个预制体设置(Enemy和PlayerBullet) 注意点: 1. 都在预制体节点上,不在图片上; 2.碰撞体Collider2D中的Editing悬着好之后可以调整…