STM32F103介绍
STM32F系列是意法半导体(ST)公司的32位ARM微控制器,内核采用Cortex-M3,其它方面的说明可以查阅相关资料。
STM32F103C8T6最小系统板
这里用的是笔者购买的两款STM32F103C8T6的最小系统板,如下图:
两款最小系统板很相似,左侧都是JLink插口,晶振频率均为8MHz,右侧布置有供电接口、复位按键、启动方式选择跳帽(图中绿色和红色的小东西,下载程序用),并且把引脚在周围引出。黑色的板子把OLED接口留了出来并且右侧多设置了一个按键,蓝色的板子则是给出了串口等接口。
STM32F103C8T6命名说明
符号 | 说明 |
---|---|
STM32 | ST公司采用ARM Cortex-M3内核的32位微控制器 |
F | 芯片子系列 |
103 | 增强型系列 |
C | 引脚数,T:36,C:48,R:64,V:100,Z:144,I:176 |
8 | 内部Flash容量(单位:字节),6:32K,8:64K,B:128K,C:256K,D:384K,E:512K,G:1M |
T | 芯片封装,H:BGA,T:LQFP,U:VFQFPN |
6 | 工作温度,6: -40 ~ 85℃,7: -40 ~ 105℃ |
因此STM32F103C8T6即代表ST公司采用ARM Cortex-M3内核的增强型32位微处理器,引脚数为48,内部Flash容量为64KBytes,芯片封装为LQFP,正常工作温度为-40 ~ 85℃。
说明:Flash容量16 ~ 32K为小容量,64 ~ 128K为中等容量,256 ~ 512K为大容量。
开发环境搭建
这里使用Keil uVision5,具体安装就略过了(嘿嘿)。
安装完成后打开软件,是这样滴:
但是Keil uVision5并不带有STM32F103的软件包(Software Packs),因此需要在安装结束后再安装Keil.STM32F1xx_DFP.2.1.0.pack软件包(这个网上搜一搜应该能找得到,或者私信我给你发也行),直接双击安装就行,安装完成后再重新打开Keil uVision5就完成了。
建立第一个工程
STM32可以直接控制寄存器进行程序开发,但要求对芯片的寄存器掌握熟悉,并且开发速度会比较慢,但优点是运行效率更高;对于刚入门或者为了开发方便的同志们来说,采用库开发相对更舒服一些,并且可以在程序定型后再将库开发的版本转换成寄存器版本。在这里将使用官方库进行开发。
获取官方库
使用库开发让人放心的一点就是,这个库是意法半导体(ST)公司官方给出的,并且Free(嘿嘿)。
打开ST官网,找到产品->微控制器->STM32主流MCU
然后找到工具与软件->嵌入式软件->MCU及MPU嵌入式软件->STM32 Standard Peripheral Libraries
因为选用的是STM32F10x系列,所以根据描述和支持器件的说明,往下拉找到STSW-STM32054,点击打开,再点击Open software page
下拉找到获取软件,注册或者登录ST官网就可以下载官方库了。
下载得到的官方库解压:
编写程序时主要用到其中的Libraries文件夹。stm32f10x_stdperiph_lib_um.chm是帮助文档,对后续开发十分有帮助,可以方便的查阅数据结构、函数说明等。
建立工程
推荐单独建立一个工程文件夹用于存放所有程序,并在此文件夹下新建0-Template文件夹用于保存工程模板,以后只需要复制工程模板就可以进行下一个程序的编写,而无需再次配置工程。
下面的关键步骤会进行标记,其它文字为说明性文字。
-
在0-Template文件夹下新建如下三个文件夹:CMSIS、FWLIB、USER:
其中CMSIS与官方库文件夹名称一致,为Cortex Microcontroller Software Interface Standard的缩写;FWLIB为Firmware Library即固件库缩写,存放STM32各类外设函数;USER存放用户编写的程序文件。文件夹命名并无要求,看个人习惯。 -
复制库文件
- 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的:
core_cm3.c、core_cm3.h复制到CMSIS文件夹中; - 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的:
startup文件夹、stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h复制到CMSIS文件夹中; - 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下的:
inc文件夹、src文件夹复制到FWLIB文件夹中; - 将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下的:
main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h复制到USER文件夹中。
复制完成后,各个文件夹中如图:
扫描二维码关注公众号,回复: 9279962 查看本文章 - 将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的:
-
打开Keil uVision5,点击Project->new uVision Project,浏览到0-Template文件夹,输入工程名称,这里取Template,保存:
-
将会弹出设备选择框,如果没有安装Keil.STM32F1xx_DFP.2.1.0.pack软件包则不会显示STM32F1 Series,需要安装软件包后再重新打开Keil uVision5建立工程,这里选择STM32F103C8,点击OK:
将会弹出环境设置选框,直接点击右上角关闭即可:
至此,新工程已经建立好,下面进行配置 -
首先设置各个文件夹及文件,在Target 1上右击选择Manager Project items或者直接点击图标
-
在弹出的对话框里进行设置,将Project Targets修改为Template,在Groups中新建STARTUP、USER、CMSIS、FWLIB四个文件夹,完成后先不关闭,还要添加库文件,如图所示:
-
添加库文件,选中一个文件夹,点击Add Files:
- 在STARTUP中添加\CMSIS\startup\arm\ startup_stm32f10x_hd.s(注意选择文件类型),点击Add添加后再点击Close关闭,如图所示:
- 同理在USER中添加\USER\ main.c、stm32f10x_it.c;
- 在CMSIS中添加\CMSIS\ core_cm3.c、system_stm32f10x.c;
- 在FWLIB中添加\FWLIB\src中所有.c文件。
- 在STARTUP中添加\CMSIS\startup\arm\ startup_stm32f10x_hd.s(注意选择文件类型),点击Add添加后再点击Close关闭,如图所示:
-
添加完成后点击OK,左侧工程文件树状图如图:
-
然后对工程进行设置,在Template上右击选择Options for Target ‘Template’ 或者直接点击图标:
-
在弹出的对话框中:
- Target选项卡中设置晶振频率为8MHz(与最小系统板晶振频率一致):
- Output选项卡中勾选Create HEX File,即生成下载用的.hex程序文件:
- C/C++ 选项卡中Define添加USE_STDPERIPH_DRIVER,Include Paths中添加路径:.\CMSIS;.\FWLIB\inc;.\USER:
- Target选项卡中设置晶振频率为8MHz(与最小系统板晶振频率一致):
-
然后打开main.c文件,删除原有内容,添加代码:
#include "stm32f10x.h"
int main(void)
{
while(1);
}
即完成了模板工程的建立,可以进行编译,结果如下:
没有报错的话(0 Error(s), 0 Warning(s) )就说明工程建立好啦(~ ̄▽ ̄)~
下面用程序测试一下
通过电路原理图可知,蓝色最小系统板上LED对应控制管脚为PB8,也就是GPIOB的8引脚,且当引脚输出低电平时,LED亮:
在main.c中输入下列代码:
#include "stm32f10x.h"
int main(void)
{
GPIO_InitTypeDef GPIOInitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIOInitStruct.GPIO_Pin = GPIO_Pin_8;
GPIOInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOInitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIOInitStruct);
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
while(1);
}
编译通过,0 Error(s), 0 Warning(s)
连接好最小系统板的UART1,并拔去跳帽,打开mcuisp.exe,点击搜索串口选择正确的串口,选择生成的Template.hex程序文件,点击开始编程进行下载:
下载完成后,插上跳帽重新上电或者按下复位键,程序运行,绿色LED亮(红色为电源指示灯):