stm32 笔记 UART发送及HAL库应用

HAL_UART_IRQHandler(UART_HandleTypeDef *huart)里面的中断接收函数 前言 看了很长时间串口中断的HAL库,最容易混淆的就是函数的名称,主要集中在UART_Receive_IT、HAL_UART_Receive、HAL_UART_Receive_IT。是不是有点傻傻分不清楚,是的,我也是这三个函数看了很长时间,接下来分析一下他们各自的含义。 UART_Receive_IT 函数代码如下: static HAL_StatusTypeDef UART_Receive_I... 阅读详情

STM32串口通信设置

我们在STM32上使用串口通信时,要把起始位、数据位、校验位以及波特率设置好。话不多说,这就来通过代码来学习STM32的串口通信。

首先我们先定义一个 UART_HandleTypeDef 结构体,来初始化函数,之后使用 HAL_UART_Init() 函数进行初始化。

UART_HandleTypeDef usart1_handler;

void uart_init()
{	
	//UART 初始化设置
	usart1_handler.Instance=USART1;					    //USART1
	usart1_handler.Init.BaudRate=115200;				    //波特率
	usart1_handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
	usart1_handler.Init.StopBits=UART_STOPBITS_1;	    //一个停止位
	usart1_handler.Init.Parity=UART_PARITY_NONE;		    //无奇偶校验位
	usart1_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
	usart1_handler.Init.Mode=UART_MODE_TX_RX;		    //收发模式
	HAL_UART_Init(&usart1_handler);					    //HAL_UART_Init()会使能UART1
}

配置 GPIO

uart 本质上仍然是一个 GPIO 我们需要给USART1 的 GPIO 设置配置。

 

 根据参考手册,我们得知 USART1 是依赖于 PA9 和 PA10 两个端口的。我们配置这两个端口就可以了:

其中 HAL_UART_MspInit() 这个函数,HAL_UART_Init() 函数会自动帮我们调用,我们只需要写这个函数,不需要自定调用就可以了。

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
	GPIO_InitTypeDef GPIO_Initure;
	
	if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
	{
		__HAL_RCC_GPIOA_CLK_ENABLE();			//使能GPIOA时钟
		__HAL_RCC_USART1_CLK_ENABLE();			//使能USART1时钟
	
		GPIO_Initure.Pin=GPIO_PIN_9;			//PA9
		GPIO_Initure.Mode=GPIO_MODE_AF_PP;		//复用推挽输出
		GPIO_Initure.Pull=GPIO_PULLUP;			//上拉
		GPIO_Initure.Speed=GPIO_SPEED_FAST;		//高速
		GPIO_Initure.Alternate=GPIO_AF7_USART1;	//复用为USART1
		HAL_GPIO_Init(GPIOA,&GPIO_Initure);	   	//初始化PA9

		GPIO_Initure.Pin=GPIO_PIN_10;			//PA10
		HAL_GPIO_Init(GPIOA,&GPIO_Initure);	   	//初始化PA10
	}
}

使用

HAL_UART_Transmit() 函数即可发送串口信息

int main(void)
{
    HAL_Init();                     //初始化HAL库    
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
	delay_init(180);
	
	uart_init(); //使用定义的初始化函数
	
	u8 buff[] = "test";    //定义输出数组
	
	while(1){
        //发送串口
		HAL_UART_Transmit(&usart1_handler,buff,sizeof(buff),1000);
		delay_ms(3000);
	}
}

全部代码

//初始化IO 串口1 
//bound:波特率
UART_HandleTypeDef usart1_handler;

