一、stm32最小系统
stm32的最小系统结构如下(stm32芯片除外)。
1、电源模块、3.3V电源必须使用稳压装置,有时需要在电容感网络上生成用于stm32的模拟电源。
2、时钟模块、有源或无源晶振可以使用高达25MHz的有源晶振或4-16MHz的无源晶振,常用为外部8M无源晶振,负载电容可选择22pf。
以下分别为低速外部时钟(RTC用提供)和高速外部时钟。
3、复位电路、RC复位或独立IC复位,stm32的复位端子内置40k的电阻,可以外置0.1uf电容器,复位到地面,可以增加复位按钮。 当然复位电路大家
我习惯从外部打捞。 这不是必须的,但是只要能确保复位时间就完全没有问题。
4、引导选择,stm32有引导0和引导1两个引脚,用于设置系统启动方式,可以从片上闪存、系统存储器或片上SRAM启动。 从系统内存启动时可以使用固定
化的bootloader实现程序是从USART1加载的。 从电影内SRAM开始。 这个还没有研究,但我很感兴趣。
5、程序下载和调试接口可以通过jtag接口实现下载调试功能,在空间有限的情况下,也可以通过USART1下载程序。
二、stm32启动模式
1、引导1=x引导0=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 _ STM 32 F10 x _ LD _ VL.s : forstm 32 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标准外设库
必须根据你使用的处理器来做相应的预处理。如图所示:
’
转载于:https://www.cnblogs.com/steed/p/7603310.html