地址:https://github.com/NordicSemiconductor/nrf51-pwm-library

nrf_pwm_init函数 初始化PWM参数 设置输出pwm的gpio pin pwm周期 分频 分辨率等。

在示例pwm_example_sin中设置100分辨率,9分频,156hz的pwm频率 3路pwm在pin 8、9、10上 并占用默认设置的三个gpiote通道2,3,0

在函数中会初始化定时器TIMER2 16位精度 cc3为pwm分辨率 也就是pwm的一个周期 并设置快捷方式清零定时器 示例直接用MASK赋值

接着设置ppi 连接定时器compare0 compare1 compare2 到gpiote 2,3,0 compare3再连接到所有的gpiote

最后启用中断 开始定时器 注意这时所有Compare的值为0 而且gpiote的pin也没设置 所有不会有任何输出。

nrf_pwm_set_value函数 设置PWM值

void nrf_pwm_set_max_value(uint32_t max_value)
{
pwm_next_max_value = max_value;
PWM_TIMER->EVENTS_COMPARE[] = ;
PWM_TIMER->SHORTS = TIMER_SHORTS_COMPARE3_CLEAR_Msk | TIMER_SHORTS_COMPARE3_STOP_Msk;
if((PWM_TIMER->INTENSET & TIMER_INTENSET_COMPARE3_Msk) == )
{
PWM_TIMER->TASKS_STOP = ;
PWM_TIMER->INTENSET = TIMER_INTENSET_COMPARE3_Msk;
}
PWM_TIMER->TASKS_START = ;
}

首先设置compare3为0 并设置快捷方式加入停止定时器

接着设置Compare3的中断

PWM_IRQHandler 定时器中断

void PWM_IRQHandler(void)
{
static uint32_t i;
PWM_TIMER->EVENTS_COMPARE[] = ;
PWM_TIMER->INTENCLR = 0xFFFFFFFF;
PWM_TIMER->CC[] = pwm_max_value = pwm_next_max_value;
for(i = ; i < pwm_num_channels; i++)
{
if(pwm_next_value[i] == )
{
nrf_gpiote_unconfig(pwm_gpiote_channel[i]);
nrf_gpio_pin_write(pwm_io_ch[i], );
pwm_running[i] = ;
}
else if (pwm_next_value[i] >= pwm_max_value)
{
nrf_gpiote_unconfig(pwm_gpiote_channel[i]);
nrf_gpio_pin_write(pwm_io_ch[i], );
pwm_running[i] = ;
}
else
{
PWM_TIMER->CC[i] = pwm_next_value[i];
if(!pwm_running[i])
{
nrf_gpiote_task_config(pwm_gpiote_channel[i], pwm_io_ch[i], NRF_GPIOTE_POLARITY_TOGGLE, NRF_GPIOTE_INITIAL_VALUE_HIGH);
pwm_running[i] = ;
}
}
}
PWM_TIMER->SHORTS = TIMER_SHORTS_COMPARE3_CLEAR_Msk;
PWM_TIMER->TASKS_START = ;
}

首先要清除中断设置

设置cc3 pwm最大值

设置三个通道的pwm值 也就是Time2的前三个通道 cc0 cc1 cc2的值

如果是第一次运行的话需要设置gpiote和pin 并设初值为高电平

最后快捷方式清零 启动定时器

总体和之前pwm电机的例子很像 只不过本例只在改变pwm时进入中断,少用一路compare,缺点是改pwm值会有延迟。

nrf51 官方PWM库的更多相关文章

  1. 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植

    2015年的电赛已经结束了.赛前接到器件清单的时候,看到带防护圈的多旋翼飞行器赫然在列,又给了一个瑞萨RL78/G13的MCU,于是自然联想到13年的电赛,觉得多半是拿RL78/G13做四旋翼的主控, ...

  2. 【Qt官方MQTT库的使用,附一个MqttClient例子】

    Qt官方MQTT库的使用,附一个MqttClient例子 开发环境:win7 64 + Qt5.9 记录时间:2018年3月11日 00:48:42 联系邮箱: yexiaopeng1992@126. ...

  3. REST API TO MiniProgram 上线WordPress官方插件库

    全新开发的用于 wordpress微信小程序的插件 REST API TO MiniProgram今天上线WordPress官方插件库.这个插件的上一个版本叫:wp-rest-api-for-app, ...

  4. 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

    源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...

  5. STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本)

    今天把stm32F407的工程之IAR建立完成了,特此记录下. 下载官方固件库,STM32F4xx_DSP_StdPeriph_Lib_V1.6.1,V1.8.0版本的同理.新建以下几个文件 src放 ...

  6. MySQL 官方测试库

    MySQL 官方测试库 github 地址 https://github.com/datacharmer/test_db MySQL 文档地址 https://dev.mysql.com/doc/em ...

  7. 谷歌官方颜色库 MaterialDesignColor

    谷歌官方颜色库 MaterialDesignColor

  8. WeUI—微信官方UI库

    WeUI 为微信 Web 服务量身设计 概述 WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一.包含button.cell ...

  9. nodejs 使用官方oracledb库连接数据库 教程

    https://www.cnblogs.com/rysinal/p/7779055.html 导读 linux下安装使用 gcc安装 nodejs安装 oracle客户端安装 npm安装oracled ...

随机推荐

  1. Radio Link Failure and Recovery

    四种会发生Radio Link Failure的场景 -  DL Physical Layer Failure (PDCCH BLER > 10%) -  Random Access Probl ...

  2. 如何在Objective-C中实现链式语法?

    在接触到开源项目 Masonry 后,里面的布局约束的链式写法让我颇感兴趣,就像下面这样: 1 2 3 4 5 6 7 8 UIEdgeInsets padding = UIEdgeInsetsMak ...

  3. 思考----拒绝单纯copy

    工作4个多月以来感触最深的是: 做事情的时候遇到不会的可以上网查或者问别人,但是获取到的知识不能只是单纯的copy过来使用达到要求就ok, 更重要的是事后等有空了一定要仔细研究学习,使知识网络完整,这 ...

  4. iOS隐藏tabBar的方法

    两种方法用来隐藏tabBar 1.在本页面隐藏 #pragma mark - 隐藏tabBar - (void)viewWillAppear:(BOOL)animated{ self.tabBarCo ...

  5. $.ajax传递字符串到后台,后台返回json对象

    var mall = { MallID: $("#createId").val().trim(), MallName: $("#createName").val ...

  6. Infragistics的介绍以及在ASP.net中使用的总结

    Infragistics系列控件是一套很好,很强大的控件,.感觉很好..现在自己做项目也用..却发现网上没有一套中文的教程,中文资料都很少..在这里就把自己的研究心得写下来... 首先安装,一步一步装 ...

  7. B - 确定比赛名次

    B - 确定比赛名次 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...

  8. Jquery 获取IP地址

    //获取ip和地址 $(function () { var url = 'http://chaxun.1616.net/s.php?type=ip&output=json&callba ...

  9. Excel VLOOKUP等使用记录

    1.LEFT 函数:LEFT(G2,ROW(INDIRECT("76:"&LEN(G2)))) 截取G2单元格从开头,SIZE=76的部分字符串 2.RIGHT 函数:RI ...

  10. ThinkPHP第二十五天(自动完成、用户名密码PHP正则、移位或加密函数)

    1.ThinkPHP自动完成功能 跟昨天的自动验证功能类似,也是需要在自定义的UserModel类,进行使用. 使用方法:定义$_auto属性 $_auto = array( array(完成字段,完 ...