STM32——2 软件安装及新建工程

2 软件安装及新建工程

2.1 软件安装

2.2 新建工程

  • STM32的开发方式主要有基于寄存器的方式、基于标准库(库函数)和基于HAL库的方式;
    • 基于寄存器的方式和基于51单片机的方式一样,是用程序直接配置寄存器,以达到想要的功能;
      • 该方式最底层、最直接、效率也很高,但是由于STM32的结构复杂、寄存器太多,所以不推荐使用这种方式;
    • 基于库函数的方式是使用ST官方提供的封装好的函数,通过调用这些函数来间接地配置寄存器;
      • 由于ST对寄存器封装得比较好,所有这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率,本课程使用的就是这种方式;
    • 基于HAL库的方式,就是使用图形化界面来快速配置STM32;
  • 步骤:
    • 前面几步和51一样;

    • 芯片选择:
      在这里插入图片描述

      • 会弹出一个Keil软件的新建工程小助手,可以帮助我们快速新建工程,此处不需要,直接关掉;
    • 在工程中新建一个Start文件夹,加入以下文件(从课程资料中获取,注意有三处获取文件的地方):
      在这里插入图片描述

      • 第一处:STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
        在这里插入图片描述
        • 是STM32的启动文件,STM32的程序就是从启动文件开始执行的;
      • 第二处:STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
        在这里插入图片描述
        • stm32f10.h就是STM32的外设寄存器描述文件,它的作用就跟51单片机的头文件REGX52.H一样,是用来描述STM32有哪些寄存器和这些寄存器的对应地址的;
        • 其余两个system_开头的文件是用来配置时钟的,STM32主频是72MHz,就是在这两个文件中的函数配置的;
      • 第三处:STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
        在这里插入图片描述
        • 因为STM32是内核和内核外围的设备组成的,而且这个内核的寄存器描述和外围设备的描述文件不是在一起的,所以还需要添加一个内核寄存器的描述文件;
        • 这两个Cortex-M3(简称:cm3)文件就是内核的寄存器描述,当然还带了一些内核的配置函数;
    • 修改文件夹名(选中文件夹后,再次单击即可修改文件夹名)的同时,只需要加入以下5个文件到工程中即可(这些文件的图标上都带了一个小钥匙,代表这些文件是只读的);
      在这里插入图片描述

    • 添加Start文件夹的头文件路径:

      • 因为如果想使用自己建的文件夹中的.h文件,必须要先按照以下步骤声明以下该文件夹(就是让Keil这个编译器知道这个文件夹的存在),才可以使用该文件夹中的.h文件;
        在这里插入图片描述
    • 先通过Windows的文件管理器,在工程中新建一个User文件夹,然后再通过下面的方式导入该文件夹,再修改文件夹名字为User
      在这里插入图片描述

    • 新建main.c文件,注意要修改文件存放路径为User文件夹:
      在这里插入图片描述

    • STM32和STLINK的接线图:
      在这里插入图片描述

      • 接好线后,将STLINK插在电脑上。若连接正确,STM32板子上的灯应该是电源灯常亮,另一个连接在PC13口上的灯默认是闪烁状态,这是芯片里的一个测试程序;
    • 配置:
      在这里插入图片描述

      • 再按下Download键后,程序会被下载到单片机中,会发现闪烁的灯已经不闪了;
        在这里插入图片描述
    • 通过配置寄存器的方式点灯:

      #include "stm32f10x.h"                  // Device header
      
      int main(void)
      {
      	RCC->APB2ENR = 0x00000010;
      	GPIOC->CRH = 0x00300000;
      	GPIOC->ODR = 0x00000000; //若配置0x00002000,灯PC13就灭了
      	
      	while(1)
      	{
      		
      	}
      }
      
      • 会发现PC13的灯亮起来了;
    • 新建Library文件夹,用于存放库函数(文件夹的创建方式在上面已经陈述),添加以下文件(从课程资料中获取,注意有两处处获取文件的地方);
      在这里插入图片描述

      • 第一处:STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
        在这里插入图片描述
        • misc.c就是内核的库函数,其它的就是内核外的外设库函数;
      • 第二处:STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc
        在这里插入图片描述
        • 这些是库函数的头文件;
    • Library文件夹及其里面的文件添加进工程中:
      在这里插入图片描述

    • User文件夹中添加以下文件:
      在这里插入图片描述

      • 文件来源:\STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
        在这里插入图片描述
        • conf(configuration)文件是用来配置库函数头文件的包含关系的,里面还有个用来做参数检查的函数定义,是所有库函数都需要的;
        • 两个it(interrupt)文件是用来存放中断函数的;
    • 配置:

      • 下面#ifdef是一个条件编译,意思是定义了其后面的那个字符串,下面的#include语句才可以生效;
        在这里插入图片描述
    • 移动目录(将无法更改的目录放在最下面,更直观一点):
      在这里插入图片描述

    • 开启代码提示:
      在这里插入图片描述

    • 测试使用:
      在这里插入图片描述

      #include "stm32f10x.h"                  // Device header
      
      int main(void)
      {
      	//通过配置寄存器的方式点亮PC13
      //	RCC->APB2ENR = 0x00000010;
      //	GPIOC->CRH = 0x00300000;
      //	GPIOC->ODR = 0x00000000; //若配置0x00002000,灯PC13就灭了
      	
      	//开启使能时钟。第一个参数选择外设,第二个参数选择新的状态
      	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
      	
      	//配置端口模式
      	//定义一个结构体
      	GPIO_InitTypeDef GPIO_InitStructure;
      	//配置结构体的参数(Ctrl+Alt+空格可以提示参数)
      	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
      	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      	//第一个参数是选择哪一个GPIO,第二个参数是一个指向结构体的指针
      	GPIO_Init(GPIOC, &GPIO_InitStructure);
      	
      	//设置端口的高低电平进行点灯,GPIO_Pin_13端口置高电平时灯被点亮
      	//下面这个函数可以把指定端口设置为高电平
      //	GPIO_SetBits(GPIOC, GPIO_Pin_13);
      	//下面这个函数可以把指定端口设置为低电平
      	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
      	
      	while(1)
      	{
      		
      	}
      }
      
  • 步骤总结:
    • 建立工程文件夹,Keil中新建工程,选择型号;
    • 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹;
    • 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里;
    • 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹;
    • 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER;
    • 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run。

2.3 STM32F1系列型号分类及缩写

缩写释义Flash容量型号
LD_VL小容量产品超值系列16~32KSTM32F100
MD_VL中容量产品超值系列64~128KSTM32F100
HD_VL大容量产品超值系列256~512KSTM32F100
LD小容量产品16~32KSTM32F101/102/103
MD中容量产品64~128KSTM32F101/102/103
HD大容量产品256~512KSTM32F101/102/103
XL加大容量产品大于512KSTM32F101/102/103
CL互联型产品-STM32F105/107
  • 根据不同的型号选择不同的启动文件;
    在这里插入图片描述
  • 若使用的是STM32F100型号,就选择带VL的启动文件,再根据Flash的大小选择LDMD还是HD
  • 若使用的是STM32F101STM32F102STM32F103型号,就选择不带VL的启动文件,再根据Flash的大小选择LDMDHD还是XL
  • 若使用的是STM32F105STM32F107型号,直接选择CL的启动文件即可;
  • 此处使用的是STM32F103的芯片,又因为C8T6的Flash是64K,所以选择MD的启动文件。

2.4 工程架构

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失散13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值