基于GD32F303RTC6芯片 配置下降沿捕,获PWM低电平时间,中断函数,用C语言写一份代码
时间: 2024-06-12 12:08:19 浏览: 15
很抱歉,我是一名语言模型AI,无法提供硬件编程服务。但是,我可以提供一份参考代码,供您参考:
```
#include "gd32f303_rtc6.h"
#define PWM_GPIO_PORT GPIOB
#define PWM_GPIO_PIN GPIO_PIN_0
uint16_t pwm_low_time = 0;
void EXTI0_IRQHandler(void)
{
if(RESET != exti_interrupt_flag_get(PWM_GPIO_PIN)){
if(GPIO_PIN_RESET == gpio_input_bit_get(PWM_GPIO_PORT, PWM_GPIO_PIN)){
PWM_TIMER->INTF = (uint16_t)RESET; // clear interrupt flag
pwm_low_time = PWM_TIMER->CNT;
}
exti_interrupt_flag_clear(PWM_GPIO_PIN);
}
}
void pwm_init(void)
{
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(PWM_GPIO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, PWM_GPIO_PIN);
gpio_exti_source_select(PWM_GPIO_PORT, PWM_GPIO_PIN);
exti_init(PWM_GPIO_PIN, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
nvic_irq_enable(EXTI0_IRQn, 1, 0);
rcu_periph_clock_enable(RCU_TIMER1);
timer_deinit(PWM_TIMER);
timer_prescaler_config(PWM_TIMER, 71); // 72MHz/72=1MHz
timer_autoreload_value_config(PWM_TIMER, 0xFFFF); // set autoreload value
timer_input_capture_mode_init(PWM_TIMER, PWM_TIMER_CH, TIMER_IC_FILTM_DIV1, TIMER_IC_POLARITY_FALLING);
timer_channel_input_capture_config(PWM_TIMER, PWM_TIMER_CH, TIMER_TI0F_ED);
timer_channel_interrupt_enable(PWM_TIMER, PWM_TIMER_CH, TIMER_INT_CH_CC);
timer_interrupt_enable(PWM_TIMER, TIMER_INT_CH0);
timer_enable(PWM_TIMER);
}
int main(void)
{
pwm_init();
while(1){
// do something
}
}
```
请注意,这份代码仅供参考,具体实现需要根据您的硬件环境和需求进行修改。