在使用 PWM TIM2 CH1、CH3 修改
1. 在使用stm8s系列的单片机的时候,使用的头文件大部分都是通用的stm8s.,第一步修改头文件:
/* Uncomment the line below according to the target STM8S or STM8A device used in your
application. */
/* #define STM8S208 */ /*!< STM8S High density devices with CAN */
/* #define STM8S207 */ /*!< STM8S High density devices without CAN */
/* #define STM8AF52Ax */ /*!< STM8A High density devices with CAN */
/* #define STM8AF62Ax */ /*!< STM8A High density devices without CAN */
/* #define STM8S105 */ /*!< STM8S Medium density devices */
/* #define STM8AF626x */ /*!< STM8A Medium density devices */
#define STM8S103 /*!< STM8S Low density devices */
/* #define STM8S903 */ /*!< STM8S Low density devices */
2. 取消stm8s103的注释,103和003的寄存器地址都是一样的,所以我们这里用103替代003.
3. 引脚使用PWM功能时无需配置GPIO状态,直接配置寄存器即可。例如TIM2的库函数配置如下:
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 7999); /* 1分频 ,计数值8000,频率=16M/8000=2kHZ */
/* PWM1 Mode configuration: Channel1 */
TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%*/
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
/* PWM2 Mode configuration: Channel2 */
TIM2_OC2Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC2PreloadConfig(ENABLE);
/* PWM3 Mode configuration: Channel3*/
TIM2_OC3Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC3PreloadConfig(ENABLE);
TIM2_Cmd(ENABLE);
4. 配置完成后,调试输出2kHz 占空比为25%的PWM波,如下图所示:
2. TIM1三通道输出PWM电话实例:
CLK->CKDIVR= 0x00; //内部16M时钟不分频
TIM2->PSCR = 0x00; // T预分频系数为
1IM2->CR1 = 0x01; //实测能;
TIM2->ARRH = 0频0分00K,16M/320=5x00K,49.7K
TIM2->ARRL = 0x8a;//实测自动位;通道0013e为0.0K
/*PWM1*/
TIM2->CCER1 |= 0x01; //开启OC1信号输出脚
TIM2->CCMR1 = 0x60; //PWM1模式
TIM2->CCR1H = 0x00; //占空比
高位TIM2->CCR1L = 0x37; //占空比低位
TIM2->CCMR1 |= 0x08; //输出比较预加载能力
/*PWM2通道设置*/
TIM2->CCER1 | 0x10; //开启OC2信号输出脚
TIM2->CCMR2 = 0x60; //PWM1模式
TIM2->CCR2H = 0x00; //占空比
高位 TIM2->CCR2L = 0x37; //占空比低位
TIM2->CCMR2 |= 0x08; //输出比较2预充电能力
/*PWM通道设置*/
TIM2->CCER2 | 0x01;
TIM2->CCMR3 = 0x60;//PWM1模式
TIM2->CCR3H = 0x00; //占空比
高位TIM2->CCR3L = 0x37; //占空比低位
TIM2->CCMR3 |= 0x08; //输出比较3预装使能
TIM2->CR1 |= 0x01;
在使用 PWM TIM2 CH1、CH3 修改
1. 在使用stm8s系列的单片机的时候,使用的头文件大部分都是通用的stm8s.,第一步修改头文件:
/* Uncomment the line below according to the target STM8S or STM8A device used in your
application. */
/* #define STM8S208 */ /*!< STM8S High density devices with CAN */
/* #define STM8S207 */ /*!< STM8S High density devices without CAN */
/* #define STM8AF52Ax */ /*!< STM8A High density devices with CAN */
/* #define STM8AF62Ax */ /*!< STM8A High density devices without CAN */
/* #define STM8S105 */ /*!< STM8S Medium density devices */
/* #define STM8AF626x */ /*!< STM8A Medium density devices */
#define STM8S103 /*!< STM8S Low density devices */
/* #define STM8S903 */ /*!< STM8S Low density devices */
2. 取消stm8s103的注释,103和003的寄存器地址都是一样的,所以我们这里用103替代003.
3. 引脚使用PWM功能时无需配置GPIO状态,直接配置寄存器即可。例如TIM2的库函数配置如下:
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 7999); /* 1分频 ,计数值8000,频率=16M/8000=2kHZ */
/* PWM1 Mode configuration: Channel1 */
TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%*/
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
/* PWM2 Mode configuration: Channel2 */
TIM2_OC2Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC2PreloadConfig(ENABLE);
/* PWM3 Mode configuration: Channel3*/
TIM2_OC3Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC3PreloadConfig(ENABLE);
TIM2_Cmd(ENABLE);
4. 配置完成后,调试输出2kHz 占空比为25%的PWM波,如下图所示:
2. TIM1三通道输出PWM电话实例:
CLK->CKDIVR= 0x00; //内部16M时钟不分频
TIM2->PSCR = 0x00; // T预分频系数为
1IM2->CR1 = 0x01; //实测能;
TIM2->ARRH = 0频0分00K,16M/320=5x00K,49.7K
TIM2->ARRL = 0x8a;//实测自动位;通道0013e为0.0K
/*PWM1*/
TIM2->CCER1 |= 0x01; //开启OC1信号输出脚
TIM2->CCMR1 = 0x60; //PWM1模式
TIM2->CCR1H = 0x00; //占空比
高位TIM2->CCR1L = 0x37; //占空比低位
TIM2->CCMR1 |= 0x08; //输出比较预加载能力
/*PWM2通道设置*/
TIM2->CCER1 | 0x10; //开启OC2信号输出脚
TIM2->CCMR2 = 0x60; //PWM1模式
TIM2->CCR2H = 0x00; //占空比
高位 TIM2->CCR2L = 0x37; //占空比低位
TIM2->CCMR2 |= 0x08; //输出比较2预充电能力
/*PWM通道设置*/
TIM2->CCER2 | 0x01;
TIM2->CCMR3 = 0x60;//PWM1模式
TIM2->CCR3H = 0x00; //占空比
高位TIM2->CCR3L = 0x37; //占空比低位
TIM2->CCMR3 |= 0x08; //输出比较3预装使能
TIM2->CR1 |= 0x01;
1
举报