1、定时器可以使用系统内部的mcuclk,也可以通过管脚使用外部输入的时钟源
2、GD32H7怎么使用外部的源来驱动定时器呢
3、GD32H7通用定时器的框图如下:
这是官方手册上的图,不得不说,画的不够详细,只是一个大概的框图,内部细节完全不知。具体的通路如下:
4、选择与配置:
我们选择这个模式
看寄存器TSCFG6[4:0],,说明如下:
滤波后的通道只有0,1啊,没有2,3通道。
所以CH2,CH3通道没法选择,实测也是这样,选择2通道时,定时器无法正常工作,在这里调试浪费了很多时间,大坑啊
5、代码
1》配置外部管脚属性:Timer3的CH1通道,映射到PD13上
2》配置定时器,通用的
3》配置通道采样属性
4》选择通道和模式:这里选择CI1通道,外部事件0模式
具体的:
//输入频率引脚配置,选择PD13-af2,作为定时器3的ch1通道为时钟输入源rcu_periph_clock_enable(RCU_GPIOD);gpio_mode_set(IO_MCUTM3_ExTCLK_Port, GPIO_MODE_AF, GPIO_PUPD_NONE, IO_MCUTM3_ExTCLK_Num);gpio_output_options_set(IO_MCUTM3_ExTCLK_Port, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, IO_MCUTM3_ExTCLK_Num);gpio_af_set(IO_MCUTM3_ExTCLK_Port, GPIO_AF_2, IO_MCUTM3_ExTCLK_Num); //TIMER3_CH1//timer2timer_parameter_struct timer_initpara;rcu_periph_clock_enable(RCU_TIMER3); //开时钟,(TM1是CK_APB1;TM0是CK_APB2)*1/2/4,最大是300Mrcu_periph_clock_enable(RCU_SYSCFG);// nvic_irq_enable(TIMER1_IRQn, 2, 0); //设置中断优先级timer_deinit(STP_Timer);/* TIMER configuration */timer_struct_para_init(&timer_initpara);//timer_initpara.prescaler = 19999; //预分频值,300M/20k = 300 000 000 /20 000 = 300 000/20 = 15 000HZ=15khztimer_initpara.prescaler = 999;//29999; //10k,1个clk周期100ustimer_initpara.alignedmode = TIMER_COUNTER_EDGE; //边沿对齐timer_initpara.counterdirection = TIMER_COUNTER_UP; //往上++计数,从0+到19999共 20000个周期//timer_initpara.period = 14999; //周期?:10000/15k=666.6667mstimer_initpara.period = (15000 - 1); //中断1s钟,1.5s试试:配置的是自动重装寄存器CARtimer_initpara.clockdivision = TIMER_CKDIV_DIV1; //clk分频系数,1分频timer_initpara.repetitioncounter = 200; //更新事件的产生速率,重复计数器计数值减为 0 时产生更新事件,TM1好像没有,这里无需配置timer_init(STP_Timer, &timer_initpara); //600多ms的中断/* TIMER3 CH1 input capture configuration */timer_ic_parameter_struct timer_icinitpara;//timer_channel_input_struct_para_init(&timer_icinitpara);timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING;timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;timer_icinitpara.icfilter = 0x01;timer_input_capture_config(STP_Timer, TIMER_CH_0, &timer_icinitpara);/* slave mode selection : TIMER3 *//* TIMER3 input trigger : external trigger connected to CI1*/timer_input_trigger_source_select(STP_Timer, /*TIMER_SMCFG_TRGSEL_CI0FE0*/TIMER_SMCFG_TRGSEL_CI1FE1);timer_slave_mode_select(STP_Timer, TIMER_SLAVE_MODE_EXTERNAL0);/* auto-reload preload enable */timer_auto_reload_shadow_enable(STP_Timer);/* auto-reload preload enable */timer_enable(STP_Timer);
这里没有配置中断,可以自己添加中断使能