nrf51 官方PWM库
地址: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库的更多相关文章
- 六轴加速度传感器MPU6050官方DMP库到瑞萨RL78/G13的移植
2015年的电赛已经结束了.赛前接到器件清单的时候,看到带防护圈的多旋翼飞行器赫然在列,又给了一个瑞萨RL78/G13的MCU,于是自然联想到13年的电赛,觉得多半是拿RL78/G13做四旋翼的主控, ...
- 【Qt官方MQTT库的使用,附一个MqttClient例子】
Qt官方MQTT库的使用,附一个MqttClient例子 开发环境:win7 64 + Qt5.9 记录时间:2018年3月11日 00:48:42 联系邮箱: yexiaopeng1992@126. ...
- REST API TO MiniProgram 上线WordPress官方插件库
全新开发的用于 wordpress微信小程序的插件 REST API TO MiniProgram今天上线WordPress官方插件库.这个插件的上一个版本叫:wp-rest-api-for-app, ...
- 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)
源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...
- STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本)
今天把stm32F407的工程之IAR建立完成了,特此记录下. 下载官方固件库,STM32F4xx_DSP_StdPeriph_Lib_V1.6.1,V1.8.0版本的同理.新建以下几个文件 src放 ...
- MySQL 官方测试库
MySQL 官方测试库 github 地址 https://github.com/datacharmer/test_db MySQL 文档地址 https://dev.mysql.com/doc/em ...
- 谷歌官方颜色库 MaterialDesignColor
谷歌官方颜色库 MaterialDesignColor
- WeUI—微信官方UI库
WeUI 为微信 Web 服务量身设计 概述 WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一.包含button.cell ...
- nodejs 使用官方oracledb库连接数据库 教程
https://www.cnblogs.com/rysinal/p/7779055.html 导读 linux下安装使用 gcc安装 nodejs安装 oracle客户端安装 npm安装oracled ...
随机推荐
- 【MongoDB数据库】MongoDB 命令入门初探
MongoDB是一款NoSql数据库,使用了"面向集合"(Collection-Oriented)原理,意思是数据被分组存储在数据集中,被称为一个集合(Collection).每一 ...
- Git--廖雪峰的博客的学习笔记
为了督促自己能看完这个网站的学习教程,边看边做了些简要的笔记,记录了常用命令,其实也就是自己打了些简单的命令,好多直接就粘贴过来了,也算是一个学习的证明吧,想按详细的教程,还是要去博主的园子学习啊地址 ...
- C#根据文件流判断文件类型
判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </su ...
- 列求key出现的频率
1 cat mc.log | grep LOGIN_GET | awk '{print $9}' | sort | uniq -c
- js程序调试技巧
1.No "Access-Control-Allow-origin" 解决方案:这是API参数没有穿对的跨域错误,修改API(ajax请求路径)以保证其参数传递正确即可: 2.lo ...
- 批量修改文件名java
package test0715; import java.io.File; public class FileRename {public static void main(String[] arg ...
- VirtualBox 更改主机和虚拟机之间的鼠标切换热键
VirtualBox 主机和虚拟机之间的鼠标切换热键 是 Right Ctrl.一般用惯VM Ware的都不太习惯,那么怎么改变VirtualBox鼠标切换热键呢? 1.点击菜单栏的 管理--&g ...
- MYSQL group_concat() 函数
看来看一下表中的数据 select * from t; 下一步来看一下group_concat函数的用法 select ID,group_concat(Name) from t group by ID ...
- android方向键被锁定的问题
当虚拟机启动的时候,很多情况是旁边的方向键不能点击,处于一种被锁定的状态,解决办法如下: 找到 C:\Users\Administrator(你的用户名)\.android\avd\mm.adv( ...
- API各函数作用简介
API各函数作用简介 1.控件与消息函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeI ...