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

目录

一、前言

二、实现步骤

        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.rhkb.cn/news/386940.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows@powershell@任务计划@自动任务计划@taskschd.msc.md

文章目录 使用任务计划windows中的任务计划任务计划命令行程序开发windows 应用中相关api传统图形界面FAQ schtasks 命令常见用法创建计划任务删除计划任务查询计划任务修改计划任务运行计划任务 PowerShell ScheduledTasks常用 cmdlet 简介1. Get-ScheduledTask2. Register-Sc…

Git远程仓库推送

这里我只连接了两个站点的远程仓库,一个是国内的Gitee,另一个是Github,这两个站点的连接方式主要有两种,第一种就是通过https来连接远程仓库,另一种是通过ssh公钥来连接,这两个站点练接的大致过程都是一样的…

我出一道面试题,看看你能拿 3k 还是 30k!

大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中…

4 款最佳 C# 无头浏览器

摘要: 在当今大数据时代,高效的数据采集成为众多项目的关键一环。对于偏好C#语言的开发者而言,无头浏览器是实现网页自动化交互、数据抓取的强大工具。本文将深入探讨四款顶尖的C#无头浏览器库,分析它们的特性和应用场景&#xf…

怎么把C盘分成两个盘?让C盘分区更简单,赶快试试!

在日常使用电脑的过程中,有时我们可能希望将C盘分割成两个独立的分区,以便更好地管理文件和数据。这种操作需要谨慎进行,因为错误的分区操作可能导致数据丢失。那么,我们该怎么把C盘分成两个盘呢?下面,我将…

lua 游戏架构 之 游戏 AI (六)ai_auto_skill

定义一个为ai_auto_skill的类,继承自ai_base类。ai_auto_skill类的目的是在AI自动战斗模式下,根据配置和条件自动选择并使用技能。 lua 游戏架构 之 游戏 AI (一)ai_base-CSDN博客文章浏览阅读379次。定义了一套接口和属性&#…

vue3在元素上绑定自定义事件弹出虚拟键盘

最近开发中遇到一个需求: 焊接机器人的屏幕上集成web前端网页, 但是没有接入键盘。这就需要web端开发一个虚拟键盘,在网上找个很多虚拟键盘没有特别适合,索性自己写个简单的 图片: 代码: (代码可能比较垃圾冗余,也没时间优化,凑合看吧) 第一步:创建键盘组件 为了方便使用…

3.2.微调

微调 ​ 对于一些样本数量有限的数据集,如果使用较大的模型,可能很快过拟合,较小的模型可能效果不好。这个问题的一个解决方案是收集更多数据,但其实在很多情况下这是很难做到的。 ​ 另一种方法就是迁移学习(transfer learning…

c++如何理解多态与虚函数

目录 **前言****1. 何为多态**1.1 **编译时多态**1.1.1 函数重载1.1.2 模板 **1.2 运行时多态****1.2.1 虚函数****1.2.2 为什么要用父类指针去调用子类函数** **2. 注意****2.1 基类的析构函数应写为虚函数****2.2 构造函数不能设为虚函数** **本文参考** 前言 在学习 c 的虚…

打造重庆市数字化教育“新名片”,广阳湾珊瑚中学凭实力“出圈”!

分布于教学楼连廊顶部的智能照明设备,根据不同的时间和场景需求自动调节灯光亮度和开关状态;安装于各个教室内的智能黑板、学校同步时钟、学生互动设备,在极简以太全光网的赋能下,为师生提供丰富的教学体验与学习支持......行走于重庆市广阳湾珊瑚中学,像是与充满科技感的“校园…

病理AI领域的基础模型汇总|顶刊专题汇总·24-07-26

小罗碎碎念 本期文献主题:病理AI领域的最新基础模型 今天的推文是一期生日特辑,定时在下午六点二十一分发表(今天农历六月二十一,哈哈),算是自己给自己的24岁生日礼物,希望24岁这一年&#xff0…

ollama本地部署大语言模型记录

目录 安装Ollama更改模型存放位置 拉取模型GemmaMistralQwen1.5(通义千问)codellama 部署Open webui测试性能知识广度问题1问题2 代码能力总结 最近突然对大语言模型感兴趣 同时在平时的一些线下断网的CTF比赛中,大语言模型也可以作为一个能对话交互的高级知识检索…

SSRF中伪协议学习

SSRF常用的伪协议 file:// 从文件系统中获取文件内容,如file:///etc/passwd dict:// 字典服务协议,访问字典资源,如 dict:///ip:6739/info: ftp:// 可用于网络端口扫描 sftp:// SSH文件传输协议或安全文件传输协议 ldap://轻量级目录访问协议 tftp:// 简单文件传输协议 gopher…

【JavaScript】函数声明和函数表达式的区别

文章目录 一、函数声明1. 定义方式2. 作用域提升(Hoisting)3. 块级作用域 二、函数表达式1. 定义方式2. 作用域提升(Hoisting)3. 自引用 三、其他区别1. 函数名2. 可读性和代码组织3. 使用场景 四、总结函数声明函数表达式 在Java…

【大模型系列】Video-LaVIT(2024.06)

Paper:https://arxiv.org/abs/2402.03161Github:https://video-lavit.github.io/Title:Video-LaVIT: Unified Video-Language Pre-training with Decoupled Visual-Motional TokenizationAuthor:Yang Jin, 北大&#x…

Java面试八股之@Qualifier的作用

Qualifier的作用 Qualifier 是 Spring 框架中的一个非常有用的注解,它主要用于解决在依赖注入过程中出现的歧义问题。当 Spring 容器中有多个相同类型的 Bean 时,Qualifier 可以帮助指明应该使用哪一个具体的 Bean 进行注入。 Qualifier 的作用&#x…

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件(精确、模糊)查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…

【Opencv】模糊

消除噪声 用该像素周围的平均值代替该像素值 4个函数 blur():最经典的 import os import cv2 img cv2.imread(os.path.join(.,dog.jpg)) k_size 7 #窗口大小,数字越大,模糊越强 img_blur cv2.blur(img,(k_size,k_size)) #窗口是正方形&#xff…

云计算实训16——关于web,http协议,https协议,apache,nginx的学习与认知

一、web基本概念和常识 1.Web Web 服务是动态的、可交互的、跨平台的和图形化的为⽤户提供的⼀种在互联⽹上浏览信息的服务。 2.web服务器(web server) 也称HTTP服务器(HTTP server),主要有 Nginx、Apache、Tomcat 等。…

C#使用csvhelper实现csv的操作

新建控制台项目 安装csvhelper 33.0.1 写入csv 新建Foo.cs namespace CsvSut02;public class Foo {public int Id { get; set; }public string Name { get; set; } }批量写入 using System.Globalization; using CsvHelper; using CsvHelper.Configuration;namespace Csv…