NRF52832配置PWM

NRF52832 SDK11

需要匹配波形

NRF52832配置PWM

首先 使能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配置完成 

波形 

NRF52832配置PWM