void uart_init()
{
	//UART 初始化设置
	usart1_handler.Instance=USART1;					    //USART1
	usart1_handler.Init.BaudRate=115200;				    //波特率
	usart1_handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
	usart1_handler.Init.StopBits=UART_STOPBITS_1;	    //一个停止位
	usart1_handler.Init.Parity=UART_PARITY_NONE;		    //无奇偶校验位
	usart1_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
	usart1_handler.Init.Mode=UART_MODE_TX_RX;		    //收发模式
	HAL_UART_Init(&usart1_handler);					    //HAL_UART_Init()会使能UART1
}

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
	GPIO_InitTypeDef GPIO_Initure;
	
	if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
	{
		__HAL_RCC_GPIOA_CLK_ENABLE();			//使能GPIOA时钟
		__HAL_RCC_USART1_CLK_ENABLE();			//使能USART1时钟
	
		GPIO_Initure.Pin=GPIO_PIN_9;			//PA9
		GPIO_Initure.Mode=GPIO_MODE_AF_PP;		//复用推挽输出
		GPIO_Initure.Pull=GPIO_PULLUP;			//上拉
		GPIO_Initure.Speed=GPIO_SPEED_FAST;		//高速
		GPIO_Initure.Alternate=GPIO_AF7_USART1;	//复用为USART1
		HAL_GPIO_Init(GPIOA,&GPIO_Initure);	   	//初始化PA9

		GPIO_Initure.Pin=GPIO_PIN_10;			//PA10
		HAL_GPIO_Init(GPIOA,&GPIO_Initure);	   	//初始化PA10
	}
}


int main(void)
{
    HAL_Init();                     //初始化HAL库    
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
	delay_init(180);
	
	uart_init();
	
	u8 buff[] = "test";
	
	while(1){
		HAL_UART_Transmit(&usart1_handler,buff,sizeof(buff),1000);
		delay_ms(3000);
	}
}

 打开串口工具,即可接收到信息

 

RT-Thread Studio里用CubeMX配置串口,编译报错‘UART_HandleTypeDef’找不到?别慌,检查这个配置项就对了 本文详细解析了在RT-Thread Studio中使用CubeMX配置串口时遇到的‘UART_HandleTypeDef’编译报错问题。通过系统性检查清单和高级排查技巧,帮助开发者快速定位并解决HAL库头文件未正确包含、路径不匹配等常见问题,提升开发效率。 阅读详情

相关推荐

详解STM32CubeIDE 中 HAL库的串口中断接收函数 HAL_UART_Receive_IT

MX串口配置方法见:CubeIDE 利用自带HAL库 串口收发 一、代码自动生成以后的项目及代码结构: main.c中,调用了串口初始化 串口初始化函数赋值了串口的参数 相当于底层的初始化,配置引脚、并开启中断。 至此串口1配置完毕 二、库文件stm32f1xx_hal_uart.c内的秘密 2.1初始化 1.usart.c中,MX_USART1_U...

zateper的博客 6万+

STM32G4之UART

基于HAL库STM32G4串口的原理和使用

风间琉璃的博客 4906

STM32 之 HAL 库USART的DMA的使用

上一篇对于UART的使用是非常初级的。一般我也只会用来进行代码测试,不会运用到实际项目当中。因为阻塞式的询问串口数据非常占用CPU的使用率,即便每次询问1ms对于CPU来讲都是很长时间的空闲状态。上一篇讲的bug也只是出现在该情况下。因为对于串口数据的到来时间不确定,所以浪费了很多时间在等待信号。 非阻塞式的串口通信主要有IT和DMA。 IT是利用MCU的中断的硬件特性,就像是示波器的trig...

luoyu510183的博客 1万+

通讯的分类—UART的工作原理及其使用方法—HAL库的代码解读—利用USART回显

通讯的分类、USART的工作原理及其使用方法、HAL库的代码解读、利用USART回显。

weixin_67335336的博客 2633

STM32 HAL库实现简单UART串口中断模式通信

利用HAL_UART函数实现简单UART通信

m0_51149752的博客 4006

STM32入门HAL库-UART通信

利用HAL库,操作UART,结合USB转TTL模块,与电脑通信。

Eyderoe的博客 2717

【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解

前言: 今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收,本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片:STM32F407ZET6 2、STM32CubeMx软件 3、IDE: M...

Z小旋 35万+

HAL库STM32的串口收发教程

去。

m0_72105882的博客 9716

STM32 HAL库串口(UART/USART)调试经验(一)——串口通信基础知识+HAL库代码理解

STM32 HAL库串口源码理解

zxt510001的博客 1万+

STM32L0xx_HAL_Driver库的使用——UART

