20.3. 应用示例¶
int test_timer_callback(void *priv)
{
static int cnt = 0;
printf("timer %d interrupt count %d\n", *((int *)priv), ++cnt);
return 0;
}
int timer_example(void)
{
// 获取一个计数器
unsigned int timer1_id = gx_timer_register(NULL, 0xFFFFFFFF, NULL, GX_HAL_TIMER_MODE_CNT);
// 获取计数器计数
gx_timer_get_count(timer1_id);
// 清空计数器计数
gx_timer_reset_count(timer1_id);
// 暂停计数器计数
gx_timer_stop(timer1_id)
// 开启计数器计数
gx_timer_start(timer1_id)
// 释放 timer 资源
gx_timer_unregister(timer1_id);
// 申请一个定时 1000ms,只触发一次的定时器
unsigned int timer2_id = gx_timer_register(test_timer_callback, 1000, NULL, GX_HAL_TIMER_MODE_ONESHOT);
// 申请一个每过 2000ms 就触发一次中断的定时器
unsigned int timer3_id = gx_timer_register(test_timer_callback, 2000, NULL, GX_HAL_TIMER_MODE_PERIOD);
// P15 管脚上生成一个 100ms 为周期,占空比为 50% 的 PWM
gx_timer_enable_pwm(15, 100000, 50000);
// 关闭 P15 上的 PWM
gx_timer_disable_pwm(15);
}
备注
fornax 管脚只能生成固定 timer 的 PWM,详情需要查看管脚的复用功能是否支持 PWM 功能