OpenEdv-开源电子网

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

STM32多个IO同时输入怎么及时处理

[复制链接]

10

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
589
金钱
589
注册时间
2020-5-12
在线时间
117 小时
发表于 2021-2-13 09:17:59 | 显示全部楼层 |阅读模式
当我们在做一个项目时,碰到到多个IO输入或者与串口屏通信时数据流改变了程序里多个参数的值,这时候我们需要怎么去监控这些IO或者参数(不可能用判断语句吧,这样耗时太长程序又累赘)。并且多个IO输入进来时,我们程序也得执行相应的动作,那么也不可能一个一个去判断吧。请大神门指教一下萌新,该怎么监控这些IO和参数,当这些IO状态或者参数值改变时,让程序执行相应的动作。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

87

主题

569

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2014-9-30
在线时间
140 小时
发表于 2021-2-13 09:40:09 | 显示全部楼层
尽量 把 这些 IO 口 安排在 一个 PA , PB , PC , PD 口上 啊。

使能 对应的 EXIT 中断 吧,然后 如果事件是 非相关的 ,你还是得 逐一处理。
回复 支持 反对

使用道具 举报

10

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
589
金钱
589
注册时间
2020-5-12
在线时间
117 小时
 楼主| 发表于 2021-2-13 09:46:05 | 显示全部楼层
caosix 发表于 2021-2-13 09:40
尽量 把 这些 IO 口 安排在 一个 PA , PB , PC , PD 口上 啊。

使能 对应的 EXIT 中断 吧,然后  ...

那有种情况是这样的:我在用PWM来驱动电机,当多个IO同时输入进来时,这个时候需要及时处理,这样子怎么解决?我刚刚搜到一个文章讲的是IO多路复用,这个功能能够解决吗
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8046
金钱
8046
注册时间
2014-8-13
在线时间
1596 小时
发表于 2021-2-13 11:22:36 | 显示全部楼层
2541942034 发表于 2021-2-13 09:46
那有种情况是这样的:我在用PWM来驱动电机,当多个IO同时输入进来时,这个时候需要及时处理,这样子怎么 ...

几种方案吧,不知道哪种可行,没具体实验过,胡乱说几句,有参考价值你就参考,没参考价值就当我是空气。
1、扫描。缺点:不能rt,会漏掉信号。
2、中断。缺点:处理过程不能冗长,中断资源紧张。
3、使用外部寄存芯片和存储器,扩展MCU的“事件”处理能力,甚至多个MCU并行处理。
4、第三条说到了“并行”,那就得请出FPGA这个并行处理神器。FPGA处理这样的事物非常适合。


不知道具体项目是什么样的,具体情况具体分析吧
回复 支持 反对

使用道具 举报

87

主题

569

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2014-9-30
在线时间
140 小时
发表于 2021-2-13 16:38:44 | 显示全部楼层
本帖最后由 caosix 于 2021-2-13 16:56 编辑
2541942034 发表于 2021-2-13 09:46
那有种情况是这样的:我在用PWM来驱动电机,当多个IO同时输入进来时,这个时候需要及时处理,这样子怎么 ...

【当多个IO同时输入进来时,这个时候需要及时处理,】——你这实际上

是一个 软件编程技巧 问题 。。除非 真的是 计算太复杂 CPU 算不过来 、

那就需要 提升 CPU算力 ,这,,,没有捷径可走 ,除非 某个数学家
发现了 针对你的应用的 新算法 能大幅度 减少计算量 。。。。。。

你 更多 想表述的是:其实是 任务调度 如何最省时间 ,那就只能遵循
一些 单片机编程的 【基础性 技巧】 四楼的 “mack13013” 已经
给你说明确了一部分技巧。。

其实 还得靠你自己 把握一个 【最基本的原则】:
—— 不要让 CPU 去 【空等 某个事件】
,你可以
自己创建一个“非标准的 最简单的 多任务 调度”

方法是中断程序中“只负责记录下某个、某些个事件”
而把处理这个事件的程度放在 “主 while(1)框架中”
如果你的“主 while(1)框架” 满负荷循环一圈,仍然
处理不完全部待处理事件、新的事件又来啦,那就是
CPU算力不足,不得不升级 CPU 。。。

依照现在的单片机 观点去看:1990 年代 算力很弱
的Z80 八位单片机,就能作出 100门的 程控交换机,
那是将 软件编程 精益求精 做到极致 了 。。。

所以 大多数 感觉 CPU 不够用的情况
都是 错误的去让 CPU 空等 某个事件


回复 支持 反对

使用道具 举报

10

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
589
金钱
589
注册时间
2020-5-12
在线时间
117 小时
 楼主| 发表于 2021-2-14 08:08:01 | 显示全部楼层
caosix 发表于 2021-2-13 16:38
【当多个IO同时输入进来时,这个时候需要及时处理,】——你这实际上

是一个 软件编程技巧 问题 。 ...

好的,谢谢大佬
回复 支持 反对

使用道具 举报

10

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
589
金钱
589
注册时间
2020-5-12
在线时间
117 小时
 楼主| 发表于 2021-2-14 08:08:54 | 显示全部楼层
caosix 发表于 2021-2-13 16:38
【当多个IO同时输入进来时,这个时候需要及时处理,】——你这实际上

是一个 软件编程技巧 问题 。 ...

收到,谢谢大佬指点
回复 支持 反对

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3369
金钱
3369
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-2-14 18:31:32 | 显示全部楼层
多个同时IO输入最有效的就是只用中断处理。
如果串口屏改变了程序里多个参数的值,程序按状态机执行对应处理措施。
最重要的是你要理解你的任务时间,然后用合适主频的MCU。
PWM驱动电机尽量用单片机内硬件执行,来了IO一点不影响。另外电机驱动一般频率较低,100HZ足够了,这跟MCU几十M的主频没法比,即使完全用软件生成PWM也绰绰有余。
回复 支持 反对

使用道具 举报

0

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
632
金钱
632
注册时间
2016-3-30
在线时间
67 小时
发表于 2021-2-14 21:05:13 | 显示全部楼层
5楼的方法是正确的。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 12:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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