通过仔细看stm8参考手册里有关pwm这一节,我们可以根据手册上的讲解,很容易配置出来一个pwm通道。
具体讲解下,首先看参考手册17.5.7 pwm模式这一节,这一节是针对TIM1定时器来实现的pwm:
通过看这些内容,我们知道如下信息:
1:设置TIM1_ARR寄存器设定频率,TIM1_CCR1确定占空比;
至于为何通过TIM1_ARR来设定寄存器频率,可以参考如下图:
看完上图就知道这个计数器的频率公式为:
F = 时钟频率/(预装载计数+1)
2:TIM1_CCMR1寄存器的OC1M位写入110或者111来确定PWM模式1或者2,而且,必须设置TIM1_CCMR1寄存器的OC1PE位使能预装载寄存器,也可以设置TIM1_CR1寄存器的ARPE位使能自动重装预装载寄存器;
3:必须通过设置TIM1_EGR寄存器的UG位来初始化寄存器。
知道如上信息后,我们针对TIM1的通道3设置为pwm,占空比位50%,代码如下:
#include <stm8s003f3p6> #ifndef BIT #define BIT(n) (1<<(n)) #endif void pwm320k(void) { TIM1_CR1 &= ~BIT(0); //关闭TIM1 // TIM1_PSCRH = 0; TIM1_PSCRL = 0; //不分频16MHz // TIM1_ARRH = 0; TIM1_ARRL = 49; //16MHz/(49+1) = 320KHz // TIM1_CR1 |= BIT(7); //使能ARP TIM1_EGR |= BIT(0); //更新TIM1,使PSC有效 // TIM1_CCR3H = 0; TIM1_CCR3L = 25; //占空比50% // TIM1_CCMR3 = 104; //配置TIM1_CH3为PWM1模式输出 // TIM1_CCER2 |= BIT(0); //使能TIM1_CH3通道 // TIM1_CR1 |= BIT(0); //使能TIM1 TIM1_BKR |= BIT(7); //禁止刹车 } //***********端口配置******************/ void IO_Config(void) { //接收端led定义 PC_DDR |= 0X08; //设置PA3端口为输出模式 PC_CR1 |= 0X08; //设置PA3端口为推挽输出模式 } /***********************************/ void main() { IO_Config(); while (1) { pwm320k(); } }
文章的脚注信息由WordPress的wp-posturl插件自动生成