
玩转STM32
caimouse
在IT行业有20多年的经验。拥有20多年的C和C++开发经验,5年以上Python开发经验,资深数据库开发、上百G数据库优化经验。曾经任职嵌入式工程师、P2P开发工程师、银行信用卡交易系统工程师、全自动化电池测试部门经理。
展开
-
玩转STM32(1)入门硬件的基本条件
2019年又快过去两个月了,大批大批的人员又出外寻找工作,大批大批的公司又在网上不断地招人,一个基本的嵌入式工程都能拿到万元的月薪,说明嵌入式开发的市场还在高速地发展,嵌入式的软件市场也在飞速地状大。由于嵌入式软件都是在设备里,相对PC软件来说更容易实现价值,即使软件非常简单,比如万行级别的软件就可以实现很好的功能了,如果这样万行级别的PC软件,很难卖出一个价钱来的,现在PC上的软件都是几十万行,...原创 2019-03-02 13:30:44 · 2246 阅读 · 0 评论 -
玩转STM32(16)理解复位函数
前面搞定了栈顶的问题,接着下来,可以从复位矢量表里,看到如下:__Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Hand...原创 2019-07-06 21:14:34 · 2513 阅读 · 0 评论 -
玩转STM32(17)理解SystemInit函数
前面分析了复位函数,在那里发现它要调用SystemInit函数,那么这个函数是做什么用的呢?从名称上来看它就是系统的初始化函数。这个函数在复位之后,就要立即调用的函数,可见它是非常关键的底层函数,这个函数主要内容包括对系统时钟初始化(时钟源选择、锁相环设置、分频系数配置、AHB/APB的频率、FLASH配置)。下面就来对这个函数的源码进行一行一行地分析,以便掌握这个函数的作用。Syste...原创 2019-07-10 08:40:49 · 2197 阅读 · 0 评论 -
玩转STM32(14)运行第一行代码
前面学习了选择从那里进行加载代码,接着下来,我们将要了解CPU是怎么样运行编译的代码。通过前面的学习,我们知道通过编译器的编译,会生成可运行的代码,然后通过JLINK下载到STM32的FLASH里,再通过配置CPU的引导管脚,实现选择内部FLASH来加载代码。但是CPU是怎么样来加载代码,并运行的呢?其实不同类型的CPU运行代码的方式不一样,STM32的运行方式是这样的,CPU 将从地址...原创 2019-06-27 11:55:13 · 2265 阅读 · 0 评论 -
玩转STM32(15)确定栈的位置和大小
前面学习了怎么样确定CPU加载运行第一行代码,在那里发现需要加载栈指针,那么你也许会问为什么要首先加载栈指针呢?难道栈就是这么重要?在这里,我们就来探讨一下栈的问题,比如栈的位置和大小。在现代的CPU技术里,往往有中断系统,这就决定了CPU必须有栈的结构,因为中断出现时,需要把当时CPU运行的数据进行保存,以便中断处理之后再恢复回来。如下图这样处理:如果没有栈,就没有办法保存当前...原创 2019-07-01 17:24:10 · 4074 阅读 · 0 评论 -
玩转STM32(13)存储空间的开始地址
前面学习了怎么样选择不同的储存器来加载代码,也就是运行代码,决定了从哪里开始运行的问题。但是CPU选择了储存器之后,还要知道代码是从存储器哪一个位置开始读取代码?也就是从哪一个地址开始读取代码?现在就来解决这个问题。我们知道32位的CPU有4G的地址空间,因此从哪一个地址里读取代码,就有很多的选择了。至于放在什么地址,一般是由CPU的生产厂家来决定的。在这里可以查看到STM32F407的内部Fla...原创 2019-06-20 17:08:57 · 4379 阅读 · 1 评论 -
玩转STM32(10)CPU的脉搏
前面学习了怎么样下载程序到开发板, 并且可以运行起来,看到LED灯轮回地亮灭。你也许很好奇为什么LED会轮流地亮灭,像拥有生命一样,具有周期性地工作。要解决这个问题,我们得学习CPU的脉搏,那么什么是CPU的脉搏呢?其实CPU就是一堆泥沙和一些金属组成的,本身是不具备这种生命的特性,那么它周期性地工作的秘密又是什么呢?其实CPU之所以有这种特性,是因为它靠一个振荡电路来实现,这个振荡电路就是CPU...原创 2019-06-04 13:49:22 · 695 阅读 · 0 评论 -
玩转STM32(12)代码存储空间的选择
前面了解了CPU怎么样拥有跳动的心脏,那么它拥有了开启自动化执行的生命之路。如果学习过CPU原理之类的硬件,就知道CPU在每一个脉冲信号之下,就向前运行一步,像168MHz频率的CPU,运行一步是很短的时间。不过CPU运行的原理是很简单的,可以设想纸带上有一些图案,比如圆、三角形、四边形,当这张纸带经过一个机器时,碰到圆就加一,碰到三角形就减一,碰到四边形就输出当前计数,这样简单的机器就是一个计算...原创 2019-06-13 17:27:32 · 1974 阅读 · 0 评论 -
玩转STM32(11)CPU的心跳历程
前面说CPU怎么样才有脉搏,也就是给CPU装了一个心脏,这样这个由泥沙组成的CPU才能开始拥有像生命的力量了。在前文后面,提到了使用25MHz晶振作为外部的频率来源,但是我们的目标是让CPU工作在168MHz的频率,这样才可以让CPU工作得更快,运行代码更快,效率更高。当然,如果你想让CPU工作在25MHz也是可以的,只是有点不值得,用这么贵的硬件,运行这么低的频率。要想快,就得提高CPU运行的频...原创 2019-06-06 18:25:12 · 1583 阅读 · 0 评论 -
玩转STM32(6)初识编译环境
前面已经介绍了怎么样找到项目的工程文件,只要双击那个文件就可以打开整个项目工程,进入代码开发调试环境。在很多年以前,开发软件还是很困难的事情,因为那时候编译环境非常不友好,不是图形界面,而是基于文本的界面,并且还不是集成开发环境,是分离的。当你在编辑器里写了代码之后,然后再保存成文件,然后退出编辑器,再来到命令行的环境下面,输入调用编译器的命令,才可以编译源码。如果编译有问题,要先把出错的行号和列...原创 2019-04-25 17:37:55 · 847 阅读 · 0 评论 -
玩转STM32(9)下载程序到Flash
前面介绍了怎么样设置JLink调试器,这样就架起了一座开发电脑与开发板之间的桥梁,有了这个桥梁,就可以把程序下载到STM32的CPU里了。那么样在软件上怎么样操作呢?在说软件怎么样操作之前,先强调一下,硬件要按前面的文章那样连接好,也就是JLink的JTAG接口与开发板的JTAG接口相连接,开发板的电源接好,然后JLink的USB接口接到电脑上,这样就把硬件配置好了。当你插入JLink的USB接口...原创 2019-04-28 17:01:10 · 1483 阅读 · 0 评论 -
玩转STM32(8)配置JLink调试器
前面已经介绍了怎么样编译项目,生成一个HEX文件,但是这个目标文件还是储存在电脑上,这样你辛苦写出来的代码,还是一个没有什么作用的文件,即使已经把开发语言变成了机器语言,也是无济于事的。那么怎么样才能把这个目标文件搬到STM32的CPU里面呢?这是有很多种方法的,比如采用STM32的烧写器;比如把目标文件发送给ST公司,让生产这个CPU时,直接写入去;在我这里采用开发的模式,就是使用前面介绍的JL...原创 2019-04-27 13:39:43 · 2027 阅读 · 0 评论 -
玩转STM32(7)第一次编译
前面介绍了认识开发环境,当然你学习上面这些知识还不会进行编译一个项目的,那么你也许会急着想知道下一步怎么办?怎么样才可以把这个项目编译出来,或者烧写到开发板里进行测试。下面就来解决编译这个问题,编译原因在前面已经说过,就是把人类理解的语言转换为机器语言。在Keil的集成开发环境里,界面上主要有四个编译选项,如下图所示:下面来从左到右来介绍这四个编译选项的使用和意义,第一个选项是编译一个文件...原创 2019-04-26 13:08:04 · 556 阅读 · 0 评论 -
玩转STM32(5)找到启动文件
前学习了目录分类的重要性,可以看到分为三个目录,那么你选择哪一个目录点击进入去呢?因为我们要打开项目工程,那么就需要找到开发工具的工程文件,因此就需要打开工程的目录Project,就是这个目录命名的原因。在这个目录下面放置所有与目录相关的文件,当你打开这个目录时,就可以看到目录大体如下:在这里一眼看到最醒目的图标那个就是启动工程文件,只要双击这个文件就可以打开工程了。你也许想问其它文件是做...原创 2019-03-16 20:42:52 · 5083 阅读 · 2 评论 -
玩转STM32(4)学会目录分类
前面已经知道怎么样来得到第一个嵌入式程序了,如果还没有下载相应的文件,请先要下载。下载完成之后,就可以把压缩文件解压出来,就会看到一个LED_001的目录。不过,仔细一些的人,也许会发现这个压缩包有点大,是的,是有12M大小。接着又会问为什么会这么大呢?像STC89C51的单片机工程很小的,才几K。这个工程这么大,其实是有原因的,是因为这个工程里包括了STM32F4XXX系列所有的功能代码,也就是...原创 2019-03-15 19:48:57 · 2258 阅读 · 0 评论 -
玩转STM32(3)使用模板工程
前面学习了安装什么样的软件,这时就已经具备开发嵌入式软件的基本条件。只要把前面的开发板电源使用USB的电源线插入5V的电源,然后把JLink的USB插头插入到开发的电脑,硬件就已经连接好了。如下图这样连接起来:在这里一定要注意使用电源供电,而不能使用JLink的供电,因为CPU和外围元件的电压会不稳定,导致调试时,CPU可以下载和运行代码,但外围元件工作不正常的现象。这里都是使用USB接头...原创 2019-03-14 17:09:10 · 733 阅读 · 0 评论 -
玩转STM32(2)入门软件的基本条件
前面说了硬件的入门条件,现在就来学习一下软件的入门基本条件。我们知道要想跟外国人打交道,必须学习一门外语,才可以跟他们对话,进行沟通。同理,我们要跟STM32的CPU进行沟通,也需要学会一门外语,这门外语有很多选择,至于选择那一门外语,就在于你自己的喜欢和需要跟那一个国家进行沟通了。在外语方面有英语、德语等等,同样对于CPU来说,也是一样有汇编语言、C语言、C++语言或者Python语言等等。在你...原创 2019-03-08 17:30:54 · 804 阅读 · 0 评论 -
玩转STM32(18)理解SetSysClock函数
前面理解SystemInit函数时,发现里面调用了SetSysClock函数,那么这个函数有什么用呢?里面的代码到底又干了什么事情呢?现在就来仔细地分析这个函数,以便掌握每一个细节,了解事物的来龙去脉。并且这个函数是用户必须了解的函数,为什么这样说呢?因为这个函数要设置CPU工作的频率,也就是说这个函数里设置了CPU到底运行多快的关键。前面我们知道CPU复位之后,默认是运行内部的时钟频率,那是比较...原创 2019-07-31 18:47:36 · 2756 阅读 · 0 评论