求解NRF52832的pwm,使用寄存器配置无波形

yj666666666 2017-08-14 09:28:18
在peripheral包下的uart下面配置,代码如下配置

uint16_t pwm_seq[2] = {1500, 1500};
void pwmInit(void)
{
nrf_gpio_cfg_output(MOTO1_Pin);
nrf_gpio_cfg_output(MOTO2_Pin);
nrf_gpio_cfg_output(MOTO3_Pin);
nrf_gpio_cfg_output(MOTO4_Pin);

NRF_PWM0->PSEL.OUT[0] = (MOTO1_Pin << PWM_PSEL_OUT_PIN_Pos) | (PWM_PSEL_OUT_CONNECT_Connected
<< PWM_PSEL_OUT_CONNECT_Pos);

NRF_PWM0->PSEL.OUT[1] = (MOTO4_Pin << PWM_PSEL_OUT_PIN_Pos) | (PWM_PSEL_OUT_CONNECT_Connected
<< PWM_PSEL_OUT_CONNECT_Pos);

NRF_PWM0->ENABLE = (PWM_ENABLE_ENABLE_Enabled << PWM_ENABLE_ENABLE_Pos);

NRF_PWM0->MODE = (PWM_MODE_UPDOWN_Up << PWM_MODE_UPDOWN_Pos);

NRF_PWM0->PRESCALER = (PWM_PRESCALER_PRESCALER_DIV_16 <<PWM_PRESCALER_PRESCALER_Pos);

NRF_PWM0->COUNTERTOP = (2000 << PWM_COUNTERTOP_COUNTERTOP_Pos); //1 msec

NRF_PWM0->LOOP = (PWM_LOOP_CNT_Msk << PWM_LOOP_CNT_Pos);

NRF_PWM0->DECODER = (PWM_DECODER_LOAD_Individual << PWM_DECODER_LOAD_Pos) |
(PWM_DECODER_MODE_RefreshCount << PWM_DECODER_MODE_Pos);
NRF_PWM0->SEQ[0].PTR = ((uint32_t)(pwm_seq) << PWM_SEQ_PTR_PTR_Pos);

NRF_PWM0->SEQ[0].CNT = ((sizeof(pwm_seq) / sizeof(uint16_t)) <<PWM_SEQ_CNT_CNT_Pos);

NRF_PWM0->SEQ[0].REFRESH = 0;

NRF_PWM0->SEQ[0].ENDDELAY = 0;

NRF_PWM0->TASKS_SEQSTART[0] = 1;
}
...全文
3599 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
yj666666666 2017-08-14
  • 打赏
  • 举报
回复
使用的是数据手册里面的代码,其中有一个特殊的NFC引脚我配置成普通IO口了,但是还是不行,使用它pwm_driver例程就直接可以有波形

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