STM8S PWM 应用 呼吸灯

发布者:SerendipityJoy最新更新时间: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  呼吸灯 引用地址:STM8S PWM 应用 呼吸灯

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

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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