7回答

1收藏

[原创] GD32创意设计方案大赛----使用定时器点亮红色的LED

GD32 GD32 3818 人阅读 | 7 人回复 | 2015-07-04

本帖最后由 damiaa 于 2015-7-4 22:05 编辑

使用定时器需要以下几点:
1,设置定时器参数,开启时钟电源
2,开启定时器
3,设置中断
4,开启中断

void TIM_Configuration(void)
{
    TIMER_BaseInitPara TIM_TimeBaseStructure;
    NVIC_InitPara NVIC_InitStructure;
   NVIC_InitStructure.NVIC_IRQ = TIMER3_IRQn;
    NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;
    NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    NVIC_Init(&NVIC_InitStructure);      
    RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER3,ENABLE);

        /* TIMER3  configuration */
    TIMER_DeInit(TIMER3);
    TIM_TimeBaseStructure.TIMER_Prescaler = 10-1;
    TIM_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP;
    TIM_TimeBaseStructure.TIMER_Period = 10000-1;
    TIM_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1;
    TIMER_BaseInit(TIMER3,&TIM_TimeBaseStructure);
    TIMER_ClearBitState( TIMER3 , TIMER_FLAG_UPDATE);
    TIMER_INTConfig(TIMER3, TIMER_INT_UPDATE, ENABLE);
    /* TIMER enable counter*/
    TIMER_Enable( TIMER3, ENABLE );               
}
使用GPIO需要以下几点:
1,设置GPIO参数,开启时钟电源
2,调用GPIO函数

void GPIO_Configuration()
{
    GPIO_InitPara GPIO_InitStructure;

          RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOC,ENABLE);
            
          GPIO_InitStructure.GPIO_Pin   = GPIO_PIN_10;
    GPIO_InitStructure.GPIO_Mode  = GPIO_MODE_OUT;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PUPD_NOPULL;
    GPIO_Init(GPIOC , &GPIO_InitStructure);

}
主程序中调用这两个函数初始化:这里延时没用,因为在中断里点亮LED

void delayxms(uint16_t x)
{
        uint16_t i,j;
        for(i=0;i<x;i++)
        {
                for(j =0;j<1000;j++);
        }
}        
int main(void)
{
                GPIO_Configuration();
          //SysTick_Configuration();
    TIM_Configuration();        
                while(1)
                {

//                        delayxms(1000);
//                        GPIO_SetBits(GPIOC,GPIO_PIN_10);
//                        delayxms(1000);
//                        GPIO_ResetBits(GPIOC,GPIO_PIN_10);
                }
}

GP32f1x0.it 里实行TIM3的中断函数
void TIM3_IRQHandler(void)
{

        if(TIMER_GetIntBitState(TIMER3,TIMER_INT_UPDATE)==ENABLE)
    {
                                static uint8_t ledflag=0;
                    TIMER_ClearIntBitState(TIMER3,TIMER_INT_UPDATE);
                                ledflag++;
                                if(ledflag ==200)
                                {        
                                        ledflag =0;
                                        GPIO_SetBits(GPIOC,GPIO_PIN_10);
                                }               
                                else
                                {
                                        if(ledflag ==100)
                                        {               
                                                GPIO_ResetBits(GPIOC,GPIO_PIN_10);
                                        }
                                }

    }
        
}

这样就实行了一个定时器点亮LED的程序。希望大家支持。
现在把源代码献上,希望大家喜欢:
mytime.zip (1.2 MB, 下载次数: 20)




分享到:
回复

使用道具 举报

回答|共 7 个

倒序浏览

沙发

slotg

发表于 2015-7-4 23:19:25 | 只看该作者

不错的分享,顶一个。

点评

谢谢。  发表于 2015-7-5 18:47
板凳

jwdxu2009

发表于 2015-7-5 23:16:17 | 只看该作者

参考和学习了
地板

奋斗哥

发表于 2015-7-6 10:28:52 | 只看该作者

多谢楼主分享
5#

莫林2020

发表于 2015-7-11 09:48:56 | 只看该作者

真是手把手

点评

谢谢  发表于 2015-7-14 14:13
6#

若云流风

发表于 2015-7-13 01:05:48 | 只看该作者

这个定时时间是多少?
7#

damiaa

发表于 2015-7-14 14:12:29 | 只看该作者

若云流风 发表于 2015-7-13 01:05
这个定时时间是多少?

没细估算,你跑下就知道了。
8#

莫林2020

发表于 2015-7-14 16:09:50 | 只看该作者

共同学习啊
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条