串口中断的实现(函数名参考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】简述串口中断流程的更多相关文章

  1. STM32单片机串口中断+DMA使用(含CUBE配置)

    最近又要重新用32做点东西,发现一两年没怎么碰的结果就是,曾经熟得不行的东西都变得极度陌生,这种重新学习记忆的过程过于痛苦,果然还是要留下一些记录给之后失忆的自己的. 1.STM32CUBE配置 1. ...

  2. stm32的串口中断

    下面有很多问题没有验证: 在设置USART_CR1中的TE位时,会发送一个空闲帧作为第一次数据发送, 目前我所了解的串口中断发送,有两种方式: 一个是:TC 一个是:TXE 这是判断两个标志位, 第一 ...

  3. STM32串口中断实例二

    int main(void) { uint8_t a=;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时 ...

  4. STM32串口中断的一些资料

    在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理 ...

  5. STM32 串口中断总结

    原文:https://blog.csdn.net/weixin_42480952/article/details/82981409 最近在学习使用dma传输方式进行串口通讯,感觉这个很详细,存一下 . ...

  6. STM32串口——中断方式的一般配置方法

    #include "stm32f10x.h" /************************************************ 该程序讲解串口程序的一般配置方法: ...

  7. STM32 HAL库关于串口中断烧录程序后可以正常运行,断电重启后无法进入中断的问题分析以及解决方法

    1.情景描述: 最近在做一个项目,X86的上位机通过串口控制MCU,使用串口中断接收上位机数据时,MCU在上电的情况下烧录程序,可以正常接收上位机的数据,在断电重启后,一直进入不了中断回调函数,上电的 ...

  8. 单片机stm32 USART串口实际应用解析

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  9. STM32的USART中断死循环,形成死机。

    作者:观海  QQ:531622 直接说重点:我用的是 STM32F103 芯片 USART2_IRQHandler 总是中断,程序死循环. 1.出现问题: 原程序的中断处理程序是: void USA ...

  10. STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷

    STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷 http://www.openedv.com/thread-63849-1-1.html 实现思路:采 用STM32F103的串口1,并配 ...

随机推荐

  1. lowcodeEngine 组件面板的拖拽功能

    设计器和渲染器处在不同的 Frame 渲染器以单独的 iframe 嵌入,xxx-simulator-renderer 通过和 host进行通信来和设计器打交道,比如点击渲染画布任意一个位置,需要能计 ...

  2. 数据驱动之 python + requests + Excel

    数据驱动 是根据数据来测试的,如读取 excel表中的测试用例自动填写测试结果,发送测试报告 包括以下模块: 1.获取用例 2.调用接口 3.校验结果 4.发送测试报告 5.异常处理 6.日志模块 1 ...

  3. 实验一-密码引擎-加密API实现与测试

    实验一-密码引擎-加密API实现与测试 1 下载并查找GMT 0018-2012密码设备应用接口规范原始文档进行学习 (5分) 2 实现GMT 0018-2012密码设备应用接口规范的接口函数,至少实 ...

  4. STP理论基础

    目的 防止二层环路及防止环路造成的广播风暴以及引起的MAC表震荡 方法 首先,所有配置了STP的交换机互相向相邻交换器(配置了STP的)发送BPDU(协议数据单元),选举根桥(根交换机),根交换机上所 ...

  5. [Swift]Xcode格式化代码快捷键

    写代码最常用的快捷键莫过于格式化代码了,最近玩Swift,百度上没有找到简单明了的内容,特意记录一下. Control + I     自动调整缩进 可以选中相应的代码 或 Command + A全选 ...

  6. python 安装redis,rediscluster

    首先看下pip版本,过低版本会出问题 [root@test rpm]# pip -V pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (pyt ...

  7. Python学习笔记(三)数据类型转换

    一.输入输出函数 1.input() 输入函数,内置函数,用来获取用户输入数据,返回值为字符串 运行到此函数会阻塞或暂停程序 示例: 1 str_data = input('请输入数据:') 2 st ...

  8. Asp.Net Core上传大文件请求体限制设置

    IIS进程内部署时 1. Web.Config的<system.webServer>节点下增加 <security> <requestFiltering> < ...

  9. Win10家庭版找不到组策略gpedit.msc怎么办

    Win10家庭版找不到组策略gpedit.msc怎么办 @echo off pushd "%~dp0" dir /b %systemroot%\Windows\servicing\ ...

  10. [转载]OpenCV中的channel是什么意思?

    转载自https://answers.opencv.org/question/7585/meaning-of-channels/ 简单来说,就是描述一个pixel的颜色用多少个独立的参数描述,这个个数 ...