本帖最后由 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位垃圾单片机程序,感觉好乱。
求原子哥或哪位大神帮忙理理!
@正点原子 。
这不是变量,既然你懂汇编,这么说吧,我猜测这是个用于ldr 或者 mov的一个常数,是直接写在代码里的。这个数可以直接用机器代码给求出来的,并不是变量,也不会存在ram里
关于STM32F103偏移地址问题
那两个值应该对应的是LCD的CD线在外部总线(FSMC)上的位置,楼主应该知道分别对这两个地址写数据时,外部总线上的A11号地址线的输出电平是是不一样的吧?相当于是选择给LCD写数据或是指令。把那两个值加上FSMC本身的地址,就可以理解为是LCD的数据寄存器和指令寄存器在单片机中的物理地址。
这个东西我能明白,也都能正常用fsmc。
我只是没明白一点,我们把某一个变量地址强制定义为bank1.4的某个寻址地址,然后这个变量肯定是存在RAM里的嘛,如果这个变量是定义的全局变量,这个RAM就不够用好么,毕竟bank1.4的寻址范围比片内RAM大好多,主要我就是纠结这个。
如果每一个FSMC的寻址地址都需要对应一个变量的地址,RAM不是完全不够用么?还是说C语言编译时处理了RAM资源。
一周热门 更多>