关于STM32F系列的中断以及其串口收发函数的嵌套调用

EXIT:是指在ARM Cortex-M系列处理器中用于管理中断控制的一种硬件模块。它负责管理和分配处理器中断的优先级和服务程序执行的顺序。
NVIC:是一种特定于STM32微控制器的外部中断控制器。它用于处理来自外部设备或引脚的中断事件,如按钮按下、外部触发器、外部输入等。

使用到的参数和函数

EXTI4_IRQn:PX4的中断
EXTI4_IRQHandler(void):中断服务函数
HAL_GPIO_EXTI_Callback:中断服务处理函数,所有的中断都会调用这个,随后根据引脚不同来分流处理。

HAL_NVIC_SetPriority(KEY0_INT_IRQn, 0, 2);:这个是中断优先级的设置
HAL_NVIC_EnableIRQ(KEY0_INT_IRQn);: 使能KEY0_INT_IRQn中断线的中断

__HAL_RCC_GPIOE_CLK_ENABLE():使能开了中断的引脚对应的GPIO

HAL_GPIO_Init();用几个引脚直接配好就开启即可。模式(中断输入)和触发沿要配好。

    抢占优先级就是可以打断其他中断,比如说小明在执行打游戏的程序,爸爸在他打游戏的时候下达去楼下买烟的中断,小明刚走到门口就被妈妈叫回写作业,写完作业再去买烟,很明显妈妈的中断优先级更高可以打断爸爸的中断,执行完妈妈的中断后才可以继续执行爸爸请求的中断,这就叫抢占。数字越小抢占优先级的级别越高。

    响应优先级是在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中断。注意在抢占优先级相同的情况下,高响应优先级不可以打断正在执行的低响应优先级的中断子函数。数字越小响应优先级的级别越高。

先看抢占 强的上 同强看响应(数字越小优先级越高)
注意:EXTI15_10_IRQn 、EXTI9_5_IRQn

但是使用串口就不一样了。

void uart_init(uint32_t baudrate):在这可以配置串口属性 例:波特率、字长位。。。
最后用HAL_UART_Init(&g_uart1_handle);使能。但是这些最后都要回归到引脚上
所以要去配置引脚void HAL_UART_MspInit(UART_HandleTypeDef *huart):这个函数是被上面的函数自动调用的。在这里初始化引脚、开时钟、定中断优先级、开中断、判断是否要重新定义一下中断服务函数。

串口相互调用逻辑

HAL_UART_Recive_IT:我自己把这个函数理解为使能中断。
USART1_IRQHandler(中断服务函数),在stm32f1xx_it.c文件中,串口接收到数据,产生中断时立即调用。
HAL_UART_IRQHandler(中断处理函数),串口产生中断后调用USART1_IRQHandler中断服务函数,中断服务函数调用中断处理函数,该函数用于判断产生中断的来源(收到数据还是发送数据),然后根据来源判断是调用UART_Recive_IT还是UART_Transmit_IT函数。
UART_Recive_IT(接收函数)(以收到数据产生中断为例),接收发来的数据并储存,然后调用HAL_UART_RxCpltCallBack(中断回调函数),中断回调函数用于用户自行编写产生中断后单片机的动作,记得再次开启接收函数中断,即再次调用HAL_UART_Recive_IT(中断接收函数)。

按钮中断也是一样

KEY1_INT_IRQHandler:中断服务函数
HAL_GPIO_EXTI_IRQHandler(KEY1_INT_GPIO_PIN); /* 调用中断处理公用函数 清除KEY1所在中断线 的中断标志位,中断下半部在HAL_GPIO_EXTI_Callback执行 /
__HAL_GPIO_EXTI_CLEAR_IT(KEY1_INT_GPIO_PIN); /
HAL库默认先清中断再处理回调,退出时再清一次中断,避免按键抖动误触发 */

希望能帮到你!喜欢我就多多为我投票吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值