【GD32F427开发板试用】-03-定时器1 的不算坑的坑和时钟设置

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:申小林

先说一下我使用定时器1 的时候吧,最开始我以为定时器1是挂在APB1上的,随意按照惯性思维,定时器的时钟应该和APB1相等数据手册上说的APB1最大频率为50MHz,所以我单纯的以为定时器1 的输入时钟就是50MHz,我按照50MHz配置之后,设置灯闪的频率为1Hz,但是实际结果却是这个灯光太耀眼,闪得眼睛都快瞎了。于是就开始找问题,看到例程里面有一个配置选项,感觉很奇怪,以为就是简单的时钟选择,但是细读注释才发现一个是倍频选择,2倍或者四倍的选择。好吧,
踩坑证据1:数据手册和用户手册描述不一致

踩坑证据2:实际上不存在1倍频的选项,只能2倍频或者4倍频

好吧,这个不算坑的坑,我已经帮你们踩了,后面就靠你们自己了
下面上自己写的代码,定时器闪个灯
`#include “DRV_TIM1.h”

void Time1_Init(void)
{

timer_parameter_struct timer_initpara;                //--声明结构体
rcu_periph_clock_enable(RCU_TIMER1);                  //--使能定时器时钟

// rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL2); //–选择时钟源-- 倍频选择–

timer_struct_para_init(&timer_initpara);
timer_deinit(TIMER1);
   
/* TIMER1 configuration */
timer_initpara.prescaler         = 119;//--APB 1 最大时钟是60M,但是时钟输入有倍频设置,上面倍频选择的是2倍频,所以实际时钟为 120MHz,所以这里设置为120分频-即为1M时钟--向上计数1000,即表示为1ms
timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection  = TIMER_COUNTER_UP;
timer_initpara.period            = 1000;
timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0;
timer_init(TIMER1,&timer_initpara);

/* auto-reload preload enable */
timer_auto_reload_shadow_enable(TIMER1);
/* TIMER1 enable */
timer_enable(TIMER1);
nvic_irq_enable(TIMER1_IRQn, 0, 1);  //--设置中断优先级
timer_interrupt_enable(TIMER1,TIMER_INT_UP);   //--设置向上计数中断使能--

}
unsigned int DataCount=0;
//–中断响应函数----
void TIMER1_IRQHandler(void)
{

if(RESET!=timer_interrupt_flag_get(TIMER1,TIMER_INT_FLAG_UP))
{
    timer_interrupt_flag_clear( TIMER1 ,TIMER_INT_FLAG_UP);
    DataCount++;
    if(DataCount==500)
    {
       gpio_bit_set(GPIOC, GPIO_PIN_6);
    }
    if(DataCount==1000)
    {
        DataCount=0;
        gpio_bit_reset(GPIOC, GPIO_PIN_6);
    }
    

}

}

/======================= end of the files ================================================/

`
主函数就不加上来了,初始化一下就好了。今天的分享就到这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值