完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
第一次写文章啊!!最近在学stm32单片机,在学习到外部中断的时候,按照教程将外部中断的配置,首先分别配置了 GPIO_Init();开启了IO口的复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);然后配置GPIO与中断线的配置关系GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);然后初始化EXTI_Init();NVIC_Init(),然后编写了中断服务函数0 3 4,代码如下:
void EXTI0_IRQHandler() { delay_ms(10); if(KEY_UP==1) { PBout(5)=0; PEout(5)=0; } EXTI_ClearITPendingBit(EXTI_Line0); } void EXTI3_IRQHandler() { delay_ms(10); if(KEY1==0) { PBout(5)=1; PEout(5)=0; } EXTI_ClearITPendingBit(EXTI_Line3); } void EXTI4_IRQHandler() { delay_ms(10); if(KEY0==0) { PBout(5)=0; PEout(5)=1; } EXTI_ClearITPendingBit(EXTI_Line4); } 然后主函数中放了初始化和 一个串口中断服务函数(之前学习串口的时候编写的,没有删除,因为中断事件相互独立,所以我觉得不会影响),代码如下: #include "stm32f10x.h" #include "led.h" #include "delay.h" #include "beep.h" #include "key.h" #include "exti.h" #include "usart.h" int main(void) { LED_Init(); delay_init(); Beep_Init(); Key_Init(); EXTIX_Init(); USART1_Init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); while(1) { delay_ms(1000); // printf("OKrn"); } } void USART1_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART1,USART_IT_RXNE)) { res=USART_ReceiveData(USART1); USART_SendData(USART1,res); PBout(5)=0; PEout(5)=0; } } 代码中我将 printf("OKrn"); 这一句注释掉了,因为在下载到板子上的时候 如果有这句打印串口的程序,那么按键和串口的中断都不能执行,例程中加了这句话的 我不清楚为什么,我把串口中断服务函数的部分注释掉以后,只要有那个打印函数的存在,按键的中断就不能够执行,希望学到后面能够发现是为什么。 |
|
|
|
只有小组成员才能发言,加入小组>>
3137 浏览 9 评论
2833 浏览 16 评论
3344 浏览 1 评论
8719 浏览 16 评论
3940 浏览 18 评论
9550浏览 3评论
890浏览 3评论
462浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
460浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2181浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-22 11:13 , Processed in 0.988019 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号