蓝牙芯片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 0
			BSP_LED_2 | NRF_DRV_PWM_PIN_INVERTED, // channel 1
			BSP_LED_3 | NRF_DRV_PWM_PIN_INVERTED, // channel 2
			BSP_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:后面sequn
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值