下面的代码是我依照网上的资料编写的GD32F303CBT6的输入捕获功能,使用的是PA0,和TIME4_CH0,PA0引脚已经输入1KHZ的50%的信号。
- #include "gd32f30x.h"
- #include "gd32f303c_start.h"
- #include "systick.h"
-
-
- void timer_config4(void);
-
-
- int main(void)
- {
-
- systick_config();
-
-
- rcu_periph_clock_enable(RCU_GPIOB);
-
- gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
-
- gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
- timer_config4();
-
- gpio_bit_reset(GPIOB, GPIO_PIN_1);
-
- while(1){
-
- gpio_bit_set(GPIOB, GPIO_PIN_1);
- delay_1ms(1000);
- gpio_bit_reset(GPIOB, GPIO_PIN_1);
- delay_1ms(1000);
- }
- }
-
-
- void timer_config4(void)
- {
-
-
-
-
- timer_ic_parameter_struct timer_icinitpara;
- timer_parameter_struct timer_initpara;
-
-
-
-
- rcu_periph_clock_enable(RCU_TIMER4);
- timer_deinit(TIMER4);
-
- nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
- nvic_irq_enable(TIMER4_IRQn, 1, 1);
-
- timer_struct_para_init(&timer_initpara);
-
- timer_initpara.prescaler = 71;
- timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
- timer_initpara.counterdirection = TIMER_COUNTER_UP;
- timer_initpara.period = 0xFFFF;
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
- timer_init(TIMER4, &timer_initpara);
-
-
-
- timer_channel_input_struct_para_init(&timer_icinitpara);
-
- timer_icinitpara.icpolarity = TIMER_IC_POLARITY_FALLING;
- timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
- timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
- timer_icinitpara.icfilter = 0x0;
- timer_input_capture_config(TIMER4, TIMER_CH_0, &timer_icinitpara);
-
-
-
- timer_auto_reload_shadow_enable(TIMER4);
-
-
- timer_interrupt_flag_clear(TIMER4, TIMER_INT_CH0);
-
- timer_interrupt_enable(TIMER4, TIMER_INT_CH0);
-
- timer_enable(TIMER4);
-
- }
-
中断代码
-
- void TIMER4_IRQHandler(void)
- {
- if(SET == timer_interrupt_flag_get(TIMER4, TIMER_INT_CH0)){
-
- timer_interrupt_flag_clear(TIMER4, TIMER_INT_CH0);
- timer_capture_num++;
- if(1 == timer_capture_num){
-
- timer_capture1 = timer_channel_capture_value_register_read(TIMER4,TIMER_CH_0);
- }else if(2 == timer_capture_num){
-
- timer_capture2 = timer_channel_capture_value_register_read(TIMER4,TIMER_CH_0);
-
- timer_interrupt_disable(TIMER4, TIMER_INT_CH0);
- timer_disable(TIMER4);
- }
- }
- }
-
该程序运行后就是无法进入中断,请做过的高手指点一下。
|