蓝牙芯片nRF52832之PWM的使用

nRF52832蓝牙芯片,自带了3路PWM硬件模块,每个模块支持4路,总共支持12路PWM。在SDK15中提供了简化的API,能够快速、便捷的实现PWM功能。以驱动LED灯为例,介绍一下nRF5283在SDK15中PWM的使用步骤以及注意的问题。

SDK15 PWM的使用步骤

1. SDK 驱动配置中enable PWM模块

图1

2. 初始化PWM实例

	#include "nrf_drv_pwm.h"static nrf_drv_pwm_t m_pwm0 = NRF_DRV_PWM_INSTANCE(0);

3. 初始化配置

	nrf_drv_pwm_config_t const config0 ={.output_pins ={BSP_LED_0 | NRF_DRV_PWM_PIN_INVERTED, // channel 0BSP_LED_2 | NRF_DRV_PWM_PIN_INVERTED, // channel 1BSP_LED_3 | NRF_DRV_PWM_PIN_INVERTED, // channel 2BSP_LED_1 | NRF_DRV_PWM_PIN_INVERTED // channel 3},.irq_priority = APP_IRQ_PRIORITY_LOWEST,.base_clock = NRF_PWM_CLK_125kHz,.count_mode = NRF_PWM_MODE_UP,.top_value = 15625,.load_mode = NRF_PWM_LOAD_INDIVIDUAL,.step_mode = NRF_PWM_STEP_AUTO};APP_ERROR_CHECK(nrf_drv_pwm_init(&m_pwm0, &config0, NULL));

每路PWM硬件模块支持4个channel,nrf_drv_pwm_config_t中:

  • output_pins:映射PWM输出的pin脚号(spec上硬件的定义如P0.00,P0.01,00,01就是pin脚号,开发板中4个LED用的p0.17 - p0.20端口, 对应的pin脚号就是17-20);如果对应的通道没有硬件连接就使用NRF_DRV_PWM_PIN_NOT_USED。每个通道可以使用NRF_DRV_PWM_PIN_INVERTED来设置空闲引脚的电平为高电平,不使用时空闲引脚的电平为低电平
  • irq_priority:定义中断优先级,一般不使用;
  • base_clock定义PWM的时钟,从16M的clock分频而来,最高16MHZ,最低125kHz, 这个非常重要,每个clock多长时间来计算cycle持续多长时间;
  • count_mode:有两种,一种是NRF_PWM_MODE_UP和NRF_PWM_MODE_UP_AND_DOWN。NRF_PWM_MODE_UP边沿对齐,NRF_PWM_MODE_UP_AND_DOWN中心对齐。两者区别如图2和图3所示;
  • top_value:定义PWM的每个duty cycle中clock的最大个数;
  • load_mode:后面sequnce的装载方式,是每个通道独立加载,还是所有


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部