smt32中断。为什么我的二极管没有闪烁?

时间:2016-12-17 12:50:05

标签: timer interrupt stm32 diode

我有smt32l1xx主板,下面的代码无效。调试器显示pinA5已设置,但连接到此引脚的二极管仍然没有闪烁。我不知道为什么。即使我在设置位之后添加延迟它也不起作用。二极管连接到板上的PA5和GND。

#include <stm32l1xx.h>

#define ENABLE 1
#define DISABLE 0


void TIM2_IRQHandler() //interrupt
{
 if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
 {
 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

 if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5))
 GPIO_ResetBits(GPIOA, GPIO_Pin_5); //LED OFF
 else
 GPIO_SetBits(GPIOA, GPIO_Pin_5); //LED ON <- im here and still nothing

 }
}

int main(void)
{
    /* gpio init struct */
    GPIO_InitTypeDef gpio;
    TIM_TimeBaseInitTypeDef tim;
    NVIC_InitTypeDef nvic;
    /* reset rcc */
    RCC_DeInit();


    RCC_APB2PeriphClockCmd(RCC_AHBENR_GPIOAEN, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    GPIO_StructInit(&gpio);
        /* use pin 0 */
        gpio.GPIO_Pin = GPIO_Pin_5;
        /* mode: output */
        gpio.GPIO_Mode = GPIO_Mode_OUT;
        /* apply configuration */
        GPIO_Init(GPIOA, &gpio);

     TIM_TimeBaseStructInit(&tim); //timer
     tim.TIM_CounterMode = TIM_CounterMode_Up;
     tim.TIM_Prescaler = 64000 - 1;
     tim.TIM_Period = 1000 - 1;
     TIM_TimeBaseInit(TIM2, &tim);

     TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
     TIM_Cmd(TIM2, ENABLE);

     nvic.NVIC_IRQChannel = TIM2_IRQn; //interrupt
     nvic.NVIC_IRQChannelPreemptionPriority = 0;
     nvic.NVIC_IRQChannelSubPriority = 0;
     nvic.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&nvic);


     while (1)
     {

     }
    /* never reached */
    return 0;
}

1 个答案:

答案 0 :(得分:1)

要确保硬件已正确初始化,您应该使用STM32CubeMX。 似乎GPIOA时钟在AHB总线上,但是你调用RCC_APB2PeriphClockCmd用于APB2。因此,尝试使用AHB的等价物,例如RCC_AHBPeriphClockCmd