串口中断的实现(函数名参考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. TCAM and CAM memory usage inside networking devices(转)

    TCAM and CAM memory usage inside networking devices Valter Popeskic Equipment and tools, Physical la ...

  2. IDEA报错Error running ‘Application‘: Command line is too long解决方案

    IDEA报错Error running 'Application': Command line is too long.Shorten command line for Application or ...

  3. USB转UART的桥接控制器 国产DPU02软硬件兼容替换CP2102

    DPU02是一个高度集成的USB转UART的桥接控制器,可将RS-232设计更新为USB设计,并简化PCB组件空间.该DPU02包括了一个USB 2.0全速功能控制器.USB收发器.振荡器.EEPRO ...

  4. Vue 双向绑定

    devtools工具 使用devtools工具可以让你更加方便的查看到Vue实例中数据的变化. 在chorme商店搜索安装即可. 双向绑定 v-model 双向绑定一般都是与input家族进行绑定. ...

  5. boolean布尔型盲注

    mysql中limit的详细用法 1.用于强制返回指定的记录行数 在查询中,经常要返回前几条或者中间某几行数据时,用到limit 语法如下 select * from table_name limit ...

  6. 读后笔记 -- Java核心技术(第11版 卷 II) Chapter3 XML

    3.1 XML Introduction An XML document is made up of elements. An element can have attributes (key/val ...

  7. 动手学强化学习 第二章 多臂tiger机问题 阅读笔记

    第二章 多臂tiger机问题 第一节 简介 强化学习是一种试错型学习范式. 第二节 问题介绍 多臂tiger机(multi-armed bandit,MAB)不存在状态信息,只有动作和奖励.有一个拥有 ...

  8. 增加网络位置CMD脚本

    创建.bat脚本 net use Z: \\192.168.X.X\Share /user:用户名 /persistent:YES 密码 persistent:YES是保存密码.下次开机也生效.

  9. EXCEL函数总结

    ------------------截取"号"之前的字符 =MID(A45,1,FIND("号",A45,1)-1)

  10. 选择/插入/冒泡/快速排序之R语言实现

    题目来自于<R语言的科学编程与仿真>第9章第7题. 选择排序法.这是一种最简单,但是效率最低的排序算法.算法步骤如下: 对于给定的一个向量x,令最初的未排序向量u等于x,并且最初的已排序向 ...