stm32---串口使用

在这里插入图片描述### 串口数据发送


#include <string.h>				//先引用这个字符串操作库。char str[]=" HALLO WORD "//定义这个数组字符串。HAL_UART_Transmit(&huart2, str, strlen(str), 100);
//&huart2,这里他是一个指针,所以要用取地址符。2是代表,串口2.
//str ,是你定义的字符串(数组)的名字。(uint8_t *)需要强制转换为这个数据类型。(char也是8位的,互转没关系)
//strlen(str),这是一个函数,可以取出str这个字符串的长度。
//100,代表100毫秒后,不管有没有发送成功,都停止发送。

串口数据接收


#include <string.h>				//先引用这个字符串操作库。char str[]=" HALLO WORD "//定义这个数组字符串。HAL_UART_Receive(&huart2,text, 2, HAL_MAX_DELAY);
//将接受的数据,放在huart2当中。(这是程序预先生成好的buff,来缓存串口的接收数据的)
//text是一个数组,将huar2t的数据自动移到,text这个数组中。
//需要接收的数据长度
//HAL_MAX_DELAY,一直等着,直到,该程序“2”,接收到了2个数据。才会执行下一个程序。

以上方式,都会阻塞程序运行。。。为了不耽误程序运行,可以使用“串口中断”

引脚设置为串口后。
在这里插入图片描述
返回mian.c
找到stm32f1xx_it.c
找到,当前串口引脚的,中断函数

在这里插入图片描述
页面跳转到了,这个页面。

__wek,代表这个函数可以重新定义。—复制出来,在其它地方使用。

当接收完成,会自动运行这个函数。
例如,我要接收10个数据。。。当10个数据接收完成,会自动进入这个函数。
在这里插入图片描述


#include <string.h>				//先引用这个字符串操作库。char str[]=" HALLO WORD "//定义这个数组字符串。void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);		//反转IO的电平HAL_UART_Transmit_IT(&huart2, text, 2);		HAL_UART_Receive_IT(&huart2, text, 2);		//如果不再次调用,中断执行后,就会彻底结束。
}void main()
{HAL_UART_Receive_IT(&huart2, text, 2);//必须得使用一次,不然,该中断不会开启。}

串口DMA的使用

DMA,可以搬运数据,不需要MCU来搬运。
当移位寄存器种,没有数据的时候,DMA会自动的把,发送数据寄存器里的内容,放进移位寄存器。
当接收移位寄存器放满后,DMA会自动的把里面的内容,放入接收数据寄存器种。

在这里插入图片描述

这个代码种,与上面讲到的“中断接收函数一致”他们使用同一个中断向量。所以返回函数一样。

/只不过,与上面的函数不一样的是,,,上面进入这个中断是因为,每次接收/发射了1个字节的数据。/实际程序验证,不是这个样子/---------------------实际验证是:当接收完毕后,才会触发这个中断。

DMA串口中断是因为,接收/发射完成时,产生的中断。


#include <string.h>				//先引用这个字符串操作库。char str[]=" HALLO WORD "//定义这个数组字符串。void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);		//反转IO的电平HAL_UART_Transmit_DMA(&huart2, text, 2);		HAL_UART_Receive_DMA(&huart2, text, 2);		//如果不再次调用,中断执行后,就会彻底结束。
}void main()
{HAL_UART_Receive_DMA(&huart2, text, 2);//必须得使用一次,不然,该中断不会开启。}

串口空闲中断-----可以用于,接收不定长度的串口数据

;使用void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)这个函数,必须在此之前写__HAL_DMA_DISABLE_IT(&hdma_usart2_rx,DMA_IT_HT);--------否则会在数据接收到一半,就触发这个函数


