基于CC2640R2F的PWM开发

前言:将CC2640R2F中一个管脚设置成PWM模式,然后接一个有源蜂鸣器,这样能产生滴滴的声音,通过改变PWM的占空比或者频率能产生不同的滴滴声。接下来看我们如何实现。

初始化:我们用的是DIO5作为PWM脚

void HwPWMInit(void)
{
  PWM_init();
  PWM_Params_init(&PWMparams);
  //Buzzer
  PWMparams.idleLevel = PWM_IDLE_LOW;
  PWMparams.periodUnits = PWM_PERIOD_HZ;
  PWMparams.periodValue = 100;
  PWMparams.dutyUnits = PWM_DUTY_FRACTION;
  PWMparams.dutyValue = PWM_DUTY_FRACTION_MAX/2;
  PWMHandleBuzzer = PWM_open(CC2640R2DK_5XD_PWM0, &PWMparams);
}

有人可能有点纳闷,我们不是把IDO5作为PWM管脚,怎么没有具体看到怎么定义的,其实CC2640R2DK_5XD_PWM0是一个索引

typedef enum CC2640R2DK_5XD_PWMName {
    CC2640R2DK_5XD_PWM0 = 0,
    CC2640R2DK_5XD_PWM1,
    CC2640R2DK_5XD_PWM2,
    CC2640R2DK_5XD_PWM3,
    CC2640R2DK_5XD_PWM4,
    CC2640R2DK_5XD_PWM5,
    CC2640R2DK_5XD_PWM6,
    CC2640R2DK_5XD_PWM7,

    CC2640R2DK_5XD_PWMCOUNT
} CC2640R2DK_5XD_PWMName;

我们可以根据自己的需求定义多个PWM管脚,这里我们只定义一个。

PWMTimerCC26XX_Object pwmtimerCC26xxObjects[CC2640R2DK_5XD_PWMCOUNT];

const PWMTimerCC26XX_HwAttrs pwmtimerCC26xxHWAttrs[CC2640R2DK_5XD_PWMCOUNT] = {
    { .pwmPin = DIO5, .gpTimerUnit = CC2640R2DK_5XD_GPTIMER2A },      //管脚定义        
};

const PWM_Config PWM_config[CC2640R2DK_5XD_PWMCOUNT] = {
    { &PWMTimerCC26XX_fxnTable, &pwmtimerCC26xxObjects[CC2640R2DK_5XD_PWM0], &pwmtimerCC26xxHWAttrs[CC2640R2DK_5XD_PWM0] },
};

const uint_least8_t PWM_count = CC2640R2DK_5XD_PWMCOUNT;

这样我们就完成了PWM的初始化。

改变频率:PWM_setPeriod(PWMHandleBuzzer, 450); 

//周期越大,频率越小,蜂鸣器越低沉
//周期越小,频率越大,蜂鸣器越高昂

改变占空比:int_fast16_t PWM_setDuty(PWM_Handle handle, uint32_t duty);

打开PWM: PWM_start(PWMHandleBuzzer);

关闭PWM: PWM_stop(PWMHandleBuzzer);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值