完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
M453系列有2路PWM,每路有6个通道。使用捕捉功能,发现有的通道不能捕捉到。拿开发板试了全部12个通道,发现只有4个通道可以使用。分别是PWM0和PWM1的2,3通道可以正常工作。0,1,4,5无法正常工作。问下各位,是我的设置有问题吗?
12通道,分别实验: // PWM0_CH0_Init(); //0 // PWM0_CH1_Init(); //0 // PWM0_CH2_Init(); //OK // PWM0_CH3_Init(); //OK // PWM0_CH4_Init(); //0 // PWM0_CH5_Init(); //0 // // PWM1_CH0_Init(); //0 // PWM1_CH1_Init(); //0 // PWM1_CH2_Init(); //OK // PWM1_CH3_Init(); //OK // PWM1_CH4_Init(); //0 PWM1_CH5_Init(); //0 附PWM0_CH0_Init()和PWM0_CH2_Init()初始化代码。 void PWM0_CH0_Init(void) { //1-复位PWM1 SYS_ResetModule(PWM0_RST); //2-设置PWM计数器工作模式&预分频器 //设置预分频器。分频比1+1=2,144MHz/2=72MHz PWM0->CLKPSC0_1 = 1; //设置向上计数模式&计数器自动重载 PWM0->CTL1 &= ~(0x00000001 << (16+0)); //计数器设置为自动重载模式 PWM0->CTL1 &= ~(0x00000003 << (2 * 0)); //设置向上计数模式 //设置计数最大周期PERIOD (PWM0)->PERIOD[0] = 0xFFFF; //计数器最大值设置为0xFFFF //3-设置捕捉工作模式&使能相应管教 //使能PWM输入捕捉, PWM通道捕捉功能的输入来自相关的复用管脚。 PWM0->CAPINEN |= (0x00000001 << 0); //使能捕捉功能。当检测到输入信号的上升/下降沿时锁存PWM计数器值并保存到RCAPDAT(向上锁存)和FCAPDAT(向下锁存)。 PWM0->CAPCTL |= (0x00000001 << 0); //使能上升沿捕捉重载计数器 PWM0->CAPCTL |= (0x00000001 << (16+0)); //4-中断使能 //CAPIEN,使能上升沿锁存中断 PWM0->CAPIEN |= (0x00000001 << 0); //INTEN0,使能周期点中断(计数器溢出中断) // (PWM0)->INTEN0 |= (PWM_INTEN0_PIEN0_Msk << 2); //暂不使能计数器溢出中断,用不到 //使能NVIC中断 NVIC_EnableIRQ(PWM0P1_IRQn); //5-计数器使能 //CNTEN,PWM计数器和时钟分频器开始工作 PWM0->CNTEN |= (0x00000001 << 0); } void PWM0_CH2_Init(void) { //1-复位PWM1 SYS_ResetModule(PWM0_RST); //2-设置PWM计数器工作模式&预分频器 //设置预分频器。分频比1+1=2,144MHz/2=72MHz PWM0->CLKPSC2_3 = 1; //设置向上计数模式&计数器自动重载 PWM0->CTL1 &= ~(0x00000001 << (16+2)); //计数器设置为自动重载模式 PWM0->CTL1 &= ~(0x00000003 << (2 * 2)); //设置向上计数模式 //设置计数最大周期PERIOD (PWM0)->PERIOD[2] = 0xFFFF; //计数器最大值设置为0xFFFF //3-设置捕捉工作模式&使能相应管教 //使能PWM输入捕捉, PWM通道捕捉功能的输入来自相关的复用管脚。 PWM0->CAPINEN |= (0x00000001 << 2); //使能捕捉功能。当检测到输入信号的上升/下降沿时锁存PWM计数器值并保存到RCAPDAT(向上锁存)和FCAPDAT(向下锁存)。 PWM0->CAPCTL |= (0x00000001 << 2); //使能上升沿捕捉重载计数器 PWM0->CAPCTL |= (0x00000001 << (16+2)); //4-中断使能 //CAPIEN,使能上升沿锁存中断 PWM0->CAPIEN |= (0x00000001 << 2); //INTEN0,使能周期点中断(计数器溢出中断) // (PWM0)->INTEN0 |= (PWM_INTEN0_PIEN0_Msk << 2); //暂不使能计数器溢出中断,用不到 //使能NVIC中断 NVIC_EnableIRQ(PWM0P1_IRQn); //5-计数器使能 //CNTEN,PWM计数器和时钟分频器开始工作 PWM0->CNTEN |= (0x00000001 << 2); } 附中断代码。 /**************************************** *函数名称:PWM0P1_IRQHandler *输 入:无 *输 出:无 *功 能:捕捉中断 ******************************************/ void PWM0P1_IRQHandler(void) { PB15 = !PB15; if(((PWM0)->CAPIF & (0x00000001 << 0))!=0) //上升沿捕获中断 { PWM0->CAPIF |= (0x00000001 << 0); Cap = PWM0->RCAPDAT0; PB0 = !PB0; } if(((PWM0)->CAPIF & (0x00000001 << 1))!=0) //上升沿捕获中断 { PWM0->CAPIF |= (0x00000001 << 1); Cap = PWM0->RCAPDAT1; PB1 = !PB1; } if(((PWM0)->CAPIF & (0x00000001 << 2))!=0) //上升沿捕获中断 { PWM0->CAPIF |= (0x00000001 << 2); Cap = PWM0->RCAPDAT2; PB2 = !PB2; } if(((PWM0)->CAPIF & (0x00000001 << 3))!=0) //上升沿捕获中断 { PWM0->CAPIF |= (0x00000001 << 3); Cap = PWM0->RCAPDAT3; PB3 = !PB3; } if(((PWM0)->CAPIF & (0x00000001 << 4))!=0) //上升沿捕获中断 { PWM0->CAPIF |= (0x00000001 << 4); Cap = PWM0->RCAPDAT4; PB4 = !PB4; } if(((PWM0)->CAPIF & (0x00000001 << 5))!=0) //上升沿捕获中断 { PWM0->CAPIF |= (0x00000001 << 5); Cap = PWM0->RCAPDAT5; PB8 = !PB8; } } |
|
相关推荐
1个回答
|
|
可能是因为不是所有的通道都支持捕捉功能。在M453系列的数据手册中可以查看每个通道的功能和特性,确认哪些通道支持捕捉功能。建议检查一下手册,找到支持捕捉功能的通道进行测试。同时,还需要确认在初始化PWM通道时是否正确地打开了捕捉功能。
|
|
|
|
只有小组成员才能发言,加入小组>>
684 浏览 0 评论
1100 浏览 1 评论
2465 浏览 5 评论
2799 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2638 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
649浏览 9评论
647浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
776浏览 6评论
620浏览 5评论
662浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 20:37 , Processed in 0.935673 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号