STM8S003 STM8S103 PWM实现

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: STM8S003 STM8S103 PWM实现

通过仔细看stm8参考手册里有关pwm这一节,我们可以根据手册上的讲解,很容易配置出来一个pwm通道。

具体讲解下,首先看参考手册17.5.7 pwm模式这一节,这一节是针对TIM1定时器来实现的pwm:

pwm

通过看这些内容,我们知道如下信息:

1:设置TIM1_ARR寄存器设定频率,TIM1_CCR1确定占空比;

至于为何通过TIM1_ARR来设定寄存器频率,可以参考如下图:

pwm_1

看完上图就知道这个计数器的频率公式为:

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();
	}
}
原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: STM8S003 STM8S103 PWM实现

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: