STM32
直播中

宜家

8年用户 1089经验值
私信 关注
[问答]

如何利用STM32CubeMX生成的keil项目如何关闭全局中断?

利用STM32CubeMX生成的keil项目如何关闭全局中断?中断相关的函数在哪个头文件里?
       如何关闭系统滴答定时器中断

回帖(2)

景芳

2024-5-16 10:54:13
关闭全局中断函数是__enable_irq();,,,在头文件core_cmFunc.h中
举报

陈敏

2024-5-16 18:14:45
要利用STM32CubeMX生成的Keil项目关闭全局中断,您需要执行以下步骤:

1. 首先,确保您已经安装了STM32CubeMX和Keil MDK-ARM。

2. 使用STM32CubeMX生成您的项目。在STM32CubeMX中,选择您的STM32微控制器型号,配置所需的外设和中断。

3. 生成项目后,打开生成的Keil MDK-ARM项目。

4. 在Keil项目中,找到中断相关的头文件。通常,这些文件位于STM32CubeMX生成的源代码文件夹中,例如`Drivers/CMSIS/Device/ST/STM32xxxxxx/Include`。对于STM32F1系列,全局中断控制函数在`core_cm3.h`或`core_cm3.c`中;对于STM32F4系列,全局中断控制函数在`core_cm4.h`或`core_cm4.c`中。

5. 要关闭全局中断,您可以使用`__disable_irq()`宏(对于STM32F1系列)或`__disable_fault_irq()`宏(对于STM32F4系列)。这些宏分别位于`core_cm3.h`和`core_cm4.h`中。

6. 在您的代码中,找到需要关闭全局中断的位置。例如,您可以在临界区(需要保护的代码段)之前调用这些宏。示例代码如下:

```c
void critical_section(void)
{
    __disable_irq(); // 关闭全局中断(STM32F1系列)
    // 或者
    __disable_fault_irq(); // 关闭全局中断(STM32F4系列)

    // 临界区代码

    __enable_irq(); // 启用全局中断(STM32F1系列)
    // 或者
    __enable_fault_irq(); // 启用全局中断(STM32F4系列)
}
```

7. 如何关闭系统滴答定时器中断:

   要关闭系统滴答定时器(SysTick)中断,您需要修改SysTick的中断使能位。以下是如何操作的示例:

```c
void disable_systick_interrupt(void)
{
    // 清除SysTick中断使能位
    SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
}
```

请注意,关闭全局中断可能会影响系统的实时性能。因此,在执行关键操作时,应尽可能减少全局中断的禁用时间。

总之,要关闭STM32CubeMX生成的Keil项目的全局中断,您需要在适当的位置使用`__disable_irq()`或`__disable_fault_irq()`宏,并在完成关键操作后使用`__enable_irq()`或`__enable_fault_irq()`宏重新启用中断。对于系统滴答定时器中断,您可以通过修改SysTick的中断使能位来禁用它。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分