STM32F103ZET6新建工程指南

目前STM32的开发主要有基于寄存器的开发方式基于标准库也就是库函数的方式基于HAL库的方式。本学习是基于库函数的方式

一、建立工程文件夹

二、新建工程

1、建立工程

选择也可以搜索STM32F103ZET6,没有找到的需要下载芯片库资料,后续将相关固件库资料和芯片库资料进行单独的文章提供链接,然后点击确确定

2 在工程文件夹中新建文件,并添加启动文件和相关配置文件

1)添加文件夹

工程文件夹里建立Start、复制固件库里面的文件到工程文件夹;

2)找到启动文件并添加

  • 找到STM32启动文件,等下复制到工程,启动文件路径和相关文件如下:
  • \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是通用,意思是自动选择启动文件(启动文件需添加到工程)

  • 其他型号芯片启动文件和宏定义对应Flash大小如下:
  • 如果忘记选择方法,可以打开 stm32f10x.h文件(你是f4系就打开 stm32f4xx.h以下同理)可以找到对应启动文件选择方法
  • 对应宏定义寻找方法
  • 标准库\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)
    	{
    	
    	}
     
    }
  • 如此即配置了RCC-APB2的GPIO时钟使能
  • 然后配置了IO口的模式
  • 然后IO口输出控制点灯
  • 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

     

    将文件夹加入进来

    三、总结

    1. 建立工程文件夹,为keil工程提供良好的映射和文件支持
    2. keil新建工程,建立User(存放main、库函数配置文件、中断处理函数文件)、Library(库函数封装和库函数头文件)、Start(存放启动文件、systeminit文件和内核寄存器描述文件和外设寄存器描述文件),并复制响应的文件到工程文件夹中并添加到keil工程
    3. 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
    4. 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
    5. 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER

    四、工程架构

    另:

    作者:aloneboyooo

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32F103ZET6新建工程指南

    发表回复