STM8S003 STM8S103 PWM实现

发布者:美好梦想最新更新时间:2021-10-14 来源: eefocus关键字: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%,代码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include
 
#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 引用地址:STM8S003 STM8S103 PWM实现

上一篇:STM8S103 IO口控制
下一篇:STM8使用TIM1测量PWM波

推荐阅读最新更新时间:2024-11-12 10:21

PIC单片机输出比较(PWM)模块介绍
在Android红外遥控器项目中使用了输出比较OC1(PWM)模块来产生38KHz PWM脉冲,脉冲占空比与红外信号发射距离以及产品功耗有关。其中占空比越大,发射距离越远,功耗越大。红外载波的占空比一般在1/3左右。 将输出比较模块配置为PWM 操作,需要以下步骤: 1.将OCx输出配置为可用的外设引脚选择引脚之一。 2.计算所需的占空比并将计算结果装入 OCxR 寄存器。 3.计算所需的周期并将计算结果装入 OCxRS 寄存器。 4.选择当前的 OCx 作为同步源,方法是把 0x1F写入SYNCSEL 4:0 (OCxCON2 4:0 ),把 0 写入OCTRIG (OCxCON2 7 )。 5.通过写 OCTSEL2 2:
[单片机]
基于STM32F103的四路PWM配置程序及个人见解
平台:STM32F103系列 内容:生成四路PWM波 1、初始化配置 void Pwmpin_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Spee
[单片机]
手把手教你基于RT-Thread Studio使用STM32单片机的PWM外设
一、使用说明 目前我使用的是STM32L475系列单片机,是ali当时在PDD 50块钱卖的一个开发板,其他STM32单片机参考即可,这里会手把手教大家基于RTT Studio 来使用PWM。 二、创建工程 1.创建工程 首先大家打开RT-Thread Studio 来基于单片机创建工程。点击左上角文件,新建 RT-Thread项目 Project name就是项目名称,如果大家想自定义路径保存,就取消掉缺省位置然后自定义路径。 2.芯片参数设置 选择基于芯片,下面的参数需要大家根据自己的主板来选择,我这个板子 使用LPUART作为CMD输出,单片机型号,下载器比如JLINK或者STLINK等等都需要自己适配开发板。
[单片机]
手把手教你基于RT-Thread Studio使用STM32单片机的<font color='red'>PWM</font>外设
使用内部计时器中断产生PWM调速
当计时器产生第二次中断时,程序会第二次执行中断服务程序,同样首先执行判断语句if(t==0){tmp1=m1;},由于这时t值已经在第一次中断并执行中断服务程序时被加 1 ,也就是说t的值现在等于 1 ,因此tmp1=m1语句不被执行,tmp1的值仍然保持它原来的值 70 。接下来执行判断语句if(t tmp1)en1=1;else en1=0;,由于tmp1的值保持 70 ,因此t tmp1条件为真,en1=1,即en1仍然保持为高电平 1 。接下来执行无条件语句t++,t的值被加 1 。再接下来执行判断语句if(t =100) t=0;,这时t的值被加 1 后等于 2 ,但条件t =100仍然为假而t=0语句不被执行,即
[单片机]
TIMER之pwm应用
TIMER之pwm应用 //TIM3 PWM部分初始化 //PWM输出初始化 //arr:自动重装值 //psc:时钟预分频数 //PB5,TIMER3_CH2 void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; //GPIO 结构体初始化 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //基本定时器结构体初始化 TIM_OCInitTypeDef TIM_OCInitStructure; //output compare 结构体初始化
[单片机]
基于tiny4412的Linux内核移植 -- PWM子系统学习(七)
平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) 概述 Exynos4412一共可以输出4路PWM(timer0、timer
[单片机]
基于tiny4412的Linux内核移植 -- <font color='red'>PWM</font>子系统学习(七)
PWM调制中的死区问题
  “死区”的概念,必须记录下来,网上收集的,拿来主义下,有用的上的时候。   PWM 脉宽调制 在电力电子中,最常用的就是整流和逆变。这就需要用到整流桥和逆变桥。以两电平为例,每个桥臂上有两个电力电子器件,比如igbt。这两个igbt不能同时导通,否则就会出现短路的情况。因此,设计带死区的PWM波可以防止上下两个器件同时导通。也就是说,当一个器件导通后关闭,再经过一段死区,这时才能让另一个导通。   死区,通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半
[电源管理]
STC单片机输出可调的pwm
第一步:首先是要配置相关的PCA寄存器 比如我们配置CCP0引脚输出PWM。 // PCA0初始化 AUXR1 &= ~0x30; AUXR1 |= 0x10; //切换IO口, 0x00: P1.2 P1.1 P1.0 P3.7, 0x10: P3.4 P3.5 P3.6 P3.7, 0x20: P2.4 P2.5 P2.6 P2.7 CCAPM0 = 0x42; //工作模式 PWM PCA_PWM0 = (PCA_PWM0 & ~0xc0) | 0x00; //PWM宽度, 0x00: 8bit, 0x40: 7bit, 0x80: 6bit CMOD = (CMOD & ~0xe0) | 0x08
[单片机]
STC单片机输出可调的<font color='red'>pwm</font>

推荐帖子

热电偶测量线路处于断路时的问题
请教各位大侠,如果热电偶测量线路处于断路状态,怎么才能让测量电路有所指示?热电偶测量线路处于断路时的问题请问LZ的问题解决了没
绿茶 测试/测量
如何提高运放的抗干扰(辐射)能力
我是用ADA4528来做300倍的信号放大,特性如下:正常的放大信号波形如下:但是在设备周围打电话时,信号就会受到干扰我检查过运放的供电了,基本没有受到干扰,非常稳定;应该是辐射耦合进了运放的输入端,又被放大了300倍,请问大家:有没有什么手段可以解决这种现象?除了注意PCB布局,结构屏蔽,在原理图设计阶段可以加入什么抑制手段?如何提高运放的抗干扰(辐射)能力“但是在设备周围打电话时,信号就会受到干扰”是使用手机吧?有线电话不会产生这种现像的。 是的,就是手机
sfcsdc 模拟电子
基于PIC单片机的仿生机器鱼的舵机控制
  仿生机器鱼实验平台属于教育部和北京邮电大学共同出资支持的一项“国家级大学生创新性实验计划”项目,是一个集光、机、电、流体、智能于一体的实验平台,研究内容包括:仿生机器鱼机械结构的研究,推荐效率的研究以及控制性能的研究。  1仿生机器鱼平台简介:  设计制作的机器鱼模仿鲹科鱼类的外形,头部采用刚性结构的塑料材料。其形状采用流线型,模仿真鱼鱼头的形状和大小比例。在鱼头的内部空间里安装电源及控制电路,并在鱼头两侧鱼眼处及在头前部的偏下侧安装了3个红外传感器,构成了一个探测左、前、右
hikesoso2010 Microchip MCU
发帖发问一个bootloader问题并邀请学习6410,PXA3XX等高级货的同志了!
这几天看了6410的eboot,并对nk.bin以及nk.nb0文件重新了解了一下,发现了很多疑问。主要是我以前一直用ADSbootloader,现在觉得两者有不可思议的差别。一、ADSbootloader没有拷贝全局变量到RAM的行为,但是eboot.nb0有——但是这两个格式的二进制文件都能在内存直接跑。这些只能用编译器不同,两个格式文件稍有差异来解释。二、eboot下载的是bin文件,但是烧写的一定是nb0文件,我没有找到解析bin文件成为nb0文件的地方,各位达人,知道在哪里的
kacanmmx 嵌入式系统
Hercules DIY 十一:第二路调试成功
我这个没有加LED,因为我调第二路很紧张,大家在看时注意听声音。我是用声音指示好不好用地http://v.youku.com/v_show/id_XNTk2MDA5MzA4.html现在两路都好用了,报警器的功能基本完成。有许有人会问报警器传感器整的这么复杂做什么,为什么不象坛子里有人印度姐那个方案。其实答案非常简单----实用。那个方案我也做过但有一点让我没采用。传感器的耗电问题非常地大。 HerculesDIY十一:第二路调试成功这个有意思,不错嘛:rose:
ddllxxrr 微控制器 MCU
MSP430矩阵及独立键盘
在学习MSP430的时候,总是有很多东西记不住,同时又是英文的资料,好多东西也是没怎么看透,英文虽过六级但是看英文资料还是有一种想睡的冲动啊,在学习键盘的时候,我的这块板子有些不同,矩阵键盘和独立键盘公用的,组合式的按键。。这是为了节约硬件的成本啊。。。    #definekeyin(P1IN&0x0f)//低四位保持不变,高4位清零,这个宏定义就是这个意思。再写主函数的时候有这个语句:P1DIR=BIT7;//设置P1.0~P.3为输入
Aguilera 微控制器 MCU
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved