一,认知
1.嵌入式概念
国内定义:以应用为中心,以计算机技术(冯诺依曼)为基础,软硬件可裁剪,适用于对产品的性能、成本、可靠性有严格要求的系统被称为嵌入式系统。
2.8051和STM32
8051属于入门级别,结构简单,8051无法满足市场需求(成本低、性能高、功耗低、多任务、易用界面),所以为了满足市场需求,ARM公司就设计一款基于ARMv7架构32位的Cortex M3/M4,ST公司就基于内核设计一款MCU,也被称为STM32。
3..STM32的应用领域
STM32属于微控制器,自带常用的通信接口(USART、IIC、SPI、CAN、RS485、RS232),STM32一般使用在低功耗产品上,比如3D打印机、四轴飞行器、扫地机器人、平衡车、智能手环、智能窗帘、智能门锁。
二,开发环境
1.介绍
-
MDK软件的下载
想要学习STM32,需要搭建好对应的开发环境,一般都是使用德国KEIL公司设计的KEIL5软件进行开发,由于KEIL公司已经在2005年被ARM公司收购,所以现在也被称为 ARM-MDK,该软件想要下载该软件,可以登录 www.keil.com 进行下载
2.MDK软件的结构
3.MDK软件的版本
3.软件的安装
1.从官网下载对应的安装包,安装包版本可以根据实际需求取选择,但是不要选择太低版本!
2.如果软件安装完成后,记得要安装ST公司提供的芯片支持包xxxx.pack,双击运行程序即可
三,使用STM32标准固件库源码建立开发工程
一:下载stm32固件库源码,解压后目录分布如下
二:创建工程目录结构
1.新建工程文件keil_project,內部结构,命名以及涵义
CMSIS:Cortex微控制器软件接口标准文件,该目录下文件适用所有Cortex系列(启动文件、配置文件)
DEVICE_LIB:M3对应外设的模块代码。(inc+src)
HARDWARE:用户实现的模块功能函数
LIST:链接相关
OBJ:编译产生的中间文件+hex/bin文件
SYSTEM:系统相关代码
USER:自定义代码(main.c)
2.将stm32固件库的代码拷贝到各个文件夹内,拷贝位置如下
stm32F10X官方库 | keil_project |
Libraries\STM32F10x_StdPeriph_Driver\inc 库头文件 Libraries\STM32F10x_StdPeriph_Driver\src 库源文件 | DEVICE_LIB |
Project\STM32F10x_StdPeriph_Template\main.c Project\STM32F10x_StdPeriph_Template\stm32f10x_it.h 中断函数头文件 Project\STM32F10x_StdPeriph_Template\stm32f10x_conf.h 配置文件 Project\STM32F10x_StdPeriph_Template\stm32f10x_it.c 中断函数文件 | User |
Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\ system_stm32f10x.c Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h | SYSTEM |
Libraries\CMSIS\CM3\CoreSupport\core_cm3.c Libraries\CMSIS\CM3\CoreSupport\core_cm3.h Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_md.s | CMSIS |
三:keil5创建工程 + 配置工程(项目保存位置:自己新建的工程文件夹keil_project/USER)
1.打开keil5,选中project-->new project-->在弹出的对话框中,选择项目保存位置。
2. 保存后,选择该工程的芯片型号,如下图。(前提是安装了芯片型号对应的pack)
3.选定型号后,出现下图,为该项目添加要使用的模块代码,需要就勾选。(使用固件库源码复制,不需要此步骤,直接关闭)。
4.创建成功后,出现下图结构。(必须对项目内文件夹分布作规划)
每个文件夹命名与工程代码框架类似,见下图
5. 每个文件夹内文件分布如下
6. 打开main.c,删除所有文件,代码编写。
7.对工程进行配置,具体步骤如下。Project-->options form target
STM32F10X_MD:该宏指定芯片的型号,不同型号对应的硬件代码有不同,必须定义。
USE_STDPERIPH_DRIVER:该宏指定是否启用外设,定义则为启用外设,必须定义。
8.点击按钮编译
9.成功编译通过