开发准备

固件库

_htmresc 无用

Libraries 库函数文件

Project 官方提供的工程示例和模板

Utilities STM32官方评估板(官方的一个小电路板,用于测评STM32)的相关例程

Release_Notes 库函数的发布文档

stm32f10x_stdperiph_lib_um 使用手册

新建工程

下面弹出的这个窗口是Keil的工程助手,可以帮助新建工程,但是这里先用不到,关上即可

随后,打开STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

其中的文件为STM32的启动文件,STM32的程序就是从这些启动文件执行的

将其中的启动文件放到我们创建的项目中,记得分文件夹

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

目录下的stm32f10x.h是STM32的外设寄存器描述文件,用于描述STM32有哪些寄存器和它对应的地址,其余两个system文件主要是用于配置时钟

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

这两个cm3文件就是内核的寄存器描述,其中还有一些内核的配置函数(.c文件)

以上就是工程的必要文件

然后回到Keil,改组名,添加已有文件

add时,加入的为startup_stm32f10x_md.s(这是启动文件中的一个,关于启动文件的选择,看这里),以及所有的.c .h文件

此步,完成效果如下:

!!记得添加头文件路径

然后添加相应的main文件

随后进行后续开发操作…

注意


一、.基于寄存器

基于寄存器的开发方式更底层,更直接,程序效率会更高些,但是开发效率不高

点灯(依据STM32F10xxx参考手册)

STM32在外设使用前,需要先使能时钟

↑↑↑这里的IOPCEN,就是用于使能GPIOC的时钟

往下找可以看到解释,这一位写1,就是打开GPIOC的时钟

将其置为1根据16进制,即为:0 0 0 0 0 0 1 0

STM32每个端口有16个IO口。所以要分2个寄存器来操作。这2个寄存器用来选择对应的IO口,IO0—7使用低,8-15使用高

STM32的GPIO端口寄存器配置

= =救命,寄存器不会,这里丢个B站的视频吧BV1th411z7sn 14分32秒开始19分结束

二、基于库函数

通过调用ST官方设定好的函数,来间接的配置寄存器

开发效率高

找到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src目录

misc.c为内核的库函数,其余为外设库函数

全选复制后放入项目文件夹Libraries就可以了

找到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc目录

这些为库函数的头文件,全选复制到项目文件夹Libraries(与上相同

在Keil中添加组

最后效果如下:

继续添加:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的

stm32f10x_conf.h

stm32f10x_it.c

stm32f10x_it.h

到工程的User目录下(main函数同级目录)

并添加USE_STDPERIPH_DRIVER宏以确保conf.h文件正常引入(stm32f10x.h第8296行标明)

添加User Library头文件路径

这样基于库函数的工程就建好了

新建工程步骤总结

建立工程文件夹,Keil中新建工程,选择型号

工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹

工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里

工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹

工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER

工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

三、基于HAL库

该方式隐藏了底层逻辑,对于STM32不熟悉的人使用该方式,可能会停留在较浅水平

建议学过标准库后再来了解。

杂项解析

启动文件选择

添加头文件路径

AC6编译器对中文支持不好

项目文件目录若有中文路径,头文件等都无法读取,项目内中文也会被报错

可参考:keil 使用AC6 中文警告解决办法