从51到ARM,这路怎么走?(精华在23楼)

2019-12-24 18:39发布

很多人说:有51基础的人很容易入门ARM。我想说,坑爹啊,我就是51走过来的,看ARM几个月了,一点进展都没有,也不太知道从何入手,下面说下我的问题吧,我想也有很多人跟我一样遇上这些问题,所以希望大家仔细看看,并回复我一下,指条明道。
51都是有地址映射的(即SFR,特殊功能寄存器),在头文件reg52.h里面,不知道ARM有没有,且不知道如何调用。以STM32为例,官方有提供个固件库,也就是好几个文件夹和几十个文件,里面有会汇编写的,也有用C写的,貌似也有地址映射,貌似里面的地址映射语句不是像51里面用sfr来表示的,貌似是用#define来定义的,这边搞糊涂了。固件库中还包含了很多打包好的程序,比如说各种传输协议要用到的程序。但我的思维还停留在51,并且我不知道停留在51的这种思维是否是正确的:那就是,完全自己编码,除了sfr定义,包括很多包装好的函数,自己写出来才算学会。这种思维,不知道在ARM学习上是否同等适用,难道学ARM时上了个层次,就直接在别人打包好程序的基础上做产品了吗?必须强调,在上位机,PC软件方面,是得调用操作系统的很多函数、库,这个没办法,因为强大的PC界面及功能,如果底层驱动什么的都自己写的话会累死,而且不一定有成效。但ARM不同,不同在他比PC低一层次,但同时又高51一个层次,所以我纠结了。并且我现在不知何从入手,就算是将固件库搞明白也得花不少时间。但我觉得,如果让ARM点亮一个小LED,应该用不上那么多固件库或函数,只要能点亮个LED就行,这么低的要求,应该是用到很少的语句及配置程序,但网上所有的教程基本上首先就教你:如何调用所有的官方库。这无疑让初学者陷入泥潭,晕。
说得很乱,初学者就这样,我现在回头看看我之前学51时问的问题,也觉得那些问题很没逻辑。但请理解,如果有什么问得无厘头的地方,多多包含!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
100条回答
raxfeer
2019-12-26 23:58
本帖最后由 raxfeer 于 2012-3-27 14:22 编辑
Etual 发表于 2012-3-27 13:44
楼主,不要急,任何东西都是有一个学习的过程的。
从本质上看,STM32只是功能强一点的单片机,所以跟51没啥 ...


stm32f10x.h 这个里面貌似就是STM32的地址映射了里面的映射地址好几千行(我用Keil打开下是8K多行,实际的地址映射语句可能没这么多,但至少上千),我很难想像你们是如何记住这些地址并使用的。
我想,如果要写一个程序的话,估计只调用这个库就行了,其它的库都是在这个地址映射的基础上进一步封装。
我不是不懂C语言,更不会看不懂,说从51走过来,如果没把51学会(这里不能说完全学会,估计也没人敢说完全会),就不敢说从51走过来的。
我希望得到几个回答,其实从1L就问了,只是大家都被我问得晕头转向了,下面整理下问题:
1.ARM是否也有跟51类似的SFR(特殊功能寄存器)?
2.这些特殊功能寄存器的地址是否也是跟51一样映射到某些直观的字符,比如说51里面的P0是映射到0x80地址代表P0口:sfr P0=0x80;
3.如果叫你不调用任何函数或库,写出点亮一个LED,最简单的程序(STM32),怎么写?举个例子,如果这题对应是51的话,程序如下:
sfr P1=0x90;     //0x90地址对应P1口,选P1口是因为它有内部上拉,避免网友思路走偏的问题。关键:没有#include<reg52.h>。
main()
{
  while(1)
   {
     P1=0xFE;    //0xfe==1111 1110,所以相信大家已经能想像电路的样子了:P1.1接LED+电阻+VCC+5V
   }
}
好了,现在请神人们写个最简单的点亮LED程序(STM32),不要调用库的。

一周热门 更多>