STM32最小核心板使用HAL库实现UART接口通讯(中断方式)

正式环境里需要串联电阻,或设计过滤电路。核心板是STM32F103C8T6

这里使用了UART3的接口,具体使用MX创建项目就不放了,百度下都有

/*USART3 GPIO ConfigurationPB10     ------> USART3_TXPB11     ------> USART3_RX
*/

因为是串口通讯所以双机接线需要交叉

接口的关键代码配置如下:

void MX_USART3_UART_Init(void)
{huart3.Instance = USART3;huart3.Init.BaudRate = 115200;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart3) != HAL_OK){Error_Handler();}
}void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(uartHandle->Instance==USART3){/* USART3 clock enable */__HAL_RCC_USART3_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/**USART3 GPIO ConfigurationPB10     ------> USART3_TXPB11     ------> USART3_RX*/GPIO_InitStruct.Pin = GPIO_PIN_10;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_11;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);/* USART3 interrupt Init */HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART3_IRQn);}
}

因为是中断方式收数据,所以需要自己实现个中断函数,系统会自己重载你实现的函数(名字要对)

//全局变量
char aRxChr;	
char aRxBuffer[100];
uint32_t nRxLen;
//中断函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART3){if (nRxLen == 0){memset(aRxBuffer,0,100);}//判断结束标志位字符if (aRxChr != '#'){aRxBuffer[nRxLen] =aRxChr;nRxLen++;}else{aRxBuffer[nRxLen] = 0;nRxLen = 0;}//打开中断HAL_UART_Receive_IT(&huart3,(uint8_t*)&aRxChr,1);}
}

需要接收不固定长度的数据,所以必须1个字节1个字节的收,然后组合成完整的。

最后给出Main主线程里的测试代码

//上面其他的初始化就不放了,放关键的
MX_USART3_UART_Init();nRxLen = 0;
uint8_t aTxBuffer[]="1234567890#";
//打开收中断
HAL_UART_Receive_IT(&huart3,(uint8_t*)&aRxChr,1);	while (1) {//发送数据HAL_UART_Transmit(&huart3,(uint8_t*)&aTxBuffer,strlen(aTxBuffer),100);//这里可以处理aRxBuffer的内容,如果要搞的好点就再自己搞个锁来判断是否收到完整数据HAL_Delay(1000);
}

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

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

相关文章

开发技术-FeignClient 对单个接口设置超时时间

