注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
liklon的个人空间 https://home.eeworld.com.cn/space-uid-343627.html [收藏] [复制] [分享] [RSS]
日志

【liklon玩GD32F350】六、通用定时器TIMER1

已有 2991 次阅读2018-9-6 09:24

GD32的timer资源还是挺丰富的,后续用到的只涉及到定时器的基本功能。就挑选一个通用定时器timer1来试试。


使用timer1来做一个1s触发中断的功能。
先看timer1的时钟:

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. }
复制代码

在中断服务函数里一定要清中断标志。

1s相差3ms左右。



本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章