由FSMC想到的一点疑问,我知道肯定是我单片机基础没学好,空中楼阁了,特来请教。

2019-08-17 00:49发布

本帖最后由 oyixi001 于 2017-3-29 23:13 编辑

我一直都是跟着开发边学边用,所以单片机基础学的差了点吧,都是建立在能用就行的基础上。玩儿STM32也有一两年了,用原子哥的板子很顺手啊。
最近比较闲开始琢磨一些基础性的问题,可能很傻哈。

我理解的,这个FSMC就是把定义在寻址范围内的变量在读或写的时候同样的通过IO的时序把数据写到对应的器件里去,可以是外挂的SRAM、LCD啥的。
比如,原子哥用的lcd  定义WR_REG 0X000007FE; WR_data 0x00000800; 当对这两个地址的变量进行读或写时就会相应地操作FSMC。

然后我就很奇怪,这个变量被强制定义在这个地址,这个地址是什么呢?
我想:1、直接对应片内的RAM某个word? 2、还是直接对应片内的FLASH某个word?3、或者是片内的RAM的一个word然后被强制赋予了一个0x000007fe的地址?
如果是1、2、感觉不可能,毕竟片内RAM没有这么多空间啦。感觉可能是3吧,或者都不对。
还是那句话,单片机原理学的差,东西一多就搅合了,再加上平时还做点汇编的8位垃圾单片机程序,感觉好乱。
求原子哥或哪位大神帮忙理理!@正点原子  。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
来俩不甜的
1楼-- · 2019-08-17 03:08
oyixi001 发表于 2017-3-30 09:25
这个东西我能明白,也都能正常用fsmc。
我只是没明白一点,我们把某一个变量地址强制定义为bank1.4的某 ...

这不是变量,既然你懂汇编,这么说吧,我猜测这是个用于ldr 或者 mov的一个常数,是直接写在代码里的。这个数可以直接用机器代码给求出来的,并不是变量,也不会存在ram里
aozima
2楼-- · 2019-08-17 07:48
定义成 0 就没那么绕了

关于STM32F103偏移地址问题
Tekmarine
3楼-- · 2019-08-17 13:24
本帖最后由 Tekmarine 于 2017-3-30 09:05 编辑

那两个值应该对应的是LCD的CD线在外部总线(FSMC)上的位置,楼主应该知道分别对这两个地址写数据时,外部总线上的A11号地址线的输出电平是是不一样的吧?相当于是选择给LCD写数据或是指令。把那两个值加上FSMC本身的地址,就可以理解为是LCD的数据寄存器和指令寄存器在单片机中的物理地址。
oyixi001
4楼-- · 2019-08-17 14:32
aozima 发表于 2017-3-29 23:32
定义成 0 就没那么绕了

关于STM32F103偏移地址问题

这个东西我能明白,也都能正常用fsmc。
我只是没明白一点,我们把某一个变量地址强制定义为bank1.4的某个寻址地址,然后这个变量肯定是存在RAM里的嘛,如果这个变量是定义的全局变量,这个RAM就不够用好么,毕竟bank1.4的寻址范围比片内RAM大好多,主要我就是纠结这个。
如果每一个FSMC的寻址地址都需要对应一个变量的地址,RAM不是完全不够用么?还是说C语言编译时处理了RAM资源。
oyixi001
5楼-- · 2019-08-17 20:07
 精彩回答 2  元偷偷看……
小陀螺爱炒蛋
6楼-- · 2019-08-17 23:55
32bit处理器可以寻址4G地址空间,ST在设计的时候会把对应的地址映射到不同的外设或者存储设备上面去,液晶的时序和NOR Flash的时序可以兼容,所以可以直接配置FSMC的NOR Flash的地址读写方式来读写液晶控制器的寄存器~

一周热门 更多>