18 caimouse

尚未进行身份认证

网名是caimouse

等级
TA的排名 28

玩转STM32(18)理解SetSysClock函数

前面理解SystemInit函数时,发现里面调用了SetSysClock函数,那么这个函数有什么用呢?里面的代码到底又干了什么事情呢?现在就来仔细地分析这个函数,以便掌握每一个细节,了解事物的来龙去脉。并且这个函数是用户必须了解的函数,为什么这样说呢?因为这个函数要设置CPU工作的频率,也就是说这个函数里设置了CPU到底运行多快的关键。前面我们知道CPU复位之后,默认是运行内部的时钟频率,那是比较...

2019-07-31 18:47:36

玩转STM32(17)理解SystemInit函数

前面分析了复位函数,在那里发现它要调用SystemInit函数,那么这个函数是做什么用的呢?从名称上来看它就是系统的初始化函数。这个函数在复位之后,就要立即调用的函数,可见它是非常关键的底层函数,这个函数主要内容包括对系统时钟初始化(时钟源选择、锁相环设置、分频系数配置、AHB/APB的频率、FLASH配置)。下面就来对这个函数的源码进行一行一行地分析,以便掌握这个函数的作用。Syste...

2019-07-10 08:40:49

玩转STM32(16)理解复位函数

前面搞定了栈顶的问题,接着下来,可以从复位矢量表里,看到如下:__VectorsDCD__initial_sp;TopofStackDCDReset_Handler;ResetHandlerDCDNMI_Hand...

2019-07-06 21:14:34

玩转STM32(15)确定栈的位置和大小

前面学习了怎么样确定CPU加载运行第一行代码,在那里发现需要加载栈指针,那么你也许会问为什么要首先加载栈指针呢?难道栈就是这么重要?在这里,我们就来探讨一下栈的问题,比如栈的位置和大小。在现代的CPU技术里,往往有中断系统,这就决定了CPU必须有栈的结构,因为中断出现时,需要把当时CPU运行的数据进行保存,以便中断处理之后再恢复回来。如下图这样处理:如果没有栈,就没有办法保存当前...

2019-07-01 17:24:10

玩转STM32(14)运行第一行代码

前面学习了选择从那里进行加载代码,接着下来,我们将要了解CPU是怎么样运行编译的代码。通过前面的学习,我们知道通过编译器的编译,会生成可运行的代码,然后通过JLINK下载到STM32的FLASH里,再通过配置CPU的引导管脚,实现选择内部FLASH来加载代码。但是CPU是怎么样来加载代码,并运行的呢?其实不同类型的CPU运行代码的方式不一样,STM32的运行方式是这样的,CPU将从地址...

2019-06-27 11:55:13

玩转STM32(13)存储空间的开始地址

前面学习了怎么样选择不同的储存器来加载代码,也就是运行代码,决定了从哪里开始运行的问题。但是CPU选择了储存器之后,还要知道代码是从存储器哪一个位置开始读取代码?也就是从哪一个地址开始读取代码?现在就来解决这个问题。我们知道32位的CPU有4G的地址空间,因此从哪一个地址里读取代码,就有很多的选择了。至于放在什么地址,一般是由CPU的生产厂家来决定的。在这里可以查看到STM32F407的内部Fla...

2019-06-20 17:08:57

玩转STM32(12)代码存储空间的选择

前面了解了CPU怎么样拥有跳动的心脏,那么它拥有了开启自动化执行的生命之路。如果学习过CPU原理之类的硬件,就知道CPU在每一个脉冲信号之下,就向前运行一步,像168MHz频率的CPU,运行一步是很短的时间。不过CPU运行的原理是很简单的,可以设想纸带上有一些图案,比如圆、三角形、四边形,当这张纸带经过一个机器时,碰到圆就加一,碰到三角形就减一,碰到四边形就输出当前计数,这样简单的机器就是一个计算...

2019-06-13 17:27:32

