【STM32】简述串口中断流程
串口中断的实现(函数名参考MX生成代码)
初始化:
1、void MX_USART1_UART_Init()
基于UART_HandleTypeDef huart,对huart的成员进行配置,并将数据传入HAL_UART_Init(UART_HandleTypeDef *huart),完成对串口功能特性的配置
接下来需要分情况了:是将接受处理写在中断服务函数里还是写在中断Callback里面,若写在Callback里面,我们还需要对HAL_UART_Receive_IT()进行配置,传入参数有&huart,buffer的首指针与buffersize;若写在中断服务函数里则不需要对Receive IT进行配置,相对来说写在中断服务函数里效率会相对高效
UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
}
2、void HAL_UART_MspInit(UART_HandleTypeDef *huart)
又是一个weak函数,这个函数写在HAL_UART_Init(UART_HandleTypeDef *huart)里面,HAL库通过引出这个API,使得用户可以自行在外部配置硬件资源,此处主要是对GPIO的配置以及中断优先级配置和允许
以上两个函数需要用户自行编写,或使用CubeMX生成
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{ GPIO_InitTypeDef GPIO_InitStruct = {0};
if(uartHandle->Instance==USART1)
{
__HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
}
}
中断时:
1、void USART1_IRQHandler(void)
这是中断服务函数,假设用户采用直接写在中断服务函数里的方式,那么到此为止了,这时只需要在此函数里写用户对于接收数据的处理(接收值在寄存器里,限于篇幅不赘述),设置标志清零即可,如果用CubeMX,这个服务函数会生成再stm32xxx_it.c里,用户需要自己编写回调
假设用户采用回调的方式,那么需要在此函数里调用总的Handler:HAL_UART_IRQHandler(),这里面会调用UART_Receive_IT(),在里面会调用HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
回调:
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
叕是一个weak函数,用户在外部定义这个Callback,写法和另一种方式的写在中断服务函数的内容一样,不过由于是公用的Callback,需要在这里面判断是串口几,done
续:由于是简述,目前理解还不太深,潦潦草草先写这么多后再补充。。。
【STM32】简述串口中断流程的更多相关文章
- STM32单片机串口中断+DMA使用(含CUBE配置)
最近又要重新用32做点东西,发现一两年没怎么碰的结果就是,曾经熟得不行的东西都变得极度陌生,这种重新学习记忆的过程过于痛苦,果然还是要留下一些记录给之后失忆的自己的. 1.STM32CUBE配置 1. ...
- stm32的串口中断
下面有很多问题没有验证: 在设置USART_CR1中的TE位时,会发送一个空闲帧作为第一次数据发送, 目前我所了解的串口中断发送,有两种方式: 一个是:TC 一个是:TXE 这是判断两个标志位, 第一 ...
- STM32串口中断实例二
int main(void) { uint8_t a=;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时 ...
- STM32串口中断的一些资料
在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理 ...
- STM32 串口中断总结
原文:https://blog.csdn.net/weixin_42480952/article/details/82981409 最近在学习使用dma传输方式进行串口通讯,感觉这个很详细,存一下 . ...
- STM32串口——中断方式的一般配置方法
#include "stm32f10x.h" /************************************************ 该程序讲解串口程序的一般配置方法: ...
- STM32 HAL库关于串口中断烧录程序后可以正常运行,断电重启后无法进入中断的问题分析以及解决方法
1.情景描述: 最近在做一个项目,X86的上位机通过串口控制MCU,使用串口中断接收上位机数据时,MCU在上电的情况下烧录程序,可以正常接收上位机的数据,在断电重启后,一直进入不了中断回调函数,上电的 ...
- 单片机stm32 USART串口实际应用解析
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- STM32的USART中断死循环,形成死机。
作者:观海 QQ:531622 直接说重点:我用的是 STM32F103 芯片 USART2_IRQHandler 总是中断,程序死循环. 1.出现问题: 原程序的中断处理程序是: void USA ...
- STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷
STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷 http://www.openedv.com/thread-63849-1-1.html 实现思路:采 用STM32F103的串口1,并配 ...
随机推荐
- Python_七十二变_二进制和字符编码
第二章 七十二变 二进制和字符编码 8bit为1byte 字节 1024byte为1KB 千 1024KB为1MB 兆 1024MB为1GB 吉 1024GB为1TB 太 ASCLL字符 ...
- openssl命令学习笔记--第一周
开始学习openssl命令,目前处于啥也不懂的状态.因为不是所有命令都能找到详尽的使用方法(部分可能因为版本问题,甚至找不到对应功能).仅为我那可怜兮兮的7条命令做个学习记录. 一.在linux环境下 ...
- 【当年笔记】集合之Queue队列
1)Queue 分类 双端队列:双端队列(Deque)是 Queue 的子类也是 Queue 的补充类,头部和尾部都支持元素插入和获取. 阻塞队列:阻塞队列指的是指添加或删除元素时,如果没有成功,会阻 ...
- java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'
你设置的主键里面已经有一个值为1的数值了,再插入一个就重复了. 但是主键是不能重复的.
- selenium grid4.0+分布式的部署配置(hub/node方式)
一.grid安装 本文已jar包的方式讲解,访问并下载jar包:Releases · SeleniumHQ/selenium · GitHub 二.grid配置 假设主机:10.1.5.219,从机: ...
- Kubernetes理论知识
一.k8s概念 Kubernetes(k8s)是跨主机集群的自动部署.扩展以及运行应用程序容器的开源平台,这些操作包括部署,调度和节点集群间扩展. master node:主节点 Master 是 C ...
- php框架之odp-环境部署安装
一.安装配置 1.安装很简单,创建安装目录,然后在linux上使用wget命令从获取地址下载,然后解压,最后在安装目录下执行bin/odp_install即可. 例如:(只是举例,请安装最新的版本) ...
- UART4模板
#define UART4_Bps 9600 #define UART4_RecSize 20 uchar UART4_RecData[UART4_RecSize];uchar UART4_Loc; ...
- :)模型保存为单一个pb文件
模型保存为单一个pb文件 背景 参考连接: https://www.yuque.com/g/jesse-ztr2k/nkke46/ss4rlv/collaborator/join?token=XUVZ ...
- Yocto Project Mega-Manual 英文版 (2020官方最新合并版575页),Yocto官方文档中文版,Yocto官方文档英文版
Yocto Project Mega-Manual-(2020官方最新合并版575页)-英文版 https://market.m.taobao.com/app/idleFish-F2e/widle-t ...