OpenEdv-开源电子网

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

哪位大神给我讲解一下IO口和FSMC的详细区别,越详细越好,谢谢了。

[复制链接]

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
发表于 2018-8-18 20:15:53 | 显示全部楼层 |阅读模式
10金钱

最佳答案

查看完整内容[请看2#楼]

这个问题你好像已经问过了, 我也回答过: FSMC即灵活的静态存储器控制器,是用来驱动外部总线的。 如果你用过51的话,就知道51有专门的数据线、地址线(部分数据线和地址线是共用的) 而STM32做了改进,使这些数据线、地址线并不专用(因为STM32已经有内部FLASH和RAM,很多情况下已经够用,在这种情况下,如果再专用的话,对外部引脚就是一种极大的浪费) 可以作为通用IO来使用。 当使用FSMC的总线功能时,就必须按照时序来 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-18 20:15:54 | 显示全部楼层
这个问题你好像已经问过了,
我也回答过:
FSMC即灵活的静态存储器控制器,是用来驱动外部总线的。
如果你用过51的话,就知道51有专门的数据线、地址线(部分数据线和地址线是共用的)
而STM32做了改进,使这些数据线、地址线并不专用(因为STM32已经有内部FLASH和RAM,很多情况下已经够用,在这种情况下,如果再专用的话,对外部引脚就是一种极大的浪费)
可以作为通用IO来使用。
当使用FSMC的总线功能时,就必须按照时序来运作。
而通用IO往往是相对独立的,其时序是根据应用来控制,没有总线那么严格。比如你想让LED0先亮、LED1再亮,这也是一种时序,只不过你没有用时序这个词而已。
有时候用通用IO来模拟SPI、IIC等总线的时候,时序的问题就又显得很重要了。

如果你的FSMC还没有搞定的话,纠结这二者的区别是没有意义的。 还是把重点放在时序要求上吧。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-8-18 21:50:58 | 显示全部楼层
warship 发表于 2018-8-18 21:46
这个问题你好像已经问过了,
我也回答过:
FSMC即灵活的静态存储器控制器,是用来驱动外部总线的。

我那个弄12864的屏的任务已经完成,不过我想更加详细的知道他们的区别。能不能再给我讲讲。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-8-19 00:39:08 | 显示全部楼层
FSMC是硬件的
IO是软件模拟。
速度FSMC快。
灵活性,IO好。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-19 09:52:34 | 显示全部楼层
本帖最后由 warship 于 2018-8-19 10:00 编辑
ljfljf 发表于 2018-8-18 21:50
我那个弄12864的屏的任务已经完成,不过我想更加详细的知道他们的区别。能不能再给我讲讲。

恭喜完成。
这个真的没法给你通俗易懂地讲得更详细了。
看起来你没有玩过51,我给你讲讲历史吧。
最早CPU要访问外部RAM需要三条总线:地址总线、数据总线(以16条地址线8位存储器为例)和控制总线
地址总线:A0到A15共计16根地址线
数据总线:D0到D7共计8根数据线
控制总线:至少包括读写控制等控制线
CPU要访问外部RAM,就得靠这些线来进行控制,
首先在这16根地址线上呈现地址值,指示要访问的目标地址,使得外部RAM可以定位到存储单元;
接着,要让控制总线上呈现是读还是要写,好让外部RAM做好准备;
最后,如果是读,则外部RAM就把指定地址存储器的值8位呈现在D0到D7上,由CPU取走。
如果是写,则CPU自己把8位值输出呈现在D0到D7上,由外部RAM接收后改写存储器的值。
这整个过程都是由硬件来实现的,完全没有任何一句用户代码来参与的,是CPU设计之初就定义实现好的,这个过程的时间关系就叫做时序。一定要记住一点,总线是硬件实现的,有严格的规定好的时序。
可以看到,这种对引脚要求是比较多的,16条地址线加8条数据线再加控制线必须有25根线以上,所以8051为了省线,将8条数据线和地址线的低8位进行了时分复用(称为AD0到AD7),这样就可以省掉8根线,但代价是必须由外部增加锁存器来锁存地址的低8位(现在的外部RAM可以理解为将锁存器做到了芯片中)。但过程仍是上述描述的内容。即使这样,仍需要引脚近20根,如果存储量大,地址线更多,这些线就是STM32的FSMC,FSMC即灵活的静态存储器控制器,就是用来驱动外部总线,做上面所描述的工作的。为什么说是灵活的,我想主要是因为它可以通过事先对一些时间等参数进行设置调整,可以适应不同厂家参数有差异的SRAM或者像LCD、OLED等类似外设。但这些参数设定一次之后,整个控制时序关系就固定了,总线在具体工作的时候就不再需要用户来操心了,这就是硬件实现的优点,速度快且不占用CPU的计算资源。
至于IO,我想就不用解释了,就是CPU的输入输出端口,可以由CPU控制读写的一个个外部引脚,既然可以控制,就有人仿造总线的时序,用多个IO来通过软件控制的方式来模拟外部总线,比如8051没有SPI接口,就可以用至少三个IO口来分别模拟SCLK时钟,MOSI和MISO数据线。事实上,你也可以用二十几个IO来模拟上面所说的三条总线,但每一次的读写你都得按照时间顺序来控制这二十几个IO端口,你可以把它编好后写成函数,但仍然是占用CPU大量资源的,这就是软件实现的弊端,速度慢且占用CPU的计算资源。
STM32向外提供了灵活的总线访问接口即FSMC,无须你用IO来模拟,就如同8051的地址数据总线一样以硬件的方式来自动工作。不仅如此,如果你的系统用不到FSMC接口,STM32还可以把预备FSMC使用的端口让出来,使它可以当成普通IO一样来使用,从而节省宝贵的外部引脚空间。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-8-21 17:32:59 | 显示全部楼层
warship 发表于 2018-8-19 09:52
恭喜完成。
这个真的没法给你通俗易懂地讲得更详细了。
看起来你没有玩过51,我给你讲讲历史吧。

谢谢讲解,懂了许多,麻烦了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 20:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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