OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4591|回复: 2

菜鸟求大神解答中断管理问题(外部中断和USART接收中断)

[复制链接]

4

主题

5

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-8-13
在线时间
0 小时
发表于 2014-8-14 09:44:02 | 显示全部楼层 |阅读模式
5金钱
 
[mw_shl_code=c,true]while(1) { if(Key1_Flag == 0) { USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); Read_Message(); } if(Key1_Flag == 1) { USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); GPIO_SetBits(GPIOB, GPIO_Pin_8); while(Rev_Num <= 96); Rev_Num = 0; Send_GPS_Message(); Key1_Flag = 0; Delay_Time(0x2FFFFF); printf("AT+CMGF=1\r\n"); Delay_Time(0x06FFFF); printf("AT+CMGDA=\"DEL ALL\"\r\n"); Delay_Time(0x06FFFF); printf("AT+CMGDA=\"DEL ALL\"\r\n"); Delay_Time(0x06FFFF); printf("AT+CMGDA=\"DEL ALL\"\r\n"); LED1(OFF); GPIO_ResetBits(GPIOB, GPIO_Pin_8); } if(Key2_Flag == 1) { GPIO_SetBits(GPIOB, GPIO_Pin_8); while(Rev_Num <= 96); Rev_Num = 0; Gsm_Send_Help(); Key2_Flag = 0; LED2(OFF); GPIO_ResetBits(GPIOB, GPIO_Pin_8); } } 这是主函数main.c中while(1)死循环的代码,然后下面是PB13外部中断,USART1和USART2中断服务函数 void USART1_IRQHandler(void) { GPS_RX_BUF(); } void USART2_IRQHandler(void) { uint8_t ch2; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { ch2 = USART_ReceiveData(USART2); if(ch2 == ':') { LED1(ON); Key1_Flag = 1; } } } void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line13) != RESET) { LED2(ON); Key2_Flag = 1; } EXTI_ClearITPendingBit(EXTI_Line13); } 三个中断组以及优先级分别是:4.0.0(PB.13);4.1.0(USART2);4.2.0(USART1) 现在问题来了,为什么我每次按下PB.13触发中断时,会顺带运行主函数main.c里面的 if(Key1_Flag == 1) { USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); GPIO_SetBits(GPIOB, GPIO_Pin_8); while(Rev_Num <= 96); Rev_Num = 0; Send_GPS_Message(); Key1_Flag = 0; Delay_Time(0x2FFFFF); printf("AT+CMGF=1\r\n"); Delay_Time(0x06FFFF); printf("AT+CMGDA=\"DEL ALL\"\r\n"); Delay_Time(0x06FFFF); printf("AT+CMGDA=\"DEL ALL\"\r\n"); Delay_Time(0x06FFFF); printf("AT+CMGDA=\"DEL ALL\"\r\n"); LED1(OFF); GPIO_ResetBits(GPIOB, GPIO_Pin_8); } 明明PB.13指示改变了Key2_Flag的值,为什么会这样?我真是百思不得其解,求各位大哥大姐打救一下小弟 [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-14 21:37:19 | 显示全部楼层
(1) 中断优先级分组是分组几?
(2)代码逻辑有点难看明白您的意图哦
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-14 22:28:14 | 显示全部楼层
建议你调试的时候,先把代码简化,找出底层问题。。。。
然后再是其他逻辑代码。。。这样解决问题更加容易
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-3 22:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表