STM8S PWM 应用 呼吸灯

2020-01-13来源: eefocus关键字:STM8S  PWM  呼吸灯

//主功能接受:使用MCU STM8S105C6 的PWM通道2 PC2 来做呼吸灯 已经验证OK,呵

//呵,这个PWM设置刚开始用还是有点麻烦,因为是自己摸索,花点时间,还是攻克了。

//所用子函数都是调用STM8S的库函数stm8s_tim.c中的。


宏定义:

//分频宏

//计数器的时钟频率(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1)。

#define  TIM1_PRESCALER_1    ((u16)0x00)

#define  TIM1_PRESCALER_2    ((u16)0x01)

#define  TIM1_PRESCALER_3    ((u16)0x02)

#define  TIM1_PRESCALER_4    ((u16)0x03)

#define  TIM1_PRESCALER_5    ((u16)0x04)

 

 

// PWM 频率设定

#define MDIV2

//16M 2分频的设置

#if defined(MDIV2)

#define TIM1_DIV_SET TIM1_DIV2

#define PWMFRE_8KHZ  1000//主频率 16M/2=8M 1/8K=1/8M*1000 周期 0.125us

#define PWMFRE_4KHZ  2000

#define PWMFRE_2KHZ  4000

#define PWMFRE_1KHZ  8000

#define PWMFRE_05KHZ  16000

#define PWMFRE_025KHZ  32000

#define PWMFRE_020KHZ  40000//200HZ 周期5000us /0.125 =40000

#define PWMFRE_38KHZ  210//用于红外38KHZ载波

#define PWMFRE_OPEN   70//1/3的PWM占空比

#else

//16M 不分频的设置

#define TIM1_DIV_SET TIM1_DIV1

#define PWMFRE_8KHZ  2000

//1/8K=1/16M*2000

#define PWMFRE_4KHZ  4000

#define PWMFRE_2KHZ  8000

#define PWMFRE_1KHZ  16000

#define PWMFRE_05KHZ  32000

#define PWMFRE_025kHZ  64000

#define PWMFRE_38KHZ  421//用于红外38KHZ载波

#define PWMFRE_OPEN   140//1/3的PWM占空比

#endif

//初始化调用:

 

TIM1_PrescalerConfig(TIM1_PRESCALER_2,TIM1_PSCRELOADMODE_IMMEDIATE);

//1分频即不分配 允许事件更新

TIM1_OC2Init

 

(TIM1_OCMODE_PWM1,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_ENABLE,

             0,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH,

             TIM1_OCIDLESTATE_SET,TIM1_OCNIDLESTATE_SET);

//PWM1模式 

 

TIM1_CounterModeConfig(TIM1_COUNTERMODE_UP);//向上计数模式

TIM1_ARRPreloadConfig(ENABLE);//重新预装载使能

TIM1_OC2PreloadConfig(ENABLE);//比较器2预状态使能

 

 

TIM1_SetCounter(0);//初始化计数值

TIM1_SetAutoreload(PWMFRE_020KHZ);//0.125us周期 40*0.125=5us 200khz 周期

 

是5us 5/0.125

TIM1_SetCompare2(0);//占空比值

 

TIM1_CtrlPWMOutputs(ENABLE);//PWM控制使能

TIM1_Cmd(ENABLE);//使能TIM1计数

TIM1_CCxNCmd(TIM1_CHANNEL_2,ENABLE);//第二通道 输出使能

 

//主程序调用(10ms执行1次):

 

//更改占空比

 

if(F_ADD)

         {

            PWMVal += 100;

            if( PWMVal >= 2000)

            {

             

              F_ADD = 0;

              

            }

         }

         else

         {

            PWMVal -= 100;

            if( PWMVal <= 100)

            {

             

                F_ADD = 1;

              

            }

         }

          TIM1_SetCompare2(PWMVal);


