完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在用M051开发板实现PWM输出的控制,因为涉及多种PWM控制模式,所以想设置多个按键控制。而按键控制需要中断的产生,敢问2个外部中断EXINT0、EXINT1跟GPIOP0P1P2P3P4的中断有区别吗? 因为这个中断IRQ函数只有
DCD EINT0_IRQHandler ; 向量地址18 DCD EINT1_IRQHandler ; 向量地址19 DCD GPIOP0P1_IRQHandler ; 向量地址20 DCD GPIOP2P3P4_IRQHandler ; 向量地址21 所以我现在有个方案是利用P4.0-P4.3 4个引脚作为检测中断的按键。因为摸索着板子时间也不长,通过demo可使用P3.3的中断并且触发中断函数。 但是当我设置P4.0-P4.3的引脚作为中断就不能触发中断,进入中断函数。 具体配置如下: void Key_Init() { P4_PMD = P4_PMD & ~(Px0_PMD | Px1_PMD | Px2_PMD | Px3_PMD) | (Px0_OD | Px1_OD | Px2_OD | Px3_OD); //P4.0-P4.3 open drain功能 P4_IMD &= IMD4_LEV; P4_IEN |= IR_EN4; //设置外部中断0为高电平触发 NVIC_ISER |= GP234_INT; } 因为我每个引脚外接pull hight电阻,所以开漏模式下可以作为输出引脚。 我的意图是想P4.0-P4.3的每个中断都能触发中断函数GPIOP2P3P4_IRQHandler ,然后通过在中断函数内判定IO口的电位变化再决定每个IO口对应变化的操作,这样就不用设置多个中断函数了。 一开始我也尝试了直接mainloop在一个循环内判定按键的变化的,但是考虑到部分按键需要delay时间,所以不能全程监控按键的操作。 但是之前我尝试在mainloop下是可以通过按键控制PWM输出duty的增加或减少,若自动增加则需要增加delay会影响监控,所以才考虑用中断来做。 希望大神们告诉我这P4.0-P4.3的中断应该如何配置才能触发同1个中断函数。或者配置哪里出错了。 |
|
相关推荐
1个回答
|
|
EXINT0和EXINT1是外部中断,需要外部事件触发才能产生中断。而GPIOP0P1P2P3P4的中断是GPIO的端口中断,当该端口的引脚状态发生改变时,就会产生中断。因此,两者的中断方式和触发条件是不同的。
对于您的方案,可以通过配置P4.0-P4.3为外部中断引脚,然后在中断服务程序中编写按键检测和PWM控制代码。需要注意的是,您还需要配置IO口的功能和中断触发方式,具体可以参考M051开发板的资料手册。 |
|
|
|
只有小组成员才能发言,加入小组>>
772 浏览 0 评论
1148 浏览 1 评论
2527 浏览 5 评论
2858 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1060浏览 3评论
189浏览 2评论
453浏览 2评论
365浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
452浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 15:07 , Processed in 1.114568 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号