赞
踩
GD32系列文章均采用KEIL5(V5.35版本),芯片包及固件库版本V3.2.0,使用GD32F407VGT6芯片。
相关文档下载地址,后续更新内容也会放在这个文件路径中。
链接:https://pan.baidu.com/s/1qJEMaxVjLQHTjE1yh4df6Q
提取码:amvj
本章主要介绍定时器的中断。
本章使用TIMER2,属于通用定时器L0,下面主要介绍通用定时器的功能。
tim.c
- #include "tim.h"
- #include "led.h"
-
- // TIMER2 500ms中断一次
- void timer_config(uint16_t psc,uint32_t period)
- {
- timer_parameter_struct timer_initpara;
-
- rcu_periph_clock_enable(RCU_TIMER2);
-
- nvic_irq_enable(TIMER2_IRQn, 2, 2);
-
- timer_deinit(TIMER2);
- /* initialize TIMER init parameter struct */
- timer_struct_para_init(&timer_initpara);
- /* TIMER2 configuration */
- timer_initpara.prescaler = psc;
- timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
- timer_initpara.counterdirection = TIMER_COUNTER_UP;
- timer_initpara.period = period;
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
- timer_init(TIMER2, &timer_initpara);
-
- timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
- timer_interrupt_enable(TIMER2, TIMER_INT_UP);
- timer_enable(TIMER2);
- }
-
- void TIMER2_IRQHandler(void) //TIMER2中断 500ms
- {
- if(RESET != timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP))
- {
- timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
- LED1_Toggle;
- }
- }
tim.h
- #ifndef __TIM_H
- #define __TIM_H
-
- #include "gd32f4xx.h"
-
- void timer_config(uint16_t psc,uint32_t period);
-
-
- #endif
mian.c
- #include "gd32f4xx.h"
- #include "systick.h"
- #include "led.h"
- #include "tim.h"
-
- int main(void)
- {
- systick_config();
- nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
- led_init();
- timer_config(8400-1,5000-1);//84MHZ 500ms中断一次
- while(1)
- {
-
- }
- }
编译下载代码,LED1每500ms电平状态翻转一次。通过逻辑分析仪可以看到PC6(LED1对应引脚)电平每500ms(0.5s)翻转一次,频率为1Hz。
系统时钟为168MHz,TIMER2时钟频率为84MHz。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。