打印

请问,STM8最多支持多少个外部中断呢?

[复制链接]
6347|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sdc666|  楼主 | 2011-11-7 12:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,
     我最近用STM8在做一个项目,需要用到48个外设,都需要中断来访问,请问,STM8能实现48个外部中断访问么?并且,中断优先级采用先到先处理的方式,请问,这样能实现么? 谢谢。
沙发
yinyangdianzi| | 2011-11-7 12:49 | 只看该作者
LZ,可以自己先尝试一下

使用特权

评论回复
板凳
sdc666|  楼主 | 2011-11-7 13:14 | 只看该作者
yinyangdianzi,你好,谢谢。
因为现在要做方案,所以需要评估通过后才可以开始。 如果STM8达不到48个外部中断的话,我就需要换其他型号,或者外加FPGA做中断控制器了。谢谢你。

使用特权

评论回复
地板
香水城| | 2011-11-7 13:28 | 只看该作者
不知道你的外部中断是什么概念,如果是通过I/O端口产生的中断这个概念,则STM8达不到48个外部中断,你需要使用外部电路辅助实现。

使用特权

评论回复
5
sdc666|  楼主 | 2011-11-7 15:20 | 只看该作者
4# 香水城
谢谢 香水城,我也查了好多资料,STM8确实中断IO太少了。 我是想利用IO产生中断,我看了看STM32,中断数目比较多,能达到两百多个,但是我发现每8个中断IO共享一个中断源,这样的话,STM32到底能支持多少个外部中断设备呢?
这48个外部设备,要求任何一个有动作时都向STM32发送中断请求,STM32 收到中断后,进入相应的中断程序。
这应该如何实现呢? 谢谢。

使用特权

评论回复
6
香水城| | 2011-11-7 17:25 | 只看该作者
STM32的每个I/O端口都可以产生外部中断,但不同端口且相同编号的引脚是相或的(例如PA0和PB0,PC4和PE4等),你必须通过其他途径判断是哪个引脚产生的中断。

很好奇,你要做什么产品,需要这么多外部中断? 一定要每个中断源都互相独立吗?

使用特权

评论回复
7
sdc666|  楼主 | 2011-11-7 17:45 | 只看该作者
6# 香水城
斑竹你好,我做一个电子抽屉,抽屉里有48个可以活动的小格子,每个格子里面都有一个STM8,通过插针和抽屉底板相连,这个抽屉总的控制器为STM32,格子的STM8与STM32采用RS485进行通信。

这个抽屉的工作要求:
1、要求能知道每个格子的物理位置,即要知道每个格子处于抽屉的什么位置,当格子换了位置后,也可以知道其最新的位置。
2、要求,STM32 发送数据到其指定的格子上的STM8,STM8收到后会点亮LED。
3、当任一格子上的STM8上的按键动作时,都向STM32发送中断请求,STM32收到后就通过RS485接收STM8发送的信息。

我一开始想用主机轮询查询方式实现,通过RS485发送地址信息,但是,没有办法确定格子的空间物理位置,所以想用STM多余的48个引脚来分别接到48个格子上。这48个引脚担当两个作用:1、接收格子的中断。2、格子的使能线。

总之有点复杂,因为要求实时性很强,我暂时还没有想到什么好的解决办法。 也不知道,STM32如何提供这48个中断。

希望斑竹帮忙分析一下。谢谢!

使用特权

评论回复
8
sdc666|  楼主 | 2011-11-7 17:50 | 只看该作者
6# 香水城
我之前想过,如果STM32实现起来比较麻烦,或者干脆不能实现,我就用FPGA做一个中断控制器,来判断是哪个引脚发生的中断。 我看了n个文档和例子,但是,没有说到这么多中断的用法。 或者,我应该用个更简单的办法,比如,把所有的外设做成一个中断来触发STM32,然后STM32再去判断是谁发出的中断。 还是觉得复杂,呵呵。 请教斑竹给个建议。 谢谢。

使用特权

评论回复
9
香水城| | 2011-11-7 18:10 | 只看该作者
哈哈,原来是这样。

如果你已经考虑过主机轮询查询方式实现,你应该可以很方便地按照这个思路走下去。基本原理就是把每个格子编号,每个STM8也编号,在主机轮询时,每个STM8发送它自己的编号同时发送它所在格子的编号即可。

给格子编号也很容易实现,48个地址需要至少6位表示,你可以在每个格子上放一个6针的插座,每个针按照格子的编号分别拉高或拉低;在STM8的板子上对应格子插座的位置,设计一排插针,这样就可以读出格子的地址,并发送到主机。为了容错,可以考虑多于6个插针表示地址。

使用特权

评论回复
10
sdc666|  楼主 | 2011-11-7 22:14 | 只看该作者
9# 香水城
谢谢斑竹,很感激您能给我建议。 地址的办法就按照您的建议做啦,心里有底了,呵呵。
但是,我想提高实时性,因为,采用轮询方式太慢了,我们后期还有增加格子。这样查询一圈就要1秒钟了。 如果想用中断的方式通信,是不是就需要扩展中断了? 我想了一下,用cpld做一个IO口查询器,将48个En线都接上,当有一个En有动作时,就通知STM32的中断,然后读取CPLD,CPLD将动作的IO号码发给STM32,STM32再根据这个号码发送相应的信息。
我发现这样一来,程序的复杂程度就大了好多,轮询的方式程序还是很简单的。
谢谢斑竹。很感激。

使用特权

评论回复
11
pkat| | 2011-11-7 22:48 | 只看该作者
电子抽屉,很新鲜啊

使用特权

评论回复
12
Cortex-M0| | 2011-11-8 02:55 | 只看该作者
电子抽屉,超市用的~~~

使用特权

评论回复
13
sdc666|  楼主 | 2011-11-8 08:09 | 只看该作者
12# Cortex-M0
恩,对的。谢谢。 请问,您有什么建议么?可否指教,谢谢。

使用特权

评论回复
14
香水城| | 2011-11-8 09:35 | 只看该作者
9# 香水城
谢谢斑竹,很感激您能给我建议。 地址的办法就按照您的建议做啦,心里有底了,呵呵。
但是,我想提高实时性,因为,采用轮询方式太慢了,我们后期还有增加格子。这样查询一圈就要1秒钟了。 如果想用中断 ...
sdc666 发表于 2011-11-7 22:14


轮询方式可能是慢一点,但你可以多用几个通道嘛,比如用4个485通道,这样每个通道只负责12个格子,询一圈的速度就快多了,只要程序安排好,4个通道还可以并行操作。

使用特权

评论回复
15
icecut| | 2011-11-8 10:11 | 只看该作者
不用想了.你这么多中断.软件肯定处理不过来....放弃吧.
选用优先级轮询吧.或者.优先级分组中断.stm32吧

使用特权

评论回复
16
sdc666|  楼主 | 2011-11-8 10:26 | 只看该作者
14# 香水城
谢谢您,我明白啦,O(∩_∩)O谢谢。

使用特权

评论回复
17
sdc666|  楼主 | 2011-11-8 10:26 | 只看该作者
15# icecut
谢谢,我还是用其他办法吧,谢谢。

使用特权

评论回复
18
zhang@long| | 2011-11-8 10:39 | 只看该作者
我是新手,学习中!

使用特权

评论回复
19
zhang@long| | 2011-11-8 10:39 | 只看该作者
我是新手,学习中!

使用特权

评论回复
20
afeisky| | 2011-11-8 13:37 | 只看该作者
0xff个。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

83

帖子

0

粉丝