1. 背景 FeignClient 调用某个接口,3s 没有结果就需要停止,处理后续业务。 2. 方法 FeignClient 自定义 name 属性 FeignClient(name "aaa" , url "xxx") public interface TestApi {ResponseBodyPOSTMapping(value "xx…

以码会友|PR大征集!2024共绘 MoonBit 新篇章!

首先,感谢 MoonBit 社区所有的贡献者在过去一个月积极的参与和贡献!为了感谢与鼓励更多的MoonBit Contributor,我们以码会友,邀请你加入“一起成为MoonBit Contributor!” 的活动! 活动内容也可以点击文章…

【第十三章】改进神经网络学习方式-其他正则化技术

L1正则化 除了L2正则化之外,还有许多正则化技术。事实上,已经开发出了如此多的技术,以至于我不可能总结它们。在本节中,我简要介绍了三种减少过拟合的其他方法:L1正则化、dropout和人为增加训练集大小。我们不会像之前…

在ComfyUI中,IP-Adapter的一大堆模型应该怎么放?

🎁背景介绍 IP-Adapter有一大堆的模型,那么这个模型在ComfyUI中,这些模型到底应该怎么放呢?这篇文章简单介绍一下。 首先,大家需要到huggingface上找到对应的模型,把所有的模型先下载下来。 huggingface…

技术工作报告-基于linux的信息转二维码图像方法的研究

一、摘要: 本报告旨在介绍基于Linux的信息转二维码图像方法的研究。通过对二维码技术的背景和相关研究的调研,我们提出了一种基于Linux平台的信息转二维码图像方法,并进行了实验验证。本方法可以在Linux系统上实现高效、准确的信息转二维码图…

数据分析的具体流程

1.导入 表格导入数据时要注意数据的格式问题非表格导入 可以先将文档放入word中 将换行符(^p)替换为|||,选择特殊格式中的段落标记 进行全部替换 以每一列最后的数据/平,作为换行的标志 将所整理的信息导入excel,对数据进行分列 选…

大数据 - Spark系列《十四》- spark集群部署模式

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

Git版本管理工具

前言: 本文记录学习使用 Git 版本管理工具的学习笔记,通过阅读参考链接中的博文和实际操作,快速的上手使用 Git 工具。 本文参考了引用链接博文里的内容。 引用: Git使用教程-配置管理 git reset详解-CSDN博客 3、Git使用不完全指南&am…

二维数组应用案例

大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 考试成绩统计 案例描述:有三名同学(张三、李四、王五),在一次考试中成绩分别如下表,请分别输出三名同学的总成绩。 成绩表 语…

全面整理!机器学习常用的回归预测模型(表格数据)

文章目录 一、前言二、线性模型三、非线性模型 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 回归预测建模的核心是学习输入 X X X 到输出 y y y (其中 y y y 是连续值向量)的映射关系。条件期望 E ( Y ∣ X x…

直播预约丨《袋鼠云大数据实操指南》No.1:从理论到实践,离线开发全流程解析

近年来,新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕。 面对这些引领经济转型的新兴概念,为了更好地服务于客户…

c/c++ 深拷贝和浅拷贝

深拷贝与浅拷贝 深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是对象复制的两种不同方式,它们涉及到对象成员数据的复制方式和内存管理。 浅拷贝(Shallow Copy): 浅拷贝是指将一个对象的…

C++:继承:面向对象编程的重要特性

(❁◡❁)(●◡●)╰(*▽*)╯(*/ω\*)(^///^)(❁◡❁)(❁◡❁)(●◡●)╰(*▽*)╯(*/ω\*)(❁◡❁)(●’◡’●)╰(▽)╯(/ω\)(///) C:继承:面向对象编程的重要特性 前言**继承**1.继承的概念及定义1.1继承的概念1.2继…

算法笔记p251队列循环队列

目录 队列循环队列循环队列的定义初始化判空判满入队出队获取队列内元素的个数取队首元素取队尾元素 队列 队列是一种先进先出的数据结构,总是从队尾加入元素,从队首移除元素,满足先进先出的原则。队列的常用操作包括获取队列内元素的个数&a…

【Godot4.2】颜色完全使用手册

概述 本篇简单汇总Godot中的颜色的构造和使用,内容包括了: RGB、RGBA,HSV以及HTML16进制颜色值、颜色常量等形式构造颜色颜色的运算以及取反、插值用类型化数组、紧缩数组或PNG图片形式存储多个颜色 构造颜色 因为颜色是一种视觉元素&…

Jmeter接口测试步骤

一、使用工具测试 1、使用Jmeter对接口测试 首先我们说一下为什么用Posman测试后我们还要用Jmeter做接口测试,在用posman测试时候会发现的是一个接口一个接口的测试,我们每次测试成功后的数据,在工具中是无法保存的,再次测试的时…

【蓝桥杯入门记录】继电器、蜂鸣器及原理图分析

一、继电器、继电器概述 (1)蜂鸣器原理 蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型,蜂鸣器的发声原理为: 1、无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声…

Vue.js开发基础

单文件组件 使用Vite创建Vue项目后,目录结构中包含一些扩展名为.vue的文件,每个.vue文件都可用来定义一个单文件组件。Vue中的单文件组件是Vue组件的文件格式。每个单文件组件由模板、样式和逻辑3个部分构成。 运行结果: 1.模板 模板用于搭建…

PyTorch 深度学习(GPT 重译)(一)

第一部分:PyTorch 核心 欢迎来到本书的第一部分。在这里,我们将与 PyTorch 迈出第一步,获得理解其结构和解决 PyTorch 项目机制所需的基本技能。 在第一章中,我们将首次接触 PyTorch,了解它是什么,解决了…

爬虫基础:HTTP基本原理

爬虫基础:HTTP基本原理 前言HTTP基本原理URI 和 URLHTTP 和 HTTPSHTTP 请求过程请求与响应HTTP请求HTTP响应请求与响应的交互过程 HTTP 2.0二进制传输多路复用Header压缩服务器端提前响应内容安全 前言 了解 HTTP的基本原理,了解从往测览器中输人 URL到获…