授人以渔:stm32资料查询技巧
摘要:本章以stm32f103作为案例向大家讲解arm公司和st公司的关系以及我们在对stm32开发时需要如何正确的查找手册。
ARM公司和ST公司的关系
这里要从一块芯片的生产说起,比如我们要生成一款芯片,我们可以自己涉及内核,涉及好了之后就叫XXX架构芯片,但是一般情况下不会这么做,因为设计内核十分复杂,我们可以向出售内核的公司购买内核来使用即可。
目前市面上主流的内核有ARM架构内核对应“精简指令集”和x86架构内核对应“复杂指令集”。
为什么架构决定了指令集?因为设计架构的本质就是搭建一些逻辑电路,这些电路决定了遇到特定的二进制数据(指令),就执行相应的操作。
这里以ARM指令集为例,mov r0, r1 将r1寄存器中的数据读到r0寄存器中,STM32芯片看到的就是一串长度为4字节的二进制数据,内核中的“门电路”会将这串二进制数据解析并进行一连串的操作(将r1寄存器中的数据读到r0寄存器中),所以内核的架构就决定了指令集,越复杂的内核支持的指令集就越多,并且一条指令能处理的事情就越多。
指令集是不是越复杂越好?其实并不是这样,复杂指令集带来了一些的问题:功耗太大、发热量大、80%指令不常用等等问题,所以我们要根据芯片的用途来权衡采用什么内核。
这里说一个鲲鹏服务器的案例:鲲鹏服务器采用的就是基于ARM架构的CPU,这样做的原因:
1、ARM指令集在鲲鹏所处的领域完全够用,即使需要处理一个arm指令不支持的操作,只需将多条指令一起指向就可以完成该操作。
2、x86架构的CPU随着核心内的门电路越来越多,因为工艺的问题和散热的问题等,慢慢的达不到了“摩尔定律”,所以采用ARM架构的CPU并且用平行运算的“众”核思想可以基于沿着“摩尔定律”走。
3、学术研究发现了复杂指令集中有80%的指令都不太常用,所以用精简指令集不会造成浪费。
4、华为有ARMv8的永久授权。
ARM架构
Arm架构由ARM公司设计并提供授权,其对应指令集为“精简指令集(RISC)”,我们的手机、智能电视等产品所采用的主控多半都是arm架构内核的。
X86架构
X86架构由Intel公司设计,具有代表的产品就是我们电脑中使用的i5、i7等等CPU,其对应指令集为复杂指令集,这意味着一条复杂指令集中的指令可以完成多条精简指令集才能完成的操作,但是也面临很多问题。
ARM公司
ARM公司是一家通过出售arm内核授权盈利的公司,自己从不生成芯片,他将内核的设计图等等资料提供给购买了内核授权的公司,让其自己去二次开发并生产芯片。下图为arm公司设计的部分:

其中常见的有NVIC中断控制器,内核包括了r0-r15寄存器、pc寄存器等等,所以我们要查询上图中给出的内核相关外设的信息需要去查阅arm公司提供的参考手册,例如《Arm cortex-M3参考手册》。
ST公司
ST公司向arm公司购买了arm内核的授权,这里举个例子:stm32f103的cortex-m3内核就是一个授权,st公司将购买来的arm内核的设计进行二次开发。
下图为st公司二次开发设计出来的部分:

红框为ARM内核也就是arm公司设计的,其余部分都是st公司二次开发设计出来的,最终被封装到一个黑色的小盒子内并引出引脚供我们使用。常见的内核外部外设有定时器、GPIO控制器、串口等等,如果我们需要了解此类设备就需要查阅st公司提供的参考手册,例如《STM32F103参考手册》。
如何查阅手册
① 确定你要查询的“外设”是内核中的还是内核外的,例如中断控制器(NVIC)就是内核中的,“定时器”就是内核外的。
② 内核中的外设通过查阅ARM公司提供的参考手册
③ 内核外的外设通过查阅ST公司提供的参考手册
ARM公司资料下载:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0099c/index.html#
ST公司资料下载:
https://www.st.com/content/st_com/en.html
如果需要下载资料只需自己注册一个对应网站的账号就可以免费下载了,别再去花钱买资料啦。
授人以渔:stm32资料查询技巧的更多相关文章
- SQL高级查询技巧
SQL高级查询技巧 1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重 ...
- 我的Git使用-资料查询,名博笔记
1.首先您要知道什么是GIT 2.然后对其GIT的历史有所了解(吹牛b的时候用得着,如果还不知道 linux 脱袜子 Linus Torvalds o(︶︿︶)o ) Git 常用资料查询站点. 官 ...
- google查询技巧
技巧一:使用正确的方法 无论你是使用一个简单或是高级的Google搜索,在此都存在你应该使用的某种可靠的方法.遵循适当的方法你就能获得非常准确的结果:要是忽略这条建议的话,你也许就会看到大量不相关的结 ...
- MySQL翻页查询技巧
在查询大量数据库,一般都会采用翻页.自然会想到offset跟limit. 今天知道了一个技巧,用id查询.因为id是主键,查起来很快. 思路是:给id一个区间做where条件,将数据分隔成几份,然后每 ...
- mysql 关联查询技巧
废话不多说,直接进入正题 #数据准备 班级表class: CREATE TABLE `class` ( `class_no` ) unsigned zerofill NOT NULL AUTO_INC ...
- SQL 查询 技巧
一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...
- MYSQL SQL高级查询技巧
1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...
- SQLServer多条件查询技巧
2019-10-15 13:31:04 在实际项目开发中,有很多页面都会出现多条件查询功能,类似于这种情况: 牵扯到数据就少不了数据库了.这么多条件的查询,如果要用常规的if else来写判断逻辑的 ...
- 2020想进大厂你不得不了解的MySQL意外事件的查询技巧
导读:数据库是导致应用系统运行缓慢的常见原因.面对数据库引性能问题,很多开发者或者DBA却束手无策.本文作者经过多年的实际经验,整理了一些材料,将Linux环境下MySQL性能突发事件问题排查技巧分享 ...
随机推荐
- day11 本日作业+周末作业
目录 一.今日作业 1.编写文件copy工具 2.编写登录程序,账号密码来自于文件 3.编写注册程序,账号密码来存入文件 二.周末综合作业: 1.编写用户登录接口 2.编写程序实现用户注册后,可以登录 ...
- python实现二维码、条形码识别
环境: python 3.7 Win7 依赖包安装: pip install pillow pip install opencv-python pip install opencv-contrib-p ...
- 数据可视化基础专题(七):Pandas基础(六) 数据增删改以及相关操作
首先第一部还是导入 Pandas 与 NumPy ,并且要生成一个 DataFrame ,这里小编就简单的使用随机数的形式进行生成,代码如下: import numpy as np import pa ...
- 数据可视化之powerBI技巧(十六)采悟:PowerBI作图技巧:动态显示可视化标题
默认情况下,PowerBI图表的标题是静态的,为了增强图表的可读性,通过设置动态标题,可快速展示关键信息.提升沟通效率.本文通过两个简单的例子来看看PowerBI中如何创建动态标题. /01/ 拿之前 ...
- Python模块04/包/logging日志
Python模块04/包/logging日志 目录 Python模块04/包/logging日志 内容大纲 1.包 2.logging日志 3.今日总结 内容大纲 1.包 2.logging日志 1. ...
- Java并发编程实践
最近阅读了<Java并发编程实践>这本书,总结了一下几个相关的知识点. 线程安全 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任 ...
- GPO - Backup and Restore
Backup the GPO to a second server is very important. Restore a GPO if necessary. Note: WMI filter an ...
- Ethical Hacking - GAINING ACCESS(14)
CLIENT SIDE ATTACKS Protecting against smart delivery methods Ensure you're not being MITM'ed -> ...
- Python Ethical Hacking - Packet Sniffer(1)
PACKET_SNIFFER Capture data flowing through an interface. Filter this data. Display Interesting info ...
- JavaScript中的var,const,let区别与用法(浅谈)
let 和 const是(ES6) 新增加了两个重要的 JavaScript 关键字. 1.var全局变量 //全局变量在 JavaScript 程序的任何地方都可以访问 //定义的变量可以修改,如果 ...