关键字:STM8S  PWM  呼吸灯 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485477.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM8S TIM4库函数应用
下一篇:STM8的AWU应用体会

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm8s输入捕获
重装载的值,49ms中断    TIM1_CNTRH = 0xFF;    TIM1_CNTRL = 0xFF;       TIM1_CCER1_CC1E = 0;//禁止捕获使能    TIM1_CCMR1_CC1S = 1;//输入捕捉//采样频率f SAMPLING =f MASTER ,N=8 //捕获输入口上检测到的每个事件触发一次捕获    TIM1_CCER1_CC1P = 1;//1:捕捉发生在TI1F的低电平或下降沿     0:捕捉发生在TI1F的高电平或上升沿
发表于 2020-01-09
stm8s 实践课程之IAP设计编码(bootloader实现)
模式Normal Mode:这个模式主要作用为检测主程序是否有效,如果有效则进行程序跳转进入主程序,否则进行下一个模式的检测。这边建议在主程序控制LED指示灯以其他的频率(例如500ms或者1s)闪烁,以示区别。3.等待模式Wait Mode:如果上述两种模式都不满足,则停留在这个模式。这个模式主要作用为循环检测串口数据,如果有收到数据则进行解析,满足升级模式的进入条件则转到升级模式。该模式下,LED指示灯闪烁速率为200ms。程序流程框图如下:2.1.正常模式从之前的程序流程图可以看出,我们已经将stm8s的flash分为了Bootloader和Main APP,所以如果没有接到烧录指令且Main APP的flash区域已经有了正常的
发表于 2020-01-07
stm8s 实践课程之IAP设计编码(bootloader实现)
STM8s串口2异步基本收发使用说明
学到定时器部分时,想要将调试信息输出,故先把串口基本功能学了,才能方便后面的调试。使用某宝上买的STM8S最小系统板,外部晶振为8MHz的。HSI的误差对串口波特率影响比较大,这里使用外部晶振。开发板芯片是105K4的,只有UART2,这里把UART2的整体框图放在下面,蓝色矩形框是串口异步基本收发所用到的寄存器,可以看到,所要用到的寄存器很少。这里先说下如何计算波特率以及误差多少:官方手册已经给出:这里我使用的波特率为9600bps,然后主时钟为8M,这样分频因子为8M/9600约等于833=0x341,计算的波特率为8M/833=9603.8,误差为(9603.8-9600)/9600*100%约等于0.04%。如何配置串口
发表于 2020-01-07
STM8s串口2异步基本收发使用说明
关于STM8S的UART2串口的学习记录以及使用经验
前言这是本人第一次接触STM8S单片机,所以记录一下,方便日后查找。正文Uart2串口作为STM8S的标准串口之一,它的作用就是以有线连接的方式为STM8S单片机提供对外通讯的通道。初始化要想使用串口的第一步就是要完成对串口相关引脚的初始化以及串口本身的初始化。具体代码如下:GPIO_DeInit(GPIOD);GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);   UART2_DeInit();UART2_Init(115200
发表于 2020-01-07
STM8学习笔记---读取STM8S003单片机序列号
最近做项目时需要用到单片机的序列号,于是查了一下STM8S003单片机UID读取的方法。读取UID方法大概分两种,一种是直接在地址中读取,一种是通过定义一个联合体,将联合体的起始地址设置在UID起始地址处,在初始化的时候直接将UID号存入联合体中。关于UID的描述,官方资料如下:STM8S003F3芯片Unique ID的首地址为0X4865,连续读取后十二字节数据即为STM8S003F3芯片Unique ID。有些STM8S系列的芯片Unique ID首地址不是0X4865,STM8S105系列芯片Unique ID首地址为0X48CD。接下来看一下UID的读取方法:一:直接从UID收地址开始读取12个字节#define
发表于 2020-01-02
STM8S003单片机串口通信通信协议分析
最近在用STM8S003这个片子做项目,在做串口通信的时候,发现以前写的协议太简单了,项目中用不适合。//协议 : 0XDD xx xx  xx xx xx xx  0XAA  @far @interrupt void UART1_Receive(void) {unsigned char res;res=UART1_DR;if(res==0xDD)       //头{Rec_statu=1;     //标志开始接收Rec_Cnt=0;Rec_End=0;return;}if(res==0xAA) 
发表于 2019-12-27
小广播
何立民专栏 单片机及嵌入式宝典

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

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