玩转STM32(11)CPU的心跳历程

前面说CPU怎么样才有脉搏,也就是给CPU装了一个心脏,这样这个由泥沙组成的CPU才能开始拥有像生命的力量了。在前文后面,提到了使用25MHz晶振作为外部的频率来源,但是我们的目标是让CPU工作在168MHz的频率,这样才可以让CPU工作得更快,运行代码更快,效率更高。当然,如果你想让CPU工作在25MHz也是可以的,只是有点不值得,用这么贵的硬件,运行这么低的频率。要想快,就得提高CPU运行的频...

2019-06-06 18:25:12

玩转STM32(10)CPU的脉搏

前面学习了怎么样下载程序到开发板,并且可以运行起来,看到LED灯轮回地亮灭。你也许很好奇为什么LED会轮流地亮灭,像拥有生命一样,具有周期性地工作。要解决这个问题,我们得学习CPU的脉搏,那么什么是CPU的脉搏呢?其实CPU就是一堆泥沙和一些金属组成的,本身是不具备这种生命的特性,那么它周期性地工作的秘密又是什么呢?其实CPU之所以有这种特性,是因为它靠一个振荡电路来实现,这个振荡电路就是CPU...

2019-06-04 13:49:22

重读《一段关于国产芯片和操作系统的往事》

https://mp.weixin.qq.com/s/w63uRu-yT12Pmt9GYiNDvQ昨天又重新读了《一段关于国产芯片和操作系统的往事》,深入地整理一下国产芯片和操作系统的困难之处,大概有以下几点:1.做CPU最难的不是开发。第一步,你不是写不出INTEL那样的设计,而是你打不起官司。由于目前WINTEL的垄断机制,造了桥之后,不能让人再造同样的桥。因此,只能选择别的架构方案...

2019-05-24 10:09:23

国产CPU和OS,四十不惑

随着时间的推移,中兴事件、华为事件之后,中国在IT领域正面临着一个严重的问题。这个问题就是微软的Windows不能使用,Android不能使用,Intel和ARM的CPU不能使用,公司怎么样生存?之前这个问题,大家认为不可能发生的,或者说发生的机率很低,低到可以忽略不计。但是这两个事件发生之后,彻底地教育了我们每一个人,发生的机率还是很大的,并且随时发生的。如果这次还不能彻底地认识到严重性,危机性...

2019-05-23 09:03:08

当前嵌入式芯片的选择

随着当前环境的变化,国际风云变化,各个厂家都需要考虑自己的芯片选择战略了。面对这种环境,这段时间里为了成本考虑,优先选择欧洲厂家的芯片,比如ST公司。这样更有利于成本的降低,以及降低后期的风险。特别今年将要毕业的学生,更加注意这种选择了。因为毕业之后,进入公司主要使用的芯片必然会发生改变,要放弃美国的芯片公司,否则成本翻很多,让公司的产品没有竞争力,就是公司倒闭的前因啊。另外,也需要加...

2019-05-14 11:47:29

玩转STM32(9)下载程序到Flash

前面介绍了怎么样设置JLink调试器,这样就架起了一座开发电脑与开发板之间的桥梁,有了这个桥梁,就可以把程序下载到STM32的CPU里了。那么样在软件上怎么样操作呢?在说软件怎么样操作之前,先强调一下,硬件要按前面的文章那样连接好,也就是JLink的JTAG接口与开发板的JTAG接口相连接,开发板的电源接好,然后JLink的USB接口接到电脑上,这样就把硬件配置好了。当你插入JLink的USB接口...

2019-04-28 17:01:10

玩转STM32(8)配置JLink调试器

前面已经介绍了怎么样编译项目,生成一个HEX文件,但是这个目标文件还是储存在电脑上,这样你辛苦写出来的代码,还是一个没有什么作用的文件,即使已经把开发语言变成了机器语言,也是无济于事的。那么怎么样才能把这个目标文件搬到STM32的CPU里面呢?这是有很多种方法的,比如采用STM32的烧写器;比如把目标文件发送给ST公司,让生产这个CPU时,直接写入去;在我这里采用开发的模式,就是使用前面介绍的JL...

