STM32开发相关
开发准备
固件库
_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使用高
= =救命,寄存器不会,这里丢个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编译器对中文支持不好
项目文件目录若有中文路径,头文件等都无法读取,项目内中文也会被报错