STM32笔记(一)STM32简介与工程建立

STM32简介

STM32从名字上来一个个看,ST指的是生产产商ST意法半导体,其中的M指的是MicroController微控制器,32就表示32位,顾名思义,STM32就是由意法半导体生产的32位微控制器,基于ARMv7架构的Coretex-M3内核,也是一种单片机,区别于51单片机,51是8位微控制器,已是70年代的产物,性能有限,但是简单易用,适合用于入门单片机,而STM32则拥有强大的性能,更低的功耗,拥有比51更多的外设接口,甚至能在上面运行诸如ucos,FreeRtos等操作系统,当然了,性能提升的同时,使用起来也比51复杂的多,寄存器的数量是51的好几倍,但是好在官方为简化开发推出了STM32各种系列的固件库,以及最近几年推广的STM32CubeMX+HAL库等,都极大的降低了操作门槛,使得如今的STM32已经成为一种趋势,一种新潮流。

命名规则

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw

STM32的选型

大方向:

根据项目需求选择合适的MCU芯片,一般初学者都会使用基于Coretex-M3内核的F1系列,如果只是普通应用并不需要高性能进行大量的数据运算,F1系列是个不从的选择,反之,可以选择基于Coretex-M4系列的F4系列芯片

选型细节:

引脚的多少与功能,一般来说根据项目所需要的功能,够用就行,引脚多的功能也越多价格也更贵
FLASH 容量,根据程序的大小,选择64K或512K等等不同容量的芯片型号。

开发环境

用的最多的IDE是Keil5 MDK,除此之外还有ST官方的TrueStudio,以及HAL+STM32CubeMX+Keil5这种组合开发方式,其中STM32CubeMx可以可视化地进行芯片资源和管脚配置,并且生成项目所有源程序,支持导入到keil5中进行后续程序的编写,基于HAL库的开发方式是ST官方目前主推的开发方式,普通的固件库官方已经停止更新了,虽然使用起来比较完善,没有什么问题,但由于STM32上各种IO口的功能较多,功能配置复杂,能用可视化编程工具简化开发过程是再好不过了,需要注意的是对于单独采用Keil5来开发的话,需要下载对应芯片的芯片包,如芯片是STM32F1系列的就下载F1系列的芯片包,F4的就下载F4的芯片包,同时如果是基于固件库开发还要去官网下载额外的固件库,固件库也是分系列下载的,F1的芯片只能下载F1的,不能用F4或者其他系列的固件库函数进行开发。

程序的烧入方式

串口下载:

与51单片机一样,STM32也支持串口下载,在用带有USB转串口的开发板进行开发的时候还需要下载对应的芯片驱动,例如使用的是CH340芯片,那么就要下载一个CH340的驱动,这样电脑才能正常的识别出串口,同时用串口下载还要准备一个烧入软件,比较常用的是Flymcu。

JTAG 调试口下载:

JTAG是一种20针脚的下载接口,可以使用ST-Link,JLINK,ULINK等调试下载器进行连接,通过这些下载器可以直接在keil5上烧入程序,拥有比串口下载更高的速度,当你用串口下载一个用固件库编程的程序时,由于涉及的C文件较多,烧入时间比较长,但是用ST-Link等JTAG接口下载器可以显著缩短下载时间,也可以在单片机上进行实时Debug仿真调试,对于一些大型程序的调试很有帮助。和串口下载类似,用使用JTAG调试口下载也需要安装一个驱动,在keil5中使用前还需要再魔术棒选项卡那里提前配置。

SWD调试口下载:

STM32 支持 SWD调试,传统的JTAG下载需要占用5个IO口,有些时候有可能会造成IO口不够用,而SWD下载只需要占用2个IO口,有利于缩小开发板的体积,而且拥有JTAG的全部功能,两者所达到的效果是一样的,是一种更理想的下载方式。

开发方式的选择

寄存器开发

学过51的朋友都知道,我们主要通过软件编程控制单片机上的各种寄存器,而寄存器相当于一个拥有特殊名称与地址的变量,我们在开发51单片机的时候经常会用sbit重定义寄存器的名称,类似的,在STM32中也有寄存器操作,而且比51单片机多的多,寄存器地址也复杂的多,各个总线如APB1,APB2,AHB总线上有各自的外设与外设寄存器地址,如果单纯的使用寄存器开发,虽然说效率挺高,但是所需要耗费的时间是51单片机所不能比拟的,因此就需要用下面所说的库函数开发来简化。

扫描二维码关注公众号,回复: 11198431 查看本文章

库函数开发

库函数开发简单来说就是使用官方提前编写好的C库函数,通过调用函数的方式来操作单片机上的各种寄存器,由于库函数经过一系列的包装,使得在利用库函数开发的时候,程序的可读性更强,也更有规律,一般来说学习STM32或者任何单片机,要做到能够深入底层了解各种寄存器的功能与用法,但在实际开发过程中不一定要用到寄存器可以用库函数开发,比较多的人选择的是用库函数开发但是却不深入底层了解各种寄存器,这样学起来基础不扎实,到后期程序复杂的时候,库函数开发就会出现些许BUG,不懂底层就不能高效的排除各种BUG。

keil5工程的建立

基于固件库开发的工程建立

既然是基于固件库开发,那么就必须去下载固件库,首先需要到st官方上下载对应芯片系列的固件库包这里贴出的是F1系列的固件库包在这里插入图片描述
下面通过流程图的形式简单说明如何创建基于库函数开发工程的流程:
在这里插入图片描述
详细过程(以正点原子战舰开发板为例)

  1. 建立文件夹
    在这里插入图片描述

  2. 新建keil5工程
    在这里插入图片描述

  3. 工程中新建几个文件夹
    在这里插入图片描述

  4. 添加启动文件
    在这里插入图片描述

  5. 添加库函数组件(inc src)
    在这里插入图片描述

  6. 添加库函数内核组件(CM3)
    在这里插入图片描述

  7. 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面将里面的三个文件 stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h复制到USER
    在这里插入图片描述

  8. 再STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 个文 件main.c, stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h 复制到USER
    在这里插入图片描述

  9. 将前面所加的各种C文件添加到keil工程中
    在这里插入图片描述

  10. 配置魔术棒 填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面并配置头文件路径
    在这里插入图片描述

  11. 将原先复制过来的main.c中的代码删除重写,编译然后就算是建立好了
    如果是正点原子的战舰开发板这里提供了一个可供测试的程序,如果不是也可以稍加修改测试工程是否创建成功

#include "stm32f10x.h"

void delay(unsigned int z)
{
	unsigned int i, j;
	for(i = 0; i < 100; i++)
	{
		for(j = z; j > 0; j--);
	}
	
}

int main(void)
{	
	RCC->APB2ENR |= ( (1) << 3 ); //GPIOB 时钟开启
	RCC->APB2ENR |= ( (1) << 6 ); //GPIOE 时钟开启
	
	//GPIOB的灯 红灯
	GPIOB->CRL  &= ~( (0x0F) << (4*5) );
	GPIOB->CRL |= ( (1) << (4*5) );
	
	delay(8000);
	GPIOB->ODR &= ~( 1 << 5 ); //LED ON
	delay(8000);
	GPIOB->ODR |= ( 1 << 5 ); //LED OFF
	delay(8000);
	GPIOB->ODR &= ~( 1 << 5 ); //LED ON
	delay(8000); 
	GPIOB->ODR |= ( 1 << 5 ); //LED OFF
	
	//GPIOE的灯 绿灯
	GPIOE->CRL  &= ~( (0x0F) << (4*5) );
	GPIOE->CRL |= ( (1) << (4*5) );
	
	delay(8000);
	GPIOE->ODR &= ~( 1 << 5 ); //LED ON
	delay(8000);
	GPIOE->ODR |= ( 1 << 5 ); //LED OFF
	delay(8000);
	GPIOE->ODR &= ~( 1 << 5 ); //LED ON
	delay(8000); 
	GPIOE->ODR |= ( 1 << 5 ); //LED OFF	
}


基于寄存器开发的工程建立

基于寄存器开发可以省去很多步骤,但一般没什么人会只使用寄存器进行开发,大多数是在库函数工程上穿插使用寄存器
在这里插入图片描述

参考资料

参考资料当然是官方的最全面,例如《STM32F10X-中文参考手册》和《Cortex-M3 权威指南》这两本是 ST 官方的手册,这两本指南书包含了从内核到外设的各种方方面面,各种寄存器的映射,寄存器各个位的功能都进行了介绍,学stm32就要学会多看官方的数据手册,遇到不懂的可以看一看,就像你学习英语遇到不懂的单词回去查字典一样,当然资料当然是越新的越好,新资料,冷门芯片的资料往往是英文的,养成看得懂英文资料的习惯很重要
《Cortex-M3 权威指南》的目录:
在这里插入图片描述
《STM32F10X-中文参考手册》的目录:
在这里插入图片描述

原创文章 12 获赞 0 访问量 1109

猜你喜欢

转载自blog.csdn.net/zcy_cyril/article/details/105827395
今日推荐