2019-04-27 13:39:43

玩转STM32(7)第一次编译

前面介绍了认识开发环境,当然你学习上面这些知识还不会进行编译一个项目的,那么你也许会急着想知道下一步怎么办?怎么样才可以把这个项目编译出来,或者烧写到开发板里进行测试。下面就来解决编译这个问题,编译原因在前面已经说过,就是把人类理解的语言转换为机器语言。在Keil的集成开发环境里,界面上主要有四个编译选项,如下图所示:下面来从左到右来介绍这四个编译选项的使用和意义,第一个选项是编译一个文件...

2019-04-26 13:08:04

玩转STM32(6)初识编译环境

前面已经介绍了怎么样找到项目的工程文件,只要双击那个文件就可以打开整个项目工程,进入代码开发调试环境。在很多年以前,开发软件还是很困难的事情,因为那时候编译环境非常不友好,不是图形界面,而是基于文本的界面,并且还不是集成开发环境,是分离的。当你在编辑器里写了代码之后,然后再保存成文件,然后退出编辑器,再来到命令行的环境下面,输入调用编译器的命令,才可以编译源码。如果编译有问题,要先把出错的行号和列...

2019-04-25 17:37:55

玩转STM32(5)找到启动文件

前学习了目录分类的重要性,可以看到分为三个目录,那么你选择哪一个目录点击进入去呢?因为我们要打开项目工程,那么就需要找到开发工具的工程文件,因此就需要打开工程的目录Project,就是这个目录命名的原因。在这个目录下面放置所有与目录相关的文件,当你打开这个目录时,就可以看到目录大体如下:在这里一眼看到最醒目的图标那个就是启动工程文件,只要双击这个文件就可以打开工程了。你也许想问其它文件是做...

2019-03-16 20:42:52

玩转STM32(4)学会目录分类

前面已经知道怎么样来得到第一个嵌入式程序了,如果还没有下载相应的文件,请先要下载。下载完成之后,就可以把压缩文件解压出来,就会看到一个LED_001的目录。不过,仔细一些的人,也许会发现这个压缩包有点大,是的,是有12M大小。接着又会问为什么会这么大呢?像STC89C51的单片机工程很小的,才几K。这个工程这么大,其实是有原因的,是因为这个工程里包括了STM32F4XXX系列所有的功能代码,也就是...

2019-03-15 19:48:57

玩转STM32(3)使用模板工程

前面学习了安装什么样的软件,这时就已经具备开发嵌入式软件的基本条件。只要把前面的开发板电源使用USB的电源线插入5V的电源,然后把JLink的USB插头插入到开发的电脑,硬件就已经连接好了。如下图这样连接起来:在这里一定要注意使用电源供电,而不能使用JLink的供电,因为CPU和外围元件的电压会不稳定,导致调试时,CPU可以下载和运行代码,但外围元件工作不正常的现象。这里都是使用USB接头...

2019-03-14 17:09:10

玩转STM32(2)入门软件的基本条件

前面说了硬件的入门条件,现在就来学习一下软件的入门基本条件。我们知道要想跟外国人打交道,必须学习一门外语,才可以跟他们对话,进行沟通。同理,我们要跟STM32的CPU进行沟通,也需要学会一门外语,这门外语有很多选择,至于选择那一门外语,就在于你自己的喜欢和需要跟那一个国家进行沟通了。在外语方面有英语、德语等等,同样对于CPU来说,也是一样有汇编语言、C语言、C++语言或者Python语言等等。在你...

2019-03-08 17:30:54

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024超级勋章
    1024超级勋章
    授予原创文章总数达到1024篇的博主,感谢你对CSDN社区的贡献,CSDN与你一起成长。
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。