STM32F103ZET6新建工程指南
目前STM32的开发主要有基于寄存器的开发方式、基于标准库也就是库函数的方式和基于HAL库的方式。本学习是基于库函数的方式。
一、建立工程文件夹
二、新建工程
1、建立工程
选择也可以搜索STM32F103ZET6,没有找到的需要下载芯片库资料,后续将相关固件库资料和芯片库资料进行单独的文章提供链接,然后点击确确定
2 在工程文件夹中新建文件,并添加启动文件和相关配置文件
1)添加文件夹
工程文件夹里建立Start、复制固件库里面的文件到工程文件夹;
2)找到启动文件并添加
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
本示例使用ZET6,容量512KB,属于大容量产品,应使用startup_stm32f10x_hd.s启动文件和USE_STDPERIPH_DRIVER做宏定义配置,将文件复制到Start文件夹下,然后添加宏定义,指定启动文件宏,我认为USE_STDPERIPH_DRIVER是通用,意思是自动选择启动文件(启动文件需添加到工程)
标准库\F1标准库\STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template\MDK-ARM中打开readme,如图所示的就是#define的宏定义。可以看到对应启动文件的宏定义。
3)找到配置文件并添加
stm32f10x.h是STM32的外设寄存器描述文件,作用和51单片机的REGX52.H一样,是用来描述STM32有哪些寄存器和它对应的地址的。
两个System文件主要是用了配置时钟的。STM32主频72MHz就是System中的函数配置的。
固件库路径:\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\
将文件复制到Start文件夹下
因为这个STM32是内核和内核外围的外设组成的,所以添加内核寄存器的描述文件到Start文件下
描述文件:\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
3keil中添加工程文件
keil和实际项目文件夹中的文件只是一个引用和映射,keil内工程的树结构是自定义后添加实际文件夹的文件,项目中尽量使keil和项目文件夹的布局一致,防止映射混乱
1)首先添加Start组,然后把文件添加进来
双击慢一点可以改名
添加外部文件到组内,即对应的文件夹的文件
所有文件都添加
2)在keil配置头文件路径,表示该路径下存在头文件,其他程序调用头文件时可以从此处遍历获取
4新建User文件夹、添加标准库函数文件和宏定义(宏定义是指程序执行前会预处理的指令,可以给相关变量和数据重命名,便于工程中具有良好的交互性和辨识度,一般放在文件头部)文件
1)新建User文件夹,用于存储main和其他个人文件
2)新建main函数
3)新建快捷代码生成
鼠标点击main文件中,双击即可生成代码
以上建立的寄存器开发环境(我们对寄存器开发环境进行了解即可,下面一小部分是寄存器开发点灯示例,不感兴趣可以跳过)
(a)首先是RCC的寄存器,来使能GPIO的时钟,GPIO都是APB2的外设
APB2 外设时钟使能寄存器(RCC_APB2ENR)
RCC->APB2ENR = 0x00000010;
写1是打开GPIOC时钟,即RCC->APB2ENR = 0x00000010;
(b)需要配置PC13口的模式(端口配置高寄存器(GPIOx_CRH) (x=A..E))
CNF13和MODE13就是配置13号口的
CNF配置为通用推挽输出模式,MODE配置为输出模式。
配置端口模式和速率如下:(通用推挽输出和50MHz)
GPIOC->CRH = 0x00300000;
(c)GPIO输出数据
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00000000; // 低电平点亮
// GPIOC->ODR = 0x00002000; // 灭
while(1)
{
}
}
4)这个工程目前还没有添加STM32的库函数,所以它还是基于寄存器开发的工程。(想使用寄存器开发STM32到这里就可以了,但是我们是基于库函数的学习),进行库函数添加。
调编码格式(UTF-8)、字体、缩进
在工程目录下新建Library文件夹,将下述文件夹下的所有文件粘贴到Library下(库函数的源文件和头文件)
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc
此时库文件还不能使用,需要再添加配置文件,将下述文件粘贴到User路径下,再在keil中将新加的文件加入
\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
将文件夹加入进来
三、总结
- 建立工程文件夹,为keil工程提供良好的映射和文件支持
- keil新建工程,建立User(存放main、库函数配置文件、中断处理函数文件)、Library(库函数封装和库函数头文件)、Start(存放启动文件、systeminit文件和内核寄存器描述文件和外设寄存器描述文件),并复制响应的文件到工程文件夹中并添加到keil工程
- 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
- 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
- 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
四、工程架构
另:
作者:aloneboyooo