[经验分享] 【liklon玩GD32F350】六、通用定时器TIMER1

liklon   2018-9-6 09:24 楼主
GD32的timer资源还是挺丰富的,后续用到的只涉及到定时器的基本功能。就挑选一个通用定时器timer1来试试。
QQ截图20180906090758.png

使用timer1来做一个1s触发中断的功能。
先看timer1的时钟:
QQ截图20180906091900.png
CK_APB1最大是54Mhz 那么 apb1 prescaler 采用2分频, timer1,2,5,13 为 apb1 prescaler / 2 那么应该可以理解为CK_TIMERx为108Mhz。
再进一步配置定时器完成1s中断:
  1. void timer1_init()
  2. {
  3.     timer_parameter_struct timer_parameter =
  4.     {
  5.         .prescaler = 2160 - 1,
  6.         .alignedmode = TIMER_COUNTER_EDGE,
  7.         .counterdirection = TIMER_COUNTER_UP,
  8.         .period = 50000,
  9.         .clockdivision = TIMER_CKDIV_DIV1,
  10.     };
  11.     timer_init(TIMER1, &timer_parameter);
  12.    
  13.     timer_interrupt_enable(TIMER1, TIMER_INT_UP);
  14.     nvic_irq_enable(TIMER1_IRQn, 0, 2);
  15.   
  16.     timer_enable(TIMER1);
  17. }

中断服务函数:
  1. void TIMER1_IRQHandler()
  2. {
  3.     uart1_write((uint8_t *)"liklon gd32f350\n\r", 17);
  4.     timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_UP);
  5. }

在中断服务函数里一定要清中断标志。
QQ截图20180906090346.png
1s相差3ms左右。



回复评论 (2)

是李凯龙吗
点赞  2018-9-6 10:51
引用: 杨晓恒 发表于 2018-9-6 10:51
是李凯龙吗

呵呵,这都被发现了
点赞  2018-9-6 11:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复