SDK15.2

1. nRF52 PWM 模块

2. 使能PWM模块

sdk_config.h文件使能PWM Module

#define NRFX_PWM_ENABLED 1
#define PWM_ENABLED 1
#define PWM0_ENABLED 1
#define NRFX_PWM0_ENABLED 0

总共支持4个PWM,分别是 PWM0, PWM1, PWM2, PWM3.

3. 实例化PWM

static nrf_drv_pwm_t m_pwm0 = NRF_DRV_PWM_INSTANCE(0);

4. 初始化PWM

nrf_drv_pwm_config_t const config0 ={.output_pins ={3 | NRF_DRV_PWM_PIN_INVERTED,         // channel 0NRF_DRV_PWM_PIN_NOT_USED,             // channel 1NRF_DRV_PWM_PIN_NOT_USED,             // channel 2NRF_DRV_PWM_PIN_NOT_USED,             // channel 3},.irq_priority = APP_IRQ_PRIORITY_LOWEST,.base_clock = NRF_PWM_CLK_500kHz,.count_mode = NRF_PWM_MODE_UP,.top_value = 800,.load_mode = NRF_PWM_LOAD_COMMON,.step_mode = NRF_PWM_STEP_AUTO};APP_ERROR_CHECK(nrf_drv_pwm_init(&m_pwm0, &config0, pwm_handler));

配置信息包好输出引脚,中断优先级,基础频率,计数模式,计数最大阈值,加载序列模式和step模式。

4.1 输出引脚设置

  • 使用NRF_DRV_PWM_PIN_INVERTED可以设置空闲引脚的电平为高电平。不使用时空闲引脚的电平为低电平。
  • 不使用引脚,需要设置为NRF_DRV_PWM_PIN_NOT_USED

4.2 加载模式设置

PWM模块可以播放存在RAM中的Multiple duty cycle array(sequences)。也就是存一系列占空比值compare到RAM中,通过Decoder可以把这些值自动写入到寄存器。

  • NRF_PWM_LOAD_COMMON 4通道共用一个配置,通常使用这种模式即可。
  • NRF_PWM_LOAD_GROUPED 1,2通道使用第一个值;3,4通道使用第二个值。依次类推。
  • NRF_PWM_LOAD_INDIVIDUAL 完全独立,1通道对应第一个值,4通道对应第四个值。
  • NRF_PWM_LOAD_WAVE_FORM 1,2,3独立,第四个值写入 top value

4.3 基础频率和顶值设置

基础频率和顶值设置可以决定PWM的频率。

4.4 回调函数

typedef enum
{NRFX_PWM_EVT_FINISHED, ///< Sequence playback finished.NRFX_PWM_EVT_END_SEQ0, /**< End of sequence 0 reached. Its data can besafely modified now. */NRFX_PWM_EVT_END_SEQ1, /**< End of sequence 1 reached. Its data can besafely modified now. */NRFX_PWM_EVT_STOPPED,  ///< The PWM peripheral has been stopped.
} nrfx_pwm_evt_type_t;void brnc_drv_motor_pwm_handler(nrf_drv_pwm_evt_type_t event_type) {if (event_type == NRF_DRV_PWM_EVT_FINISHED) {}
}

5. 播放

5.1 播放参数设置

static nrf_pwm_values_common_t seq_values[] =
{0, 200, 400, 600, 800
};
nrf_pwm_sequence_t const seq =
{.values.p_common = seq_values,.length          = NRF_PWM_VALUES_LENGTH(seq_values),.repeats         = 0,.end_delay       = 0
};

5.2 播放

nrf_drv_pwm_simple_playback(&m_pwm0, &seq, 3, NRF_DRV_PWM_FLAG_LOOP);
nrf_drv_pwm_simple_playback(&m_pwm0, &seq, 3, NRFX_PWM_FLAG_STOP);
/*** @brief Function for starting a single sequence playback.** To take advantage of the looping mechanism in the PWM peripheral, both* sequences must be used (single sequence can be played back only once by* the peripheral). Therefore, the provided sequence is internally set and* played back as both sequence 0 and sequence 1. Consequently, if end of* sequence notifications are required, events for both sequences should be* used (that means that both the @ref NRFX_PWM_FLAG_SIGNAL_END_SEQ0 flag* and the @ref NRFX_PWM_FLAG_SIGNAL_END_SEQ1 flag should be specified and* the @ref NRFX_PWM_EVT_END_SEQ0 event and the @ref NRFX_PWM_EVT_END_SEQ1* event should be handled in the same way).** Use the @ref NRFX_PWM_FLAG_START_VIA_TASK flag if you want the playback* to be only prepared by this function, and you want to start it later by* triggering a task (using PPI for instance). The function will then return* the address of the task to be triggered.** @note The array containing the duty cycle values for the specified sequence*       must be in RAM and cannot be allocated on stack.*       For detailed information, see @ref nrf_pwm_sequence_t.** @param[in] p_instance     Pointer to the driver instance structure.* @param[in] p_sequence     Sequence to be played back.* @param[in] playback_count Number of playbacks to be performed (must not be 0).* @param[in] flags          Additional options. Pass any combination of*                           @ref nrfx_pwm_flag_t "playback flags", or 0*                           for default settings.** @return Address of the task to be triggered to start the playback if the @ref*         NRFX_PWM_FLAG_START_VIA_TASK flag was used, 0 otherwise.*/
uint32_t nrfx_pwm_simple_playback(nrfx_pwm_t const * const   p_instance,nrf_pwm_sequence_t const * p_sequence,uint16_t                   playback_count,uint32_t                   flags);

6. 停止与卸载

6.1 停止

bool nrfx_pwm_stop(nrfx_pwm_t const * const p_instance,bool wait_until_stopped);

6.2 卸载

void nrfx_pwm_uninit(nrfx_pwm_t const * const p_instance);

nRF52 PWM 使用相关推荐

  1. NRF52832 PWM

    1.在sdk_config.h中加入宏 // <e> PWM_ENABLED - nrf_drv_pwm - PWM peripheral driver - legacy layer // ...

  2. RTT设备与驱动之PWM

    这里将PWM当成一个设备:PWM简介 上图是一个简单的 PWM 原理示意图,假定定时器工作模式为向上计数,当计数值小于阈值时,则输出一种电平状态,比如高电平,当计数值大于阈值时则输出相反的电平状态,比 ...

  3. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  4. 【转载】 stm32之PWM

    发现这位博主的博客被大量的转发,我也转载一篇,谁叫人家写的好呢. 原文地址:http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html 脉冲宽度调制(PW ...

  5. 开关电源三种控制模式:PWM/PFM/PSM

    1. PWM/PFM/PSM 三种控制模式的定义 通常来说﹐开关电源(DC-DC)有三种最常见的调制方式分别为: 脉冲宽度调制(PWM) 脉冲频率调制(PFM) 脉冲跨周期调制(PSM) 在功率集成电 ...

  6. 使用 RPI.GPIO 模块的脉宽调制(PWM)功能

    脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法.在树莓派上,可以通过对GPIO的编程来实现PWM. 创建一个 PWM 实例: p = GPIO. ...

  7. 树莓派c语言输出pwm波,树莓派硬件PWM输出程序

    一:实验现象 对于树莓派硬件PWM只有1号引脚(wiringPi),单独测试该引脚时,可以输出不同占空比控制led灯成呼吸灯的效果 二:程序步骤 1,初始化wiringPi的库函数; 2,设置对应的P ...

  8. linux pwm控制蜂鸣器 滴滴_兴安盟KOBISHI电磁蜂鸣器BZ-21BLAC24V保证

    兴安盟KOBISHI电磁蜂鸣器BZ-21BLAC24V保证日本KOBISHI蜂鸣器.jjb器 .蜂鸣器BZ-35VR DC24V.济南千斗工业出售,货期短.价格低.保证 这里只对必须用1/2duty的 ...

  9. 全程pwm调光_dc调光的手机有哪些

    dc调光的手机有哪些?目前已经发布的黑鲨游戏手机2.黑鲨游戏手机Helo均为全程DC调光,魅族16系列手机,OPPO的Reno,一加7等手机已经是支持DC调光. dc调光的手机有哪些 1.据悉,目前已 ...

最新文章

  1. 院士谈如何做好研究生:要逼着自己去想问题,最大的浪费是聪明人不思考
  2. 网站静态化处理—动静分离策略(3)
  3. 大话设计模式之装饰模式
  4. 分享一点python 编码设置的知识
  5. springmvc二十:数据绑定
  6. PyTorch 实现 VAE 变分自编码器 含代码
  7. c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。
  8. U盘安装Ubuntu三步走
  9. UG NX12.0安装教程
  10. leetcode 343. Integer Break | 343. 整数拆分(Java)
  11. mysql免安装5.7.17_mysql免安装5.7.17数据库配置
  12. 过滤特征_LR训练优化-稀疏特征过滤
  13. Swift 中的Closures(闭包)详解
  14. 纯新手DSP编程--5.15--CCS简述
  15. 希望是一个全新的开始
  16. 给华南x99打鸡血BIOS教程
  17. xheditor html5,Flask项目集成富文本编辑器XHEditor
  18. 【图像压缩】替换输入改善压缩+实现可变比特率
  19. 读书笔记 - 《上帝的跳蚤》
  20. 给传智播客的一份感谢信

热门文章

  1. 21. 查询表sc——查询平均成绩大于等于90分的学生学号和平均成绩
  2. shell script if嵌套for循环脚本
  3. 如何使用Arduino开发板读/写SD卡模块的数据
  4. arduino esp32 读福申甲醛传感器
  5. 什么是系统时钟?什么是时钟系统?时钟系统有什么作用?
  6. c语言将一个字符输出三遍,C语言字符相关部分内容小结
  7. 以javaweb项目为例,用户在搜索网页域名的过程到网页响应到底经过了什么?
  8. Linux网络编程8——线程池模型
  9. python培训班深圳-深圳python人工智能培训班
  10. java 默认打印机_JavaScript代码 设置默认打印机!