image.png

    PWM模式一下,CNT小于CCRx时输出有效电平,大于CCRx时输出无效电平。PWM模式二反之。(有效电平要自行设置是高or低电平)

    一般配置步骤

    1. 使能定时器x和相关IO口时钟。
      1. 使能定时器x时钟:RCC_APB1PeriphClockCmd();
      2. 使能GPIOx时钟:RCC_APB2PeriphClockCmd();
    2. 初始化IO口为复用功能输出。函数:GPIO_Init();
      1. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    3. **根据需要是否重映射
    4. 这里我们是要把Pxx用作定时器x输出引脚,所以要重映射配置。(例子这里是部分重映射,自己使用时应当查表看是否需要重映射以及是什么重映射)
      1. 使能复用端口时钟: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
      2. 部分重映射(此处可根据需要省略): GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
    5. **/

    6. 初始化定时器:ARR,PSC等:TIM_TimeBaseInit();

    7. 初始化输出比较参数: TIM_OCxInit(); //(x为定时器的第x个通道)

    8. 使能预装载寄存器: TIM_OCxPreloadConfig(TIMx, TIM_OCPreload_Enable); //(x为定时器的第x个通道)

    / * 注释部分为需要开启中断时使用

    1. 使能指定的TIMx溢出中断中断,允许更新中断TIM_IT_Update: TIM_ITConfig(TIMx,TIM_IT_Update,ENABLE);
    2. 初始化NVIC中断优先级参数:NVIC_Init()
    3. 主函数main.c中要有中断优先级分组:NVIC_PriorityGroupConfig();

    */

    1. 使能定时器。TIM_Cmd();

    2. 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetComparex(); //(x为定时器的第x个通道)

    /*

    1. 编写中断服务函数 TIMx_IRQHandler();

    **/