专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
stm32f103rct6最多能同时使用多少个外部中断?
2019-08-17 09:50
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
5618
11
1063
在同一个板子上,stm32f103rct6最多可以连接使用多少个外部中断?EXTI0~4有独立的中断服务函数、EXTI5~9共用一个、EXTI10~14共用一个,那么怎么样使用尽可能多的外部中断,而且不会出现几个外部中断占用一个中断函数的情况呢?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
正点原子
1楼-- · 2019-08-17 12:26
7个,也就是0~4,5_9,10_15。
共7个中断服务函数。所以最多同时7个。
加载中...
xuande
2楼-- · 2019-08-17 14:20
即使公用一个中断函数,也可以区分开。没什么可怕的。
加载中...
zhu2006
3楼-- · 2019-08-17 20:03
精彩回答 2 元偷偷看……
加载中...
小温
4楼-- · 2019-08-17 23:52
具体情况具体分析啊,中断函数里面有标志位可以区分开是哪条线发生中断的
加载中...
xuande
5楼-- · 2019-08-18 00:53
如果占用同一个中断,那就查几个端口的输入电平,IDR 寄存器。
加载中...
zhu2006
6楼-- · 2019-08-18 04:47
回复【2楼】xuande:
---------------------------------
今天做了这样的实验 将PC6 
C7 
C8都连接一个按键作为外部中断输入端,结果出现这样的情况:按三个中的任意一个按键,都会进中断,但是进中断函数后 无法判断是哪个触发了中断,有时按PC6按键 结果程序跳进了if(EXTI_GetITStatus(EXTI_Line7) != RESET)这里 或者if(EXTI_GetITStatus(EXTI_Line8) != RESET) 请问这是什么问题?我的程序是不是哪里错了? 请有经验的大指点一下 谢谢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);
EXTI_InitStructure.EXTI_Line=EXTI_Line6|EXTI_Line7|EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
void EXTI9_5_IRQHandler(void)
{
/*
delay_ms(10); //消抖
if(KEY0==0) {
LED0=!LED0;
}
EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5上的中断标志位
*/
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
{
EXTI_ClearFlag(EXTI_Line6);
EXTI_ClearITPendingBit(EXTI_Line6);
}
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
{
EXTI_ClearFlag(EXTI_Line7);
EXTI_ClearITPendingBit(EXTI_Line7);
}
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
EXTI_ClearFlag(EXTI_Line8);
EXTI_ClearITPendingBit(EXTI_Line8);
}
}
加载中...
1
2
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
共7个中断服务函数。所以最多同时7个。
---------------------------------
今天做了这样的实验 将PC6 C7 C8都连接一个按键作为外部中断输入端,结果出现这样的情况:按三个中的任意一个按键,都会进中断,但是进中断函数后 无法判断是哪个触发了中断,有时按PC6按键 结果程序跳进了if(EXTI_GetITStatus(EXTI_Line7) != RESET)这里 或者if(EXTI_GetITStatus(EXTI_Line8) != RESET) 请问这是什么问题?我的程序是不是哪里错了? 请有经验的大指点一下 谢谢
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);
EXTI_InitStructure.EXTI_Line=EXTI_Line6|EXTI_Line7|EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
void EXTI9_5_IRQHandler(void)
{
/*
delay_ms(10); //消抖
if(KEY0==0) {
LED0=!LED0;
}
EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5上的中断标志位
*/
if(EXTI_GetITStatus(EXTI_Line6) != RESET)
{
EXTI_ClearFlag(EXTI_Line6);
EXTI_ClearITPendingBit(EXTI_Line6);
}
if(EXTI_GetITStatus(EXTI_Line7) != RESET)
{
EXTI_ClearFlag(EXTI_Line7);
EXTI_ClearITPendingBit(EXTI_Line7);
}
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
EXTI_ClearFlag(EXTI_Line8);
EXTI_ClearITPendingBit(EXTI_Line8);
}
}
一周热门 更多>