打印
[Cortex-M0技术交流]

RyanHsiung学习第五贴, 呼吸灯!

[复制链接]
2674|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ryanhsiung|  楼主 | 2011-10-15 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Ryanhsiung 于 2011-10-15 11:14 编辑

虽然说呼吸灯比较简单,但一直没有玩过,正好有这个资源顺带玩一下! 先感谢一下 “lixiaoxu2meng”这兄弟的例程真是全,没有他的范例我没有怎么快写出来!
PWM设置的设置是照着例程做的,小做修改。
PWM库很直观,但是封装了底层,若在高速可变 频率的PWM,不能用库函数去设置,一定手动对寄存器进行操作 特别是DrvPWM_SetTimerClk这个函数。

配置代码:
void PWM0_Configuration(void)
{
        S_DRVPWM_TIME_DATA_T sPt;
        DrvSYS_SelectIPClockSource(E_SYS_PWM01_CLKSRC,0);         // 使用外设时注意必须设置该外设的时钟 设置PWM01的时钟源为外部12MHZ
        //PWM Timer property
        sPt.u8Mode = DRVPWM_AUTO_RELOAD_MODE;                                 // 自动重载模式
        // PWM 频率 为100HZ即10000us为一周期 CNR != u32Frequency,DrvPWM_SetTimerClk会根据我们相应的配置自己求出 CNR
        sPt.u32Frequency = 100;                                                        
        // 占空比 u8HighPulseRatio        CMR != u8HighPulseRatio,DrvPWM_SetTimerClk会根据我们相应的配置自己求出 CMR
        sPt.u8HighPulseRatio =25;                                                         // 高脉冲宽度时间所占周期的百分比: 25%*/
        sPt.i32Inverter = 0;                                                                 // 反向关闭
        DrvPWM_Open();                                                                                 // 打开 PWM 时钟并且复位PWM
        //DrvPWM_SelectClockSource(DRVPWM_TIMER0, DRVPWM_EXT_12M);//设置PWM 定时器0 为外部12 MHz crystal 时钟

        DrvPWM_SetTimerClk(DRVPWM_TIMER0, &sPt);                         // 配置PWM 定时器0的一些参数 如配置频率/脉冲/模式/逆转功能
               
        DrvPWM_SetTimerIO(DRVPWM_TIMER0, 1);                                 // 使能或关闭PWM定时器0对应的IO口输出使能
        //不能使用 SYS->GPAMFP.GPA_MFP12 = 1;(没有定义 GPA_MFP12),也不能使用DrvGPIO_InitFunction(E_FUNC_PWM01);  这个函数操作了两个I0
        outpw(&SYS->GPAMFP, inpw(&SYS->GPAMFP) | (0x01<<12));// 指定多功能引脚 即 PA12为PWM0

        DrvPWM_Enable(DRVPWM_TIMER0, 1);                                         // 使能/关闭PWM定时器0
}void PWM_Configuration(void){        PWM0_Configuration();        printf("PWM 初始成功!!\n");}



改变占空比 实现亮暗变化  这个放由SYSTICK定时调用! 大家也可以让它由其它事件调用
void   PWM_Light(void)
{
        static uint8_t flag = 1;                                                // 标志位,用于变亮还是变暗
        static uint32_t cmr = 0;                                // 计数
        if(flag == 1)                                                //  变亮
        {
                if(cmr++ >= 998)
                {
                   flag =0        ;
                }
        }
                else                                                        //  变暗
                {       
                        if(cmr-- <= 1)
                        {
                           flag = 1         ;
                        }
                }
        PWM_AdjustDuty(0, cmr ,999) ;                //  这个是直接设置CNR CMR 的值,频率 = F主频/分频/(CNR+1)
}


变更占空比的函数:
void PWM_AdjustDuty(uint8_t pwm,uint16_t cmr,uint16_t cnr)
{
        switch(pwm)
        {
          case 0:
          {               
                PWMA->CMR0   = cmr;                    //修改占空比
                PWMA->CNR0   = cnr;                    //修改占空比
          }break;
          case 1:
          {                                                                          
                PWMA->CMR1   = cmr;                    //修改占空比
                PWMA->CNR1   = cnr;                    //修改占空比
          }break;
          case 2:
          {                                                          
                PWMA->CMR2   = cmr;                    //修改占空比
                PWMA->CNR2   = cnr;                    //修改占空比
          }break;
          case 3:
          {                                                         
                PWMA->CMR3   = cmr;                    //修改占空比
                PWMA->CNR3   = cnr;                    //修改占空比
          }break;
          default:break;
        }
}  

相关帖子

沙发
Ryanhsiung|  楼主 | 2011-10-15 11:16 | 只看该作者
本帖最后由 Ryanhsiung 于 2011-10-15 11:18 编辑

M0 PWM缺点: 不能映射Timer、PWM端口,且只能使用固定TIMER和固定的IO,灵活性不高!
对于PCB布板,及程序后续增加PWM功能 十分不便!

使用特权

评论回复
板凳
lixiaoxu2meng| | 2011-10-15 16:14 | 只看该作者
板凳 :lol

使用特权

评论回复
地板
x181084431| | 2011-10-16 21:14 | 只看该作者
顶,给分

使用特权

评论回复
5
564451696| | 2011-10-25 09:36 | 只看该作者
这个要顶。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:道阻且长,行则将至!

64

主题

4654

帖子

14

粉丝