0

我有 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;
}
4

1 回答 1

1

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

于 2016-12-19T09:18:54.860 回答