STM32103fx使用定时器TIM3实现灯一秒亮一次
使用keil代码编译没问题,但是在proteus仿真上,灯是一直亮的状态,不进行定时器中断。改了很多次,不知道为啥,求助。代码如下
- void TIM3_Config(void)
- {
- /*1表示亮灯 0表示不亮*/
- /* TIM_TimeBaseInitTypeDef结构体在stm32f10x_tim.h中定义 */
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- TIM_DeInit(TIM3);
- /* 计数10000次 */
- TIM_TimeBaseStructure.TIM_Period = (10000-1);
- /* 预分频系数,7200,因为系统时钟72MHZ */
- TIM_TimeBaseStructure.TIM_Prescaler = 71;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- //TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- /* 根据设定的参数设置TIM1 */
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//使能或者失能指定的TIM中断TIM3,
- TIM_Cmd(TIM3, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE);
- }
- void GPIO_Config(void)
- {
- /* 定义GPIO_InitTypeDef结构体,在stm32f10x_gpio.h中定义 */
- GPIO_InitTypeDef GPIO_InitStructure;
- /* 使能 */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*驱动LED*/
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- void NVIC_Config(void){
- NVIC_InitTypeDef NVIC_InitStructure;
- // 设置中断组为0
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- // 设置中断来源
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn ;
- // 设置主优先级为 0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- // 设置抢占优先级为3
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
复制代码 仿真如下图:
灯一直保持亮的状态,并不会一亮一灭,觉得是不是中断有问题,但查了挺多资料,还是不行。
|