测试平台: STM32F030C8T6
固件库: STM32F0xx_HAL_Driver
固件库中提供了一个通过PWM输入模式测量频率和占空比的Demo,采用定时器中断实现,测量频率时中断过于频繁,虽然可以通过设置多个待测信号周期产生一次定时器中断,来降低中断频率,但是这种方式测量出来的频率和占空比会出现跳动,数据不是很稳定。
改进方案:用PWM输入模式,将IC1和IC2的获取,由定时器中断方式,改为DMA方式。可以降低频繁中断引起的系统开销,同时测量的数据更稳定。
代码中使用的宏定义如下
#define TIMx TIM1
#define TIMx_CLK_ENABLE() __HAL_RCC_TIM1_CLK_ENABLE()
#define DMAx_CLK_ENABLE __HAL_RCC_DMA1_CLK_ENABLE
#define TIMx_CHANNEL_GPIO_PORT() __HAL_RCC_GPIOA_CLK_ENABLE()
#define GPIO_PORT GPIOA
#define GPIO_PIN_CHANNEL2 GPIO_PIN_9
#define GPIO_AF_TIMx GPIO_AF2_TIM1
#define GPIO_PIN_CHANNEL1 GPIO_PIN_8
1. 配置并初始化TIM
TimHa