nRF52832-PPI使用
环境介绍
PC环境:Windows
IDE环境:ARM-MDK5
SDK环境:nRF5 SDK v15.1.0
硬件环境:nRF52832开发板(外设配置与官方pca10040开发板一致)
使用官方的pwm_library例程,该位于nRF5_SDK_15.1.0_a8c0c4d\examples\peripheral\ppi\pca10040\blank\arm5_no_packs
目录下。
注:pca10040代表nRF52832例程,blank代表基础应用工程,ARM-MDK5选择arm5_no_packs
PPI使用配置
PPI配置步骤如下:
- 实例化PPI的通道
- 初始化PPI外设
- 为PPI通道申请内存,指定事件触发相关任务
- 使能PPI
PPI相关参数说明:
- nRF52832的PPI通道由20个,在nrf52832_peripherals.h文件中定义
- 使用SoftDevice时,timer0不能使用
官方源码分析
官方源码中PWM应用在main.c文件实现,本文根据个人理解作相应的注释,如下:
1 |
|
官方的例程实现过程以及效果:
- 实例化Timer0(100ms)、Timer1(2s)、Timer2(2s)
- 实例化PPI的channel1、channel2
- 实现Timer0回调函数,Timer1和Timer2回调函数(没有实际应用)
- 初始化PPI
- 配置PPI的channel1用于Timer2事件触发停止Timer0
- 配置PPI的channel1用于Timer2事件触发运行Timer0
- 使能PPI的channel1、channel2
- 初始化Timer
- Timer0每100ms触发NRF_TIMER_CC_CHANNEL0事件,m_counter变量加1
- Timer1每2s触发NRF_TIMER_CC_CHANNEL0事件
- Timer2每2s触发NRF_TIMER_CC_CHANNEL0事件
- 主函数实现奇数秒Timer1触发停止Timer0,偶数秒Timer2触发运行Timer0,Timer0使能时,每100ms打印一次counter值
实现效果:串口一秒打印十次counter值,然后停止一秒,依次循环
串口配置:
- 波特率:115200
- 8位数据位
- 1位停止位
- 无奇偶校验
- 无流控
使用串口助手查看的效果如下:
资源参考
官方文档:http://infocenter.nordicsemi.com/index.jsp
例程说明位于官方文档目录:Software Development Kit > nRF5 SDK > nRF5 SDK v15.1.0 > Examples > Hardware peripheral examples > PPI Example
timer相关API函数说明位于官方目录:Software Development Kit > nRF5 SDK > nRF5 SDK v15.1.0 > API Reference > Peripheral drivers > Peripheral drivers > PPI
代码烧录
- 擦除FLASH
- 烧写应用程序
具体操作参考:nRF52832-程序下载