通过仔细看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插件自动生成


微信扫一扫,打赏作者吧~![[整理]三极管驱动继电器](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2014/02/11.jpg&w=280&h=210&zc=1)


