NRF52832配置PWM
NRF52832 SDK11
需要匹配波形
首先 使能PWM
1. 找到nrf_drv_config.h文件
#define PWM0_ENABLED 1 //默认0 打开1 下面数据可以不改
2.实例化PWM
nrf_drv_pwm_t m_pwm0 = NRF_DRV_PWM_INSTANCE(0); //0是PWM0 如果是1 就NRF_DRV_PWM_INSTANCE(1)
3 初始化函数
void point_sec_nor_init(){
nrf_drv_pwm_config_t config =
{
.irq_priority = APP_IRQ_PRIORITY_HIGHEST,
.count_mode = NRF_PWM_MODE_UP,
.step_mode = NRF_PWM_STEP_AUTO,
};
config.output_pins[0] = sec_point_n ;
config.output_pins[1] =NRF_DRV_PWM_PIN_NOT_USED; //没有使用这个脚位
config.output_pins[2] = sec_point_p ;
config.output_pins[3] = NRF_DRV_PWM_PIN_NOT_USED; //没有使用设个脚位
config.base_clock = NRF_PWM_CLK_125kHz; //PWM频率设置
config.top_value = 61; //PWM脉冲计数器
config.load_mode = NRF_PWM_LOAD_GROUPED; //pwm通道设置
nrf_drv_pwm_init(&m_pwm0, &config, NULL); //初始化
}
上述设置含义 中断等设置不发生变化 配置主要是配置脚位 其中 config.output_pins[0], config.output_pins[1], config.output_pins[2], config.output_pins[3],配置与 config.load_mode 配置需要对应。
config.load_mode的配置值
NRF_PWM_LOAD_COMMON 4通道使用一个值
NRF_PWM_LOAD_GROUPED 12通道使用一个值 34通道使用一个值
NRF_PWM_LOAD_INDIVIDUAL 完全独立每个通道使用各自的值
NRF_PWM_LOAD_WAVE_FORM 123独立使用一个值
因为需要配置2个脚位 使用的是 NRF_PWM_LOAD_GROUPED 使用1通道与3通道
config.base_clock 时钟频率设置
从需要设置的波形上计算 一个最小的波形周期为长度 a+b = 488us
而周期配置 NRF_PWM_CLK_125kHz 最小脉冲长度为 8ua能整除
config.top_value脉冲计数设置为61,61X8 = 488刚好合适。
这样初始化完成。
4.通道配置
nrf_pwm_values_grouped_t /*const*/ pwm0_seq_values[] =
{
{0x8000+40, 0x8000+0},
{0x8000+40,0x8000+ 0},
{0x8000+40, 0x8000+0},
{0x8000+40,0x8000+ 0},
{0x8000+40, 0x8000+0},
{0x8000+40, 0x8000+0},
};
通道配置, 40的意思为 40*8 =320us的高电平脉冲 剩下为168低电平脉冲 对应波形长度。数量为6为6个波。
启动方波
void point_sec_nor_move_1(unsigned int step){
nrf_pwm_values_grouped_t /*const*/ pwm0_seq_values[] =
{
{0x8000+40, 0x8000+0},
{0x8000+40,0x8000+ 0},
{0x8000+40, 0x8000+0},
{0x8000+40,0x8000+ 0},
{0x8000+40, 0x8000+0},
{0x8000+40, 0x8000+0},
};
nrf_pwm_sequence_t const pwm0_seq =
{
.values.p_grouped = pwm0_seq_values,
.length = NRF_PWM_VALUES_LENGTH(pwm0_seq_values),
.repeats = 0,
.end_delay = 0
};
nrf_drv_pwm_simple_playback(&m_pwm0, &pwm0_seq, step,NRF_DRV_PWM_FLAG_STOP);
}
step 多少次pwm,NRF_DRV_PWM_FLAG_STOP 运行完成之后结束 .repeats = 0, 不重发波形。
pwm配置完成
波形