STM32CubeIDE HAL - 生成的 EXTI 中断不会触发 - STM32F4

问题描述 投票:0回答:1

我已经在 STM32CubeIDE 中为 STM32F411 MCU 创建了(到目前为止)简单的项目。 当使用 GUI 配置器为我的引脚启用硬件中断 EXTI 时(最初我想使用 PB5,但添加了 PB8,因为它只是伸出在我的 PCB 和 PA0 上,因为它与接地之间连接有按钮),它会生成配置代码我的 main.cpp (对于生成,我将其重命名为 main.c,以便配置器看到它),它创建了正确的事件处理程序,根据

HAL_GPIO_EXTI_Callback
中的说明,我向其中添加了方法
stm32f4xx_hal_gpio.c
,但是,不会触发中断。未命中断点,串行上无输出。

我已将这些引脚设置为使用 EXTI,根据我的需要设置它们各自的上拉/下拉等(尽管尝试更改它但没有效果)。 我在 NVIC 页面中启用了这些中断(EXTI line0 和 EXTI line[9:5]),并遵循了无数关于该问题的教程(例如这个:https://www.waveshare.com/wiki/STM32CubeMX_Tutorial_Series:_EXTI ,也是 ST Electronics 官方 YouTube 频道)。

我的板子是基于STM32F411CEU的Chinese Black Pill。 完整代码可以在这里看到:https://github.com/domints/LoadCellCWManipulator(最新提交,以供将来参考

f4330cd6066f227f5cf3d3ea619adcc810025b72
)。

我可能缺少什么吗?到目前为止我尝试过的所有其他代码都没有问题。 可能是 CubeIDE 在生成过程中缺少一些东西,我需要手工写一些东西?

我正在尝试使用 C++(尽管 IDE 据说有该选项,但这使它变得更难),因为我来自更高级别的背景。

arm stm32 stm32f4 stm32cubeide
1个回答
0
投票

ChatGippity 有这个对我有用的答案:

将 C++ 与 STM32CubeIDE 和 STM32 HAL 库一起使用时,通常需要使用 extern“C” 声明中断回调函数以确保正确链接。这是因为 C++ 使用名称修饰,这可能会导致 C++ 中声明的函数与 C 中声明的函数的符号名称不同。

要在 C++ 中使用 extern "C" 声明中断回调函数,您可以执行以下操作:

extern "C" {
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
        // Your callback implementation here
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.