Stm32 即使在启用TICKINT后也无法触发Systick中断处理程序。为什么?

Stm32 即使在启用TICKINT后也无法触发Systick中断处理程序。为什么?,stm32,Stm32,用于初始化STM32F103C8T6车载LED的功能 #include "stm32f10x.h" #define PIN_PC13 0x2000 #define ON_BOARD_LED PIN_PC13 void LED_Init(void); int main() { APB总线2时钟启用--->启用,以便使用外围设备 LED_Init(); while(1) { } retur

用于初始化STM32F103C8T6车载LED的功能

    #include "stm32f10x.h"
    #define PIN_PC13     0x2000
    #define ON_BOARD_LED  PIN_PC13
    void LED_Init(void);

    int main()
    {
APB总线2时钟启用--->启用,以便使用外围设备

    LED_Init();  
    while(1)

    {

    }

    return 0;

    }

    void LED_Init()
    {
中断处理程序没有运行为什么

    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; 

    GPIOC->CRH |=GPIO_CRH_MODE13;   

    GPIOC->CRH &= ~(GPIO_CRH_CNF13);

    SysTick_Config(800000-1);   

    //SysTick->CTRL |=0x07;

   //SysTick->LOAD =8000000/10 -1;

    }

您还需要在NVIC控制器中启用它。

乍一看,您的SysTick配置似乎是正确的。虽然我找不到问题,但我可以为调试提供建议

使用调试器,检查SysTick->CTRL寄存器的值,并确保前2位为1

使用调试器,暂停并继续几次,然后检查SysTick->VAL的值,以确保SysTick正在运行。每次暂停时应观察不同的值

将断点放入SysTick_处理程序中,查看是否调用了它。可能调用了处理程序,但GPIO配置甚至硬件中都有错误


这有点不太可能,但是如果你用C++编译器代替C,请看这个问题:激活SyBLE中断不需要< /P> nVixEnable()。实际上,它会导致问题,可能是因为这里解释的原因:我没有那么多经验,但在我的项目中,我只是使用类似SysTick->CTRL=0b011的代码来启用SysTick及其中断,当然还有调整VAL和LOAD寄存器。我不把NVIC_EnableIRQ(SysTick_IRQn)称为NVIC_。我很确定这种配置能够正常工作,并按预期启用SysTick中断。我已经在Keil IDE中检查了所有这些,是的,在配置SysTick时正在设置位,但由于某种原因,没有调用处理程序。另外,我在STM32CubeIDE中检查了相同的代码,处理程序在那里被调用,但是当我在Ubuntu操作系统中检查Attolic IDE时,硬故障处理程序被调用,而不是Systick处理程序。我不明白为什么相同的代码在不同的IDE中表现不同。也许编译器选项不同。但首先,您需要找到硬故障的原因。逐行运行代码以找到它。在Atolic中,调试过程中还有一个故障分析器窗口,显示故障的类型。

    void SysTick_Handler(void)

    {
        GPIOC->ODR ^=ON_BOARD_LED;  // Toggling the on board LED
    }