#include <string.h>				//先引用这个字符串操作库。char text[99]//定义这个数组字符串。extern DMA_HandleTypeDef hdma_usart2_rx;	//这里需要声明, DMA_HandleTypeDef hdma_usart2_rx该参数已经在其它文件中定义。编译的时候,会自动去找。void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart==&huart2)//验证,当这个中断函数发生的时候,确实是串口2.{HAL_UART_Transmit_DMA(&huart2, text, Size);	//&huart2是串口2,text是自己声明的数组。Size是固定写法,是这个函数的回传给Size的。。。。因为这是接收不定长度的数据。所以,Size是当前这个中断发生的时候,系统自己会给Size赋值。HAL_UARTEx_ReceiveToIdle_DMA(&huart2, text, sizeof(text));//如果不知道自己定义数组的长度,就用sizeof(text)去取,这句话是为了,避免接收的数据,溢出了(数组放不下。)__HAL_DMA_DISABLE_IT(&hdma_usart2_rx,DMA_IT_HT);	//这个函数有毛病,会在数据接收一半的时候,触发一次,所以--------必须在函数声明前加入:extern DMA_HandleTypeDef hdma_usart2_rx;	//这里需要声明, DMA_HandleTypeDef hdma_usart2_rx该参数已经在其它文件中定义。编译的时候,会自动去找。}
}void main()
{HAL_UART_Receive_DMA(&huart2, text, 2);//必须得使用一次,不然,该中断不会开启。}

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

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

相关文章

在WPF窗口中增加水印效果

** 原理&#xff1a; ** 以Canvas作为水印显示载体&#xff0c;在Canvas中创建若干个TextBlock控件用来显示水印文案&#xff0c;如下图所示 然后以每一个TextBlock的左上角为中心旋转-30&#xff0c;最终效果会是如图红线所示&#xff1a; 为了达到第一行旋转后刚好与窗口…

App防止恶意截屏功能的方法:iOS、Android和鸿蒙系统的实现方案

防止应用被截图是一个比较常见的需求&#xff0c;主要是出于安全考虑。下面将分别为iOS&#xff08;苹果系统&#xff09;、Android&#xff08;安卓系统&#xff09;及HarmonyOS&#xff08;鸿蒙系统&#xff09;提供防止截屏的方法和示例代码。 在企业内部使用的应用中&…

深入解析Freemarker模板引擎及其在Spring Boot中的高级整合

目录 引言1. Freemarker1.1.什么是Freemarker1.2 Freemarker模板组成部分1.3.优点 2. Spring Boot整合Freemarker2.1 配置2.2 数据类型 3. 案例总结 引言 Freemarker作为一款强大的模板引擎&#xff0c;与Spring Boot的整合能够极大地提升Web应用的开发效率和灵活性。本篇博客…

探索 Vim:一个强大的文本编辑器

引言&#xff1a; Vim&#xff08;Vi IMproved&#xff09;是一款备受推崇的文本编辑器&#xff0c;拥有强大的功能和高度可定制性&#xff0c;提供丰富的编辑和编程体验。本文将探讨 Vim 的基本概念、使用技巧以及为用户带来的独特优势。 简介和发展 1. Vim 的简介和历史 V…

发布jar包到maven中央仓库

1. 环境 在网上找的很多文章中写得都有很多问题&#xff0c;这里记录一下最近一次成功地发布jar包到maven中央仓库的过程。并附带上每一个步骤官方的指导链接。 系统&#xff1a;mac&#xff08;windows系统在下载辅助工具时不太一样&#xff0c;在配置上和mac系统没有区别&…

docker部署go gin框架 Linux环境

目录 文章目的是什么 环境介绍 Linux 环境下 docker 部署 go gin 详细步骤 部署 gin 文章目的是什么 假设我们学习了 go 语言&#xff0c;在 Linux 上安装了 go 相关的程序&#xff0c;也能直接运行&#xff0c;使用以下命令&#xff1a; go run main.go 假如代码是这样的…

算法中的最优化方法课程复习

算法中的最优化方法课程复习 单模函数、拟凸函数、凸函数证明证明一个线性函数与一个凸函数的和也是凸的 梯度线性规划标准形式以及如何标准化标准形式常见标准化方法线性化技巧 单纯形法二次规划无约束优化Nelder-Mead线搜索FR共轭梯度法例题 优化算法的选择、停止准则算法选择…

electron命令下载失败,手动安装教程

现象&#xff1a;pnpm i electron, 一直卡在提示错误node install.js 一 、下载需要的electron版本 地址 二、下载完毕&#xff0c;解压压缩包&#xff0c; 进入项目的node_modules/electron文件夹&#xff0c;创建dist文件夹&#xff0c;将下载的zip包里的文件复制到dist…

链路追踪详解(四):分布式链路追踪的事实标准 OpenTelemetry 概述

目录 OpenTelemetry 是什么&#xff1f; OpenTelemetry 的起源和目标 OpenTelemetry 主要特点和功能 OpenTelemetry 的核心组件 OpenTelemetry 的工作原理 OpenTelemetry 的特点 OpenTelemetry 的应用场景 小结 OpenTelemetry 是什么&#xff1f; OpenTelemetry 是一个…

DevEco Studio 鸿蒙(HarmonyOS)项目结构

DevEco Studio 鸿蒙&#xff08;HarmonyOS&#xff09;项目结构 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、项目结构 创建简单的Hello World移动应用项目结构如下图 由上到下说明各个文件夹的作用 .hvigor&#xff1a;存…

阅读笔记——《UTOPIA: Automatic Generation of Fuzz Driverusing Unit Tests》

【参考文献】Jeong B, Jang J, Yi H, et al. UTOPIA: automatic generation of fuzz driver using unit tests[C]//2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2676-2692.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。…

智慧储能数字孪生:能源未来的智慧引擎

随着社会对清洁能源的需求不断增加&#xff0c;智能储能技术成为能源转型的关键驱动力。在这一领域中&#xff0c;数字孪生技术的应用为智慧储能带来了全新的可能性。数字孪生是指数字化、实时、可视化的模拟系统&#xff0c;通过复制现实世界中的对象或过程&#xff0c;为智能…

SpeechGPT领航:创新的130亿参数跨模态AI模型

引言 在人工智能的最新进展中&#xff0c;SpeechGPT以其130亿参数的规模和跨模态会话能力引起了业界的广泛关注。这一由复旦大学邱锡鹏教授团队开发的模型&#xff0c;不仅在技术层面上取得了重大突破&#xff0c;也为多模态人工智能&#xff08;AI&#xff09;的未来发展指明…

Selenium库自动化测试入门

前言 为什么要学selenium&#xff1f;&#xff1f;前面已经学了requests库我们会发现 对于绝大多数动态渲染的网页来说&#xff0c;用requests进行爬虫比较繁琐。 所以我们还是要学习一下selenium库&#xff0c;以帮助我们更高效的爬取网页。 环境&#xff1a; pychar 202…

机器学习算法新手入门指南

AI算法的种类在人工智能领域中非常丰富&#xff0c;而且多样化&#xff0c;AI算法利用数学、统计学和计算机科学等领域的原理和方法&#xff0c;通过模拟人类智能和学习能力来解决各种复杂的问题。 在监督学习领域&#xff0c;我们有经典的线性回归和逻辑回归算法&#xff0c;…

光栅化渲染:可见性问题和深度缓冲区算法

在前面第二章中&#xff0c;我们了解到&#xff0c;在投影点&#xff08;屏幕空间中的点&#xff09;的第三个坐标中&#xff0c;我们存储原始顶点 z 坐标&#xff08;相机空间中点的 z 坐标&#xff09;&#xff1a; 当一个像素与多个三角形重叠时&#xff0c;查找三角形表面上…

Java 多线程之线程安全集合

文章目录 一、概述二、List 接口线程安全实现类2.1 普通 List 变线程安全 List2.2 Vector2.3 CopyOnWriteArrayList 三、Map 接口线程安全实现类3.1 普通 Map 变线程安全 Map3.2 Hashtable3.3 ConcurrentHashMap3.4 ConcurrentSkipListMap 有序/跳表 四、Set 接口线程安全实现类…

J2EE(架构师考试复习资料)

J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范。这组应用编程接口确定了 Web 应用与驻留它们的服务器之间的通信方式。J2EE 注重两件事&#xff0c;一是建立标准&#xff0c;使 Web 应用的部署与服务器无关&#xff1b;二是使服务器能控制构件的生命周期…

自定义Mybatis LanguageDriver性能优化

场景&#xff1a;高并发情况下mybatis 动态sql 解析 锁问题优化 优化前 并发测试 XMLLanguageDriver 类 的 createSqlSource 方法有锁 而且 每次执行时都会走该方法 优化前 &#xff1a; 线程有Block 优化后的 LanguageDriver public class CustomXMLLanguageDriver im…

大数据机器学习与深度学习——回归模型评估

大数据机器学习与深度学习——回归模型评估 回归模型的性能的评价指标主要有&#xff1a;MAE(平均绝对误差)、MSE(平均平方误差)、RMSE(平方根误差)、R2_score。但是当量纲不同时&#xff0c;RMSE、MAE、MSE难以衡量模型效果好坏&#xff0c;这就需要用到R2_score。 平均绝对…