2016-12-17 53 views
0

我有smt32l1xx板,下面的代碼不起作用。調試器顯示pinA5已設置,但連接到此引腳的二極管仍然不亮。我不知道爲什麼。即使我在設置位後添加延遲,它不起作用。二極管連接到板上的PA5和GND。smt32中斷。爲什麼我的二極管不閃爍?

#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; 
} 
+0

需要嘗試兩件事,首先您可以在正常(非中斷代碼)下切換LED,以檢查您的IO配置是否正確?其次是中斷實際發生?你可以重複地在中斷中打斷點嗎?嘗試縮小問題的範圍。 –

回答

1

要確保您的硬件已正確初始化,您應該使用STM32CubeMX。 看來,GPIOA時鐘在AHB總線上,但是您可以撥打RCC_APB2PeriphClockCmd這是APB2。因此,嘗試使用相當於AHB的東西,例如RCC_AHBPeriphClockCmd

+0

您不必使用STM32CubeMX。對初學者來說可能更容易,但我個人不喜歡使用它。儘管它們在舊版本和新版本之間有點混亂,但我傾向於使用HAL驅動程序。 –