keil5没有stm3251基础,能不能学好STM32

& & 我在想很多学习stm32的,和我一样是学生,当时问他为什么学习stm32他也不知道,我们所知道的就是各个论坛讨论stm32的很多,而我们很多人之所以学习stm32是很多的淘宝卖家做了大量的图片文字宣传,于是我们经不住诱惑就买了板子,然后我们就开始了我们的学习之旅。
&&& 在淘宝卖家的眼里有着齐全的入门资料是板子的最大的卖点,于是当我们拿到开发板的时候,我们可以什么都不用做,直接使用已经建立好的工程模板,或者我们想学习下的话就按照他们的教程拷贝几个文件然后添加下,然后我们就以为我们的stm32入门了,心中暗喜stm32不过如此,哈哈!其实这就是曾经的我,但是随着慢慢的学习一方面我们失去了兴趣,感觉这玩意太乏味,另外一方面心中的恐惧随之而来,我们感觉我们永远不能和别人说自己熟悉stm32,因为脱离了网络的资料我们什么都做不了,这是我们最害怕的事情。
&&& 今天我就就像在这里记录下自己一无所有建立stm32工程的过程,是我自己的一个探索过程,同时也是大家互相交流的过程。
第一步:当然是新建一个工程我把它命名为small(这个随便你,青菜萝卜各有所爱&&)
第二部:就是选择芯片的型号了,这个按照每个人手上的板子的不同就选择不同的芯片型号。
选择完了之后按确认,然后会出来一个对话框,是问你要不要添加启动文件的,这个简单我们都是白手起家了,别人好不容易送你点东西我们当然照单全收,直接点是啊!哈哈。。。。。
点完是后我们的工程就是差不多建立好了,大家可以看到里面就一个代码文件,是以.s结尾的,是一个启动文件里面的代码全是汇编的,看了有点晕死。。。。,以后再说吧这个。。。。
要不我们编译了看看结果?
一串鸟文的错误,看不怎么懂,但是好像是说什么没有main函数。想想也是啊,自己确实没写main函数,要不我们自己建立一个.c文件,然后写一个main函数?说做就做。。。。。
直接点击file下面的新建图标,然后写一个名字保存,注意别忘保存好之后在工程里面&add files to group&,然后我们再自己写一个空的main函数,大家看看我做的对不对?
这下可以编译了吧?
编译有警告说什么main函数的返回值必须是int。。。。不知道为什么?
百度看了下好像是编译器和c语言标准规范的问题,没办法那就修改下main函数的返回值吧,把前面的main前面的void变成int就好了。
编译通过了。。。
要不我们接下来设置工程属性看看?这个是很多教程中有的,我不想多少,大家自己找找吧。。。。
你看都可以仿真,哈哈那就说明系统运行起来了。。。。但是我们什么都看不到,接下来我们的任务就是想办法点亮一个led灯。
首先我们要控制灯的话就要操作寄存器,还记得我们在51里面要操作P0口吗?是用P0=0x00,这里面简单的说下51里面操作IO口的原理,我们看到这里有一个P0,这个P0是哪里来的?显然不像是int一样是是c语言本身自带的,也不是某一个变量是我们自己定的,其实这个是在reg52.h里面定义的,有图有真相。
可以看到在我们一直使用reg52.h里面他做了这样一件事情,就是把我们的真实物理地址是0x90的这个P1寄存器和P1这个代名词相互联系了,其实P1只是一个代名词,假如我在reg52.h里面修改 把sfr P1 = 0x90;修改为sfr XX = 0x90;这样也是可以用的,只不过下一次你要对P1口进行操作的时候要写XX=0x00;了,所以为了好记我们就把名字取成P1,现在我们知道了51的原理,我们可以依葫芦画瓢来操作stm32的GPIO,先不管我们要操作什么寄存器,我们要接解决的第一个问题怎么使用c语言操作单片机中知道绝对物理地址的寄存器,比如我们通过查资料RM页知道了关于IO操作的一个寄存器GPIOA_CRL的绝对地址是0xx00(其中0x是起始地址,0x00是偏移地址),接下来我们怎么操作他呢?用 sfr?好像sfr是51汇编特有的指令,在arm里面没有。。。这时候我们是否想到c语言的一个和地址紧密相关的内容----指针,我们在上课的时候知道指针的本质就是地址,这样我们是否可以通过它来把实际的物理地址和c语言变量建立关系呢?首先我们要把绝地地址变为指针变量 ,肯定是强制类型转换了(int*(0xx00))通过这一步我们已经有一个int类型的指针,这个指针指向的地址就是我们GPIOA_CRL的绝对地址(0xx00),有了指针之后我们要取变量,那么很简单只要一个简单的*取变量运算符就可以了(int*(0xx00)),这下变量有了那么我们是不是需要给变量取一个名字啊?
那就这样#define GPIOA_CRL *((int*)(0xx00)) 好了完成了我们终于可以再c语言的环境中操作我们的寄存器了,接下来我们只要给GPIOA_CRL 这个变量赋值就是我们在给GPIOA_CRL 这个寄存器赋值,先休息下再说。。。。。
&&& 这篇文章其实我是一边写代码做测试一边写的,就在上面我想要控制IO的时候花了好长的时间,就是因为自己的不仔细吧!犯了几个小错误。先看我的最终代码。
代码非常的简单,但是为了这几行代码花了我好久的时间,我已经在代码后面写了注释了,具体的怎么来的让我婉婉道来,首先是上面那几行的define的机构我在上面已经介绍过了,具体的地址是怎么知道的?下面我来简单的说下,在stm32的
RM0008 Reference manual
STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx
and STM32F107xx advanced ARM-based 32-bit MCUs
这个开发文档中的44页内存映射表,如下图
我截图的只是上半部分,还有下半部分,在下半部分我们可以看到
从这里可以看到和GPIOA相关的寄存器的起始地址是0x所以代码中的一开始的基址是这个,然后我们需要知道不同的寄存器的偏移地址,这个是在后面的跳转的链接可以看到的,跳转到179页,偏移地址的表格
这样的话上面的几个define的计算也就水落石出了。
&&&&&&& 这里简单的说下自己当时犯的一个错误。我一开始写的#define GPIOA_CRL *((int*)0xx00) 是这样的,调试后死活不是我想要的工作效果,后来花了好大的力气才想起来原来是宏定义的括号的问题,大家仔细比对下我在代码中的写的和我上面的写法,发现什么端倪没?#define GPIOA_CRL *((int*)(0xx00)) 看到红色的括号没?就是因为一个小小的括号耽误了很长时间。
&&& 花了这么长的时间我们终于可以操作IO口了,那怎么操作呢?在学过51的人的眼里那是很简单的,就是直接把我们要IO口输出的值送到数据寄存器中不就好了,但是毕竟他是高级的stm32,所以要复杂点,首先我们要开启GPIOA的端口时钟,这也许大家会疑惑了,怎么还和时钟有关系了。。。。还是看资料吧!
可以看到GPIOA是挂载在AHB2总线上面的,他们都有自己的时钟信号的控制端,这是由stm32的机构决定的,我想之所以这样做,一方面可以降低系统功耗,让工作的模块的时钟使能,不工作的就不使能,其实这里的时钟信号就好比是模块的心脏一样,只有先让他工作了我们才可以去对他进行操作,这就是代码上&&&& RCC_APB2ENR=0x;//开启GPIOA的端口时钟这一句的作用,我尝试过,假如去掉这一句话的话,即使我后面对寄存器赋值了,也是没有作用的。所以这一句很重要,而且与下面的顺序是不好交换的。接下来就是设置GPIO的工作方式什么输入输出 模式之类的,对于只学过51的人来说有点新鲜感觉,如果学过其他高级点单片机的 估计已经习以为常了,就那么回事,具体的寄存器的每一位我就多说了,直接看stm32f10XXXX参考手册的113页上满写的很清楚了。
这里再顺便解释下下我看到的一个现象,先看文档
从这里面我们知道任何IO在复位之后都处于浮空输入状态,这是PDF上说的通过我的代码大家看到我只是改变GPIOA0这位的状态所以其他IO口应该还是浮空输入的模式,但是实际上是的吗?
看仿真截图:
&&&&&&&&& 大家可以看到其他几个口还是听话的就是PA12 PA13 PA14 PA15不怎么对劲,怎么回事呢?一开始我也疑惑,后来突然想起来了,这不是我们仿真用的jtag口吗?这样的话就对了,于是为了验证我的想法,我查看jtag用的其他IO口的情况,都不是默认的浮空输入模式,这样的话就应该是这个原因了。(提醒大家一下以后设计硬件的时候尽量避免使用jtag口,如果实在避免不了的话在设计程序的时候就要注意关闭jtag模式释放那几个IO口,在此做一个友情提醒因为被坑过几次。。。)
&&&&& 代码写完了,然后编译下载,不出意外的话就可以看到PA0上面接的led灯亮了,这是必然的结果,这一次入门教程也就差不多了。。。,谢谢!
相关代码的下载链接是:
如果有什么错误的话欢迎批评指正!
阅读(...) 评论()学习STM32之前需要学习单片机吗?_百度知道
学习STM32之前需要学习单片机吗?
学习单片机后STM32可以直接就开始学吗?如果学了单片机,哪个更容易,与直接学相比,是不是对学习STM32有好处,学习STM32 ?在什么基础都没有的情况下
提问者采纳
你51单片机的功能,基本上STM32都有,编几个小实验。
好处就是,STM32是51的加强版,学起来,那样起码对汇编语言,可以比喻说,直接学51和直接学STM32是差不多的,也就是说STM32包含了比51单片机更丰富的功能1&gt、STM32、定时器,比如IO口控制。&#47。,很方面、STM32,难度差不多一样。就差不多入门了;3>你就控制51单片机,就是调用固件库的函数,对你以后学更高级的MCU是有好处的。
我自己用过51单片机、掌握,感觉如果有一些C语言基础;2&如果学过51单片机、中断。,那么只要稍微熟悉一下;STM32可以直接学、C语言程序风格、内部寄存器控制,如果学过51单片机,按照文字教程和视频教程学。
你找一块开发板;*选为最佳答案哦亲,那样学起STM32会更加快,呵呵*&#47,就很快能入门STM32;直接学51单片机,因为STM32有C语言的固件库。话说回来,这几个方面更加了解,起码对编程这方面就比较熟悉了
其他类似问题
按默认排序
其他4条回答
模拟电路。学STM32不是说你把例程跑一遍就OK的、C语言和汇编语言的基础一定要有,但是数字电路单片机你可以不学
有单片机的硬件基础是要好些
但是易受到单片机编程的影响
总的来说多学各总知识是不会错的
第一,学习一下不同体系的单片机,如pic,avr,互相之间只需要了解对方的需求,而不要求精通。 在你进来之前请先考虑清楚。但只要我们真的学精
最好学习51单片机
您可能关注的推广回答者:回答者:
stm32的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁正在学习STM32,有C语言和51基础,自己试着建了几个工程,但是不成功。请问有没有讲解的比较详细_百度知道
正在学习STM32,有C语言和51基础,自己试着建了几个工程,但是不成功。请问有没有讲解的比较详细
自己试着建了几个工程。请问有没有讲解的比较详细的书籍正在学习STM32,但是不成功,需要看哪些资料,有C语言和51基础
提问者采纳
你先找一个例程看看,在MDK中都是有例程的。在安装目录中可以找到的
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
采纳率100%
其他类似问题
stm32的相关知识
按默认排序
其他1条回答
百度一下就知道了,重点是把看错误解决问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您的位置: >
主流32位单片机攻略连载:为什么要学STM32?
日 11:57 来源:本站整理 作者:电子大兵 (0)
  为什么学习STM32?
  先列举一下大家问得最多的几个问题,然后我们一起由问题切入进行一些讨论。
  首先问题1:我是单片机好还是直接学STM32好呢?
  答:1)首先我们谈下目的,你学习的最终目的是能够开发产品或者成为项目经理;而目前市场上的单片机都基本用C语言了,用汇编进行开发的项目已经非常少了
  2)在硬件接口这个环节上都一样:学51单片机和学STM32都是一样的,主要看其市场上的资料是不是足够充分,都是调用硬件的接口,控制I/O,完成相应的功能
  3)在软件这个环节上,STM32要强过51单片机:为什么这么说呢?学STM32它自带一个官方的库,而这个库的源代码是开放的;而51单片机却没有,也就说,当你做一个具体项目的时候,用STM32开发项目速度会比用51单片机要轻松快捷,方便,并且BUG也少。
  4)ST的这个库专门是由ST官方团队打造的,是经过详细认真测试过的,例如:你要做处理器支持USB的U盘功能,对51来说,你可能需要在网上去找这样一个驱动,然后移植到51单片机上,这样的缺点是:移植本身就比较累,比较麻烦,并可能有些代码不一定经过验证了的,很难保证没有BUG;而STM32是官方推荐的库源代码,这些功能早就有了,所以用STM32开发项目做起来非常的轻松,愉快,放心,BUG也少。
  5)从选型方面考虑:STM32的性价比与单片机相比,虽说单片机很便宜了,一般市场上就5块钱左右,而STM32最便宜的是10元多一点,但是如果比性价比,STM32还是很要强过51单片机很多,为什么呢?因为首先STM32是72MHZ的主频,而51单片机是10多M,随着未来产品功能增多了,要求越来越高,可能51单片机的速度和性能就满足不了需求,而STM32足够强劲的主频,可以延缓这个问题,使得您的产品周期生命得到延长,而且你有其他新需求也可以灵活增加上来,因为STM32完全有能力负担得起。
  问题2:STM32如何才能快速入门?
  答:首先就是最好具备基本的电子基础,如果您只有纯软件基础,那就应该打扎实C语言基础,然后弄一块开发板,边学边补充硬件电子方面的知识。
  因为软件背景去理论的学硬件,那是非常枯燥的事情,而且效果也不一定理想;那么此时你就需要一款比较的板子,板子大与小,功能多与少都不是那么重要,这里最重要的就是要资料丰富,资料丰富,才是最好的;我当时就从同事那里弄了一块STM32神舟系列的板子,大概花了1,2个星期就正式入门了。以下是我摘抄的关于那个板子的一些特点,大家可以看看:
  特点1:STM32神舟系列的每款开发板都有一个非常详细的几百页的说明手册。有很多爱好者反映,买到的开发板没有手册或手册不全,手册不详细,拿到手后没有什么用,无从下手,那么您可以考虑STM32神舟系列的开发板,其中神舟IV号的手册有将近700多页之多,无论还是从原理还是从代码都是非常值得阅读的资料书籍。
  特点2:开发板所带的例程代码非常好,易懂和方便移植。很多开发板的代码写得很难阅读,不规范,有的甚至是用寄存器实现的代码,可读性非常差,并且不容易重用到新的实际项目中,而STM32神舟系列的开发板,全部用ST的专用库实现,库代码全部开源,库即是将底层寄存器部分代码全部封装成函数,融入了软件设计的架构理念,想跟踪到硬件实现的驱动底层,就跟进对应的函数即可看到一切原始代码,所以您可以有选择的想看寄存器版本就看寄存器版本,想看函数库版本就有函数库版本,无论对实际项目也好,针对学习也好,两全其美!!!
  特点3:神舟系列板子因为系列全,所以技术支持以及技术进一步拓展空间大。许多单独的开发板技术支持根本不行,有的就算是技术支持不错,但是你想更深入一步去学习,就很难了;而成一个完整系列的STM32神舟系列是值考虑和选择的,因为该系列包含了103RBT,VCT,VET,ZET,以及107VCT,207,4XX系列等多个系列的开发板,无论你先学难,再拖展知识面,还是怎么样都好,绝对不怕资料少!没资料!!!而且各个系列之间还可以相互借鉴,相互依存,各个设计的高手非常多,大家一起相互交流,产生更多更新碰撞和资料。
  特点4:硬件资料丰富。硬件资源以及相关资料都比同类开发板要多很多,因为该系列是一个组织在维护和发展,并不是单独的个人爱好所设计的板子,这个组织走在最前沿,不断收集行业内的知识,在神舟系列上进行验证和实现,所以资料也会越来越多。
  特点5:板子的网络接口特别加强。许多STM32开发板没有考虑到网口这块以及无线2.4G(WIFI)和315M通信的例程,随着嵌入式设备在网络方面日益普及,以太网以及无线网都是嵌入式设备中必不可少的一个环节,就算有的嵌入式设备不需要网口,但是做为提供开发板的设计,不可不考虑加强网口这块的例程,代码,讲解,为各个开发爱好者做一个提前准备和设计,而这些接口神舟系列有已经直接运行的代码以及详细的讲解,大家获得相关资料,相互参考一下。
相关技术文章:
相关资料下载:
技术交流、我要发言
发表评论,获取积分! 请遵守相关规定!提 交
32位单片机业界动态
32位单片机技术应用
32位单片机资料下载
单片机技术应用
单片机资料下载}

我要回帖

更多关于 keil5没有stm32 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信