stm32之入门知识
一、stm32最小系统
stm32最小系统组成如下(除了stm32芯片外):
1、电源模块,3.3V电源,需要用稳压器件,有时要用感容网络产生stm32所使用的模拟电源。
2、时钟模块,有源或者无源晶振,可以使用最高25MHz的有源晶振或者4-16MHz的无源晶振,常用的是外部8M无源晶振,负载电容可选22pf。
下面分别是低速外部时钟(提供RTC使用)和高速外部时钟。
3、复位电路,RC复位或者独立IC复位,stm32的复位引脚内置有40k的电阻,可以外接0.1uf电容到地实现复位,并且可以增加复位按钮。当然复位电路大家
都习惯用个外部上拉,虽然这不是必须地,但如果能保证复位时间也完全没问题。
4、Boot选择,stm32有boot0和boot1两个引脚,用于配置系统启动方式,可以从片上闪存、系统存储器或者片内SRAM启动。从系统存储器启动可以使用固
化的bootloader实现程序从USART1加载。从片内SRAM启动,这个目前还没研究过,不过很感兴趣。
5、程序下载和调试接口,可以使用jtag接口实现下载调试功能,在空间受限的情况下,也可以使用USART1来加载程序。
二、stm32启动模式
1、BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。
2、BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。ISP
3、BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试。
三、开发工具
keil c51 针对51单片机系列。
keil MDK-ARM 针对arm开发(其中V5版本和V4版本有很大的区别,V5版本需要另外安装芯片包)。
下载方式的对比(SWD和JTAG):
1. SWD 模式比 JTAG 在高速模式下面更加可靠。 在大数据量的情况下面 JTAG 下载程序会失败, 但是 SWD 发生的几率会小很多。
基本使用 JTAG 仿真模式的情况下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推荐大家使用这个模式。
2. 在大家 GPIO 刚好缺一个的时候, 可以使用 SWD 仿真, 这种模式支持更少的引脚。
3. 在大家板子的体积有限的时候推荐使用 SWD 模式, 它需要的引脚少, 当然需要的 PCB 空间就小啦! 比如你可以选择一个很小的
2.54 间距的 5 芯端子做仿真接口。
四、存储器、寄存器
ARM内核中带有存储器,比如cortex-M4中带有4GB的存储空间。厂家或者用户可以用存储器对Flash、RAM、外设等进行地址分配,称作存储器映射。
给具有特定功能的内存单元取别名,这个别名就是寄存器,这个起别名的过程就是寄存器映射。
寄存器的地址=存储器的基地址+偏移地址
因为操作寄存器的地址很麻烦,所以对寄存器进行了C语言封装,方便开发。
五、编程开发
一般用的较多的是C语言和汇编语言(其他语言就不说了),有些初学者认为,C语言十分方便,完全可以取代汇编,其实不然。他们各有各的优点:
- C语言: 开发相对简单,适用于大型工程
- 汇编语言: 适用于小型工程或者一些特殊场合(要求性能、存储量、军事)。
所以一般来说,C语言嵌入式汇编的方式是一种比较好的编程方法。
六、STM32注意事项
在设计过程中,我们会遇到各种型号的封装,这就要求我们会看懂各个型号的意思,以STM32F103ZET6为例,ST代表意法半导体,其中ARM有三个
系列,分别是A、R、M,所以M表示的是这款芯片是M系列的,F是芯片的子系列,然后103代表是增强型系列(101是基本型),Z是引脚数,(Z-144脚、
E-100脚...),然后接下来的字母代表Flash容量(E-512K、D-348K、C-256K.....),字母“T”代表LQFP封装,字母“6”代表(-40~85摄氏度)。具体的
标准如下图所示:
我们在编程开始前,都需要向工程中加入启动文件,不同型号配置的stm芯片,启动文件也不一样,就拿stm32F10x为例,如下图所示:
- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices
- startup_stm32f10x_ld.s: for STM32 Low density devices
- startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices
- startup_stm32f10x_md.s: for STM32 Medium density devices
- startup_stm32f10x_hd.s: for STM32 High density devices
- startup_stm32f10x_xl.s: for STM32 XL density devices
- startup_stm32f10x_cl.s: for STM32 Connectivity line devices
cl:互联型产品,stm32f105/107系列
vl:超值型产品,stm32f100系列
xl:超高密度产品,stm32f101/103系列
ld:低密度产品,FLASH小于64K
md:中等密度产品,FLASH=64 or 128
hd:高密度产品,FLASH大于128
除了利用这些配置相应的启动文件外,还要在下载程序配置中进行选择芯片,如图所示:
此外,在项目中使用stm32标准外设库(STM32F10x Standard Peripherals Library)的时候,我们会在项目的选项中预定义两个宏定
义:USE_STDPERIPH_DRIVER, STM32F10X_MD,如下图:
这两个宏的作用是什么呢?
1、 USE_STDPERIPH_DRIVER : to use or not the peripheral’s drivers in application code (i.e. code will be based on direct access to
peripheral’s registers rather than drivers API) , this option is controlled by the #define USE_STDPERIPH_DRIVER
即这个定义控制了是否在应用中启用外设驱动。我们使用标准外设库本来就为了方便控制外设,所以要添加这个定义,以启用外设驱动。
2、STM32F10X_MD:在上面已经提到,有多种类别,每种类别都有所区别,例如sram或者flash或者外设数量不一样,所以stm32标准外设库
必须根据你使用的处理器来做相应的预处理。如图所示:
’
stm32之入门知识的更多相关文章
- 零基础学习STM32之入门学习路线
可以说就目前的市场需求来看,stm32在单片机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝大部 ...
- [置顶] Mysql存储过程入门知识
Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...
- 移动H5开发入门知识,CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- H5移动端开发入门知识以及CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- Java基础入门知识
Java编程入门知识 知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...
- zabbix入门知识
zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...
- React的入门知识与概念【1】
回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...
- 我的Python笔记补充:入门知识拾遗
声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...
随机推荐
- Koa2+MySQL+VUE+ElementIUI搭建简单的后台管理小系统
如题,前端入坑许久,还是写个小东西出来吧 想要搭建自己的一个后台管理,实现简单的增删改查,看起来很简单 其实是真的简单,没有想的那么难,我也就写了一个月吧, 当然是假的,其实也就每天一两个小时,花了大 ...
- UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal not in range(12
python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't deco ...
- Memcache安装与使用
一.资源下载 安装memcached 之前必需要先安装 libevent 分别在libevent和memcached的官网下载安装包libevent-1.4.14b-stable.tar.gz和mem ...
- ClassNotFoundException Log
Studio 运行时异常: Error:Execution failed for task ':app:compileDebugJavaWithJavac'.> Compilation fail ...
- 数据结构---python---表
一.list的基本实现技术 在数据结构中,如果用python实现线性表,无疑要提到list,list是一种元素个数可变的线性表(而tuple是不变的表,不支持改变其内部状态的任何操作,其他与list性 ...
- redis启动错误-- Creating Server TCP listening socket *:6379: listen: UnKnown error
前提:windows server 2008.redis 3.x 今天给服务器部署redis环境,文件配置.服务安装都很顺利,可就在启动服务的时候提示 百度老半天也没找到个说到点子上的. 这里记录下解 ...
- java基本类型和包装类的区别(转)
int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象 Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数 ...
- 九度OJ 1176:树查找 (完全二叉树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5209 解决:2193 题目描述: 有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY.该树是完全二叉树. 输入: 输入 ...
- 九度OJ 1165:字符串匹配 (模式匹配)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3219 解决:1149 题目描述: 读入数据string[ ],然后读入一个短字符串.要求查找string[ ]中和短字符串的所有匹配,输出 ...
- Makefile注意点总结
1 "="和":=" "="号赋值时,如果右边的值里面有未展开的变量,要等到整个Makefile的变量处理完之后,再展开,也就是说,如果该未 ...