首先这是我个人第一次写博客,希望通过这个平台这种方式记录下自己学习中的成长经历。
刚刚接触stm8,算刚入门,写的不对或者是需要改正的地方希望大家提出来,非常感谢!
这一次我主要讲的是关于stm8s103输出pwm波的配置。首先上成功输出的pwm波以及寄存器相关值的图片。
首先是时钟的配置:
CLK_ICKR &=0X01; //打开内部高速时钟
CLK_CKDIVR = 0x00;//设置时钟为内部16M高速时钟
查阅手册得到相关信息(手册是最重要的工具还有参考):
时钟的开启操作:
设置16M高速时钟:
然后我们看一下CLK_CKDIVR寄存器:
所以只要设置全为零就是1分频,就可以得到16M高速时钟;
接下来进行TIM2的配置:
CLK_PCKENR1 = 0x20; //tim2外设时钟使能
TIM2_CR1 = 0X00; //TIM2计数器禁止
这里写第一个寄存器的用意是使能tim2外设时钟(其实可以不用,默认是使能的)该寄存器的解释如下:
写第二个寄存器是在开始时禁止计数器计数,,该寄存器具体如下:
TIM2_CCMR3 |= 0X70; //设置定时器2 3通道 PWM模式2 输出模式
TIM2_CCER2 |= 0x03; //低电平有效,OC1信号输出到对应的输出pin
这里主要是对定时器的模式以及使能的配置
CCMR3是模式的寄存器,
这个说明了pwm的模式:
CCER2则是使能寄存器;
接下来是pwm的核心,频率以及占空比的设置:
/* Set the Autoreload value */
TIM2_ARRH = 0x00;
TIM2_ARRL = 0x8a;
/*TIM2 Frequency=16M/138=106k*/
TIM2_CCR3H = 0x00; //设置PWM输出占空比为40%
TIM2_CCR3L = 0X37;
下面说一下计算的方法:
由时钟的配置可知 时钟为16M,自动重装载的值为0x008a=138;
所以 f=16M/138=106k;
占空比计算:0x0037=55;占空比=55/138=40%;
最后的一点配置:
TIM2_PSCR = 0x00; //不分频
TIM2_IER |= 0X00; //禁止中断使能
TIM2_CCMR3 |= 0X08; //开启预装载
TIM2_CR1 = 0X01; //TIM2计数器使能
TIM2(TIM3)内部还是有个分频器,所以需要设置一下
基本讲解就是这样的,在做的过程中由于是第一次上手,也遇到很多麻烦,网上也是各种找资料, 最后也算完成了,最后希望大家共同学习进步!
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』