单片机型号:STM32L051C8T6 开发环境MDK5.12 库版本:STM32L0xx_HAL_Driver V1.1.0 主机环境:Windows XP 之前一直使用的STM32F030C8T6单片机来做开发,因需求更改更换了一个新型号STM32L051C8T6,主要是用到了其低功耗特性,本以为直接把代码拷贝一下就可以使用了,结果是太天真了,STM32F030C8T6使用的库是STM

小人物专栏 4万+

STM32 UART详细解读(代码的编写)

本篇文章来给大家讲解USART的代码详细讲解和使用步骤。本篇文章深入的讲解了UART发送和接收查询方式和中断方式的具体函数使用和内部原理。

m0_49476241的博客 4858

STM32 HAL库函数——HAL_UART_RxCpltCallback()详解

例如,您可以使用一个缓冲区数组,在回调函数中将接收到的字符存储在数组中,然后在接收完成后一次性处理整个数组。在这种情况下,当串口接收完成时,HAL 库会自动调用。请注意,在处理多个字符时,您需要确保缓冲区足够大以容纳所有接收到的字符,并且在存储字符之前进行必要的边界检查,以防止溢出或访问无效内存。下面是一个完整的示例,演示了如上要求的功能,且演示了如何在中断处理函数中循环接收字符,直到接收到预定的字符串。因此,如果您在回调函数中只处理一个字符,那么在接收到十个字符时,该函数将被调用十次,每次处理一个字符。

AnChenliang_1002的博客 3万+

Android应用加固脱壳实战:从爱加密原理到Frida内存Dump与修复

在移动应用安全领域,代码加固与动态加载是保护核心逻辑的关键技术。其原理在于通过修改应用启动流程,将原始DEX加密隐藏,并注入包含解密逻辑的壳DEX,实现运行时动态加载。这项技术的核心价值在于防止应用被逆向分析、二次打包或恶意篡改,广泛应用于金融、游戏等高安全要求场景。对于安全研究、漏洞挖掘或历史版本审计,掌握脱壳技能至关重要。本文聚焦于**爱加密**等主流加固方案,深入探讨如何利用**Frida**框架在内存中精准捕获解密后的DEX数据,并解决脱壳后常见的签名校验等运行问题,提供一套从原理到实践的完整攻防思

weixin_28716443的博客 490

基于HAL库的STM32串口发送数据+串口重定向printf

该函数的作用是将数据通过UART发送到外部设备或其他设备。参数说明:huart: UART句柄,表示要使用的UART外设。pData: 要发送的数据的指针,即数据的起始地址。Size: 要发送的数据的大小,以字节为单位。用sizeof()函数获取发送缓冲区的长度Timeout: 发送的超时时间,单位为毫秒。如果在指定的时间内发送完成,则函数返回 HAL_OK;否则,返回 HAL_TIMEOUT。如果设置为HAL_MAX_DELAY,处理器就会一直等到数据发送完成再执行下一条语句。

qq_65105107的博客 1万+

手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)

本文深度解析金蝶云星空V8.1文件上传漏洞,提供详细的漏洞复现步骤与完整POC,涵盖技术原理、测试环境搭建及验证流程。同时给出多维防护方案,包括官方补丁部署、临时缓解措施和长期安全加固建议,帮助企业有效防范任意文件上传风险。

weixin_30505225的博客 183

[GXYCTF2019]BabyUpload1 -- .htaccess文件解析与蚁剑实战指南

本文深入解析了[GXYCTF2019]BabyUpload1文件上传漏洞的实战利用。通过绕过后缀名与内容检测,上传包含PHP代码的.jpg文件,并利用.htaccess文件强制服务器将其解析为PHP脚本。文章详细介绍了.htaccess的原理、构造方法、Content-Type绕过技巧,并演示了如何使用中国蚁剑连接Webshell获取Flag,为Web安全学习提供了完整实战指南。

weixin_29016315的博客 512

Stm32 HAL库 USART(发送+接收)全部采用DMA形式

Stm32 HAL库 USART(发送+接收)全部采用DMA形式 主要参考的是俄国一位大神的文章 文章目录Stm32 HAL库 USART(发送+接收)全部采用DMA形式@[toc]1. 例程简介1.1 DMA1.2 U(S)ART2. 具体实现步骤2.1 CubeMx-5.1.0 界面操作2.2 编程展示3. 实验结果展示 1. 例程简介 1.1 DMA DMA (直接存储区访问,为实...

xinghunlove123的博客 3万+

word2vector入门教程

摘要: 网上已经有许多对w2v的介绍了,这里只是做一个简单的概括。下面这篇文章我认为是关于W2V写的比较好的文章,读者有兴趣可以先参考一下: w2v参考文章1 另外一篇是关于Skip-Gram和CBow的介绍。 Skip-Gram&CBOW 逻辑比较清晰的综述文章: 综述文章 数学原理很清晰很短的一篇文章(也有关于负采样的简单说明) 参考文章 1.什么

SCUT_Sam 1万+

STM32学习笔记-SMT32使用HAL库UART中断方式使用

发送数据 和 接受不定长度的数据 并对数据进行简单约定处理

weixin_54778315的博客 1万+

告别Qweb!用ReportBro在Odoo 13-19版本中5步搞定动态报表

本文介绍了如何在Odoo 13-19版本中使用ReportBro替代Qweb快速实现动态报表设计。通过5步集成指南,包括环境准备、前端集成、后端服务搭建等,展示了ReportBro在可视化设计、即时预览和多格式输出(PDF/XLSX)方面的优势,显著提升开发效率和报表灵活性。

mac99的博客 801

【顾邦小讲堂】第二十四期 电源环路测试从入门到精髓:一文掌握环路测试原理与电压注入点选择依据

电源环路测试是评估开关电源、线性电源等闭环系统稳定性的核心手段,直接关系到电源的稳定性、输出精度、动态响应、抗干扰能力甚至可靠性

GBupupup的博客 2120

STM32 HAL库 STM32CubeMx -- 串口的使用(USART/UART)

STM32 HAL库 STM32CubeMx 串口的使用(USART/UART) 串口阻塞方式收发 串口中断模式收发 printf重定向

Dir_x的博客 1万+

Android Framework AMS面试题及参考答案

比如,应用 B 的 Activity 如果是 “singleTask” 启动模式,AMS 会查找应用 B 是否有包含该 Activity 的任务栈,若有则将这个任务栈切换到前台,并且清除该 Activity 之上的其他 Activity,实现流畅的跨应用跳转体验。如果一个 Activity 的启动依赖于另一个 Activity 的结果,AMS 会暂停当前 Activity 的部分生命周期操作,等待依赖的 Activity 完成相关操作后,再继续当前 Activity 的生命周期进程。

大模型大数据攻城狮的专栏 1863

那些我们一起踩过的STM32HAL库的串口坑

写在前面 之前面试听一位面试官问我有没有使用过HAL库和 STM32CubeMX,那时候只是再原子的例程上看到过。但是他跟我力荐,于是不由自主的对STM32CubeMX产生了一定的好感。自己再这一年里断断续续使用过STM32CubeMX以及HAL库,一直没有再项目中使用过,于是我终于等到一个机会。 项目简介 项目不方便细说,大概就是使用华为9094G模块连接服务器通讯,并且处理服务器的数据,来操纵...

weixin_42783751的博客 1万+

基于深度学习的番茄成熟度检测系统——YOLOv5、YOLOv8、YOLOv10及UI界面的实现

YOLO是一种快速且准确的目标检测模型,近年来,YOLOv5、YOLOv8和YOLOv10作为YOLO系列的重要版本,分别在速度、精度和效率上进行了优化。下面我们简要介绍这些模型。本文介绍了如何基于YOLOv5、YOLOv8和YOLOv10等深度学习模型,结合PyQt5设计一个番茄成熟度检测系统。通过训练模型、优化算法和设计用户友好的界面,我们能够构建一个高效且准确的番茄成熟度检测系统,广泛应用于农业自动化和智能化管理中。

YOLO 1002

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝桥杯STM32 G431 hal库开发速成——UART

UART原理,UART与USART的区别,定长UART,不定长数据接收UART(结束标志为\r\n版)

weixin_44860466的博客 1674

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: stm32 笔记 外部中断以及HAL库应用
下一篇: stm32 笔记 UART读取及HAL库应用
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值