Cortex-M系列: 软件中断和硬件中断

本文深入探讨STM32H743单片机的软件和硬件中断机制,解析软件中断触发条件及注意事项,阐述硬件中断的使能、挂起与激活属性关系,以及中断清除和使能/禁止属性的交互作用。

软件中断请求在逻辑上比较简单,但相关程序的解释比较少,本文将在第一部分进行讲解。硬件中断逻辑比较复杂,但网上的例程比较多。虽然我们知道怎么配置单片机的中断,但估计很多人对它的细节还不是很理解,我将在后半部分讲解,但不会涉及寄存器的操作,有关中断时的寄存器操作机理请见文献[2],我也将在后续博客中进行实例分析。

文中的例子是在STM32H743单片机下进行的。

目录

1 软件中断

1.1 目标中断能挂起并激活的条件

1.2 注意事项

2.2 硬件中断请求


1 软件中断

在中断的软件触发上,Cortex-M7并没有发现和Cortex-M4或Cortex-M3有不同。

简单的说,就是使用下面三个函数,

NVIC_SetPendingIRQ(TIM2_IRQn);

__DSB();

__ISB();

但我在HAL_TIM_PeriodElapsedCallback()中的函数并没有因为我的软件触发中断而运行定时器2。但在TIM2_IRQHandler()中就能实现我需要的软件触发并打印"hello1"。这是因为HAL_TIM_IRQHandler()中去读了TIM2的中断状态寄存器,并以此来判断这次中断是有那个事件引起的,并执行相应的事件回调函数。因此想要用软件触发中断,那这个中断线上不要使能太多事件而让自己不知道该如何处理。

 
/**
  * @brief  Sets Pending bit of an external interrupt.
  * @param  IRQn External interrupt number
  *         This parameter can be an enumerator of IRQn_Type enumeration
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32h7xxxx.h))
  * @retval None
  */
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)
{
  /* Check the parameters */
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  
  /* Set interrupt pending */
  NVIC_SetPendingIRQ(IRQn);
}
 
 
void TIM2_IRQHandler(void)
{
  Debug_IT_Printf("hello1\r\n");
  HAL_TIM_IRQHandler(&TIM2_Handler);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim==(&TIM2_Handler))
  {
    Debug_IT_Pr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值