蓝牙BLE---DA14683的PWM操作

版权声明:转载请注明出处。技术交流加微信:life5270 https://blog.csdn.net/JaLLs/article/details/84324229

DA14683的PWM操作

Date: 2018.11.12

Create: Jim

工程例程

我们打开开发环境,导入以下Demo:

这个Demo有所有外设的使用例程。

初始化定时器PWM

找到 peripherals_demo->demos->demo_timer2.c

以下是demo程序使用定时器PWM的关键接口:

void demo_timer2_init(void)

这个函数主要把PWM参数置0

然后设置Timer2的时钟分频为4,这里系统时钟是16M,4分频就是4M.

再调用hw_timer2_set_frequency(100);把PWM输出频率设置为40K,计算方法是:

Fre=(sys_clock/div/100)

假设不改变系统时钟和分频的情况下,我们要把PWM输出频率设置为10K,则只要把

hw_timer2_set_frequency这个函数传入的形参改为400即可。

PWM输出参数修改

修改PWM输出频率

当我们初始化完PWM参数以后,如果想修改PWM输出频率,可以直接调用以下接口:

hw_timer2_set_frequency(pwm_freq);

pwm_freq参数的使用为:

Fre=(sys_clock/div/pwm_freq)

修改PWM输出占空比

修改PWM引脚的输出占空比,可以调用以下函数实现:

 

 

 

 

 

 

 

通道选择

HW_TIMER2_PWM是TIMER2的PWM输出通道选择,可选通道如下:

TIMER2总共有三个PWM通道,在DA14683的DateSheet中可以找到相关描述:

在参考原理图中,这三个引脚是以LED123的形式标注出来的,如果我们项目中并未使用到TIMER2的PWM,我们可以把这三个引脚当普通GPIO口来用,分别对应P2_5,P2_6,P2_7

 

占空比

void hw_timer2_set_pwm_start_end(HW_TIMER2_PWM pwm, uint16_t start, uint16_t stop)

这个函数的后面两个形参分别代表PWM在一个周期内开始输出高电平和结束高电平的时间。

如果我们的PWM输出频率是10K,那么就代表一秒震动10000次,即0.1ms一个周期。

如果uint16_t start这个型参传入的是0

uint16_t stop 传入的是pwm_freq_q

(pwm_freq_q = hw_timer2_get_frequency() / 4; // 1/4占空比)

注:hw_timer2_get_frequency()这个函数是获取当前PWM频率的函数。

那么PWM对应通道的输出就是从周期起始处开始输出高电平。

如果start形参传入的是5,stop形参传入的是pwm_freq_q(25)

那么PWM对应通道的输出就是从周期1/5处开始输出高电平。

需要更详细的说明可以参考以下SDK中的说明:

到此,我们的占空比修改就结束了。

 

暂停PWM输出

用户可以调用以下接口来暂停PWM输出:

hw_timer2_set_sw_pause(true);

取消暂停则传入形参false,如下:

hw_timer2_set_sw_pause(false);

 

检擦当前PWM状态

static inline bool hw_timer2_get_sw_pause(void)

调用这个接口可以检查当前PWM是输出状态还是暂停状态。

 

猜你喜欢

转载自blog.csdn.net/JaLLs/article/details/84324229