平台:KEIL5+stm32f103。
功能:采用TIM3的1,2通道的比较翻转模式产生宽度可调的单脉冲(本例的脉冲宽度200us/100us),脉冲之间间隔1s。
目前网上流传较多的方案一般2种:第一种:外部IO做触发源,定时器接收后产生脉宽;第二种:用定时器的主从或门控模式,用一个定时器驱动另外一个定时器。这两种方案要么需要外部IO,要么需要2个通用或高级的定时器,占用资源相对较多。本方案使用一个高级活通用定时器+系统滴答。系统滴答做这一件事同时还可以执行其他计时任务,总的来说,占用资源相对较少。
#define TIMER3_OCTOGGLE_FREQUENCY (uint32_t)1000000 //MHz,OCToggle模式下计时时钟
//翻转频率 = TIMER3_OCTOGGLE_FREQUENCY/Timer3_PWM_CCR1_Val
uint16_t Timer3_PWM_CCR1_Val = 100;//翻转频率 = 方波频率*2
uint16_t Timer3_PWM_CCR2_Val = 50;
void TIMER3_OCToggleMode_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
uint16_t Timer3_PWM__PrescalerValue = 0;
/* PCLK1 = HCLK/4 */
RCC_PCLK1Config(RCC_HCLK_Div4);