OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5211|回复: 1

新手求助,关于定时器问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-10-2
在线时间
1 小时
发表于 2022-10-2 20:48:02 | 显示全部楼层 |阅读模式
1金钱
萌新学了定时器,利用库函数编了个定时器实现流水灯。代码如下:
#include <stm32f10x.h>
void NVIC_Configure(void);
void LED_Configure(void);
void TIM2_Configure(void);
void delay_ms(int32_t ms);
int c ;
int main(void)
{
        uint8_t k ;
       
        NVIC_Configure();
        LED_Configure();
               
        for(k=0;k<5;k++)
        {
                LED1_On();
                LED2_On();
                LED3_On();
                LED4_On();
                LED5_On();
                delay_ms(200);
                LED1_Off();
                LED2_Off();
                LED3_Off();
                LED4_Off();
                LED5_Off();
                delay_ms(200);
        }


        TIM2_Configure();
        c=0;
        while(1)
        {
         switch(c){
                 case 0: LED5_Off();LED1_On(); break;
                 case 1: LED1_Off();LED2_On(); break;
                 case 2: LED2_Off();LED3_On(); break;
                 case 3: LED3_Off();LED4_On(); break;
                 case 4: LED4_Off();LED5_On(); break;
         }
        }
}

void NVIC_Configure(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void LED_Configure(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        LED1_Off();
        LED2_Off();
        LED3_Off();
        LED4_Off();
        LED5_Off();
}

void TIM2_Configure(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        TIM_TimeBaseInitStructure.TIM_Prescaler = 7199 ;
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInitStructure.TIM_Period = 4999 ;
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
        TIM_ITConfig(TIM2,TIM_IT_Update | TIM_IT_Trigger ,ENABLE);
        TIM_Cmd(TIM2,ENABLE);
}
void delay_ms(int32_t ms)
{
        int32_t i ;
        while(ms--)
        {
                i=7500;
                while(i--);
        }
}
void TIM2_IRQHandler(void)
{
       
        c++;
        if(c==5)
                c=0;       
        TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}

led相关函数没展示是因为太占地方。
问题是如上图写代码 c=0;在定时器初始化函数下面流水正常。
当c=0;写在TIM2_Configure();上面时

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-10-2
在线时间
1 小时
 楼主| 发表于 2022-10-2 20:49:18 | 显示全部楼层
第一次流水的效果就是从第二个led开始接下来流水效果就正常了。请问为什么会出现这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 01:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表