[其他ST产品] STM32简介与创建工程

[复制链接]
1533|32
 楼主| 无法去污粉 发表于 2023-5-31 00:25 | 显示全部楼层
型号分类及缩写
选择器件型号,因为启动文件要根据芯片型号和Flash内存大小
376086476239243ccd.png
 楼主| 无法去污粉 发表于 2023-5-31 00:26 | 显示全部楼层
新建工程步骤
工程文件下载:stm32f103c8t6工程模板

建立工程文件夹,Keil中新建工程,选择器件型号(此处选stm32f103c8t6)

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

Start文件夹里面包含如下文件【工程架构中会介绍文件的作用】

517666476239faed93.png
以上文件的本地路径分别是

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
 楼主| 无法去污粉 发表于 2023-5-31 00:26 | 显示全部楼层
工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里

将文件夹内的文件添加到工程分组里
20233647623b762471.png
 楼主| 无法去污粉 发表于 2023-5-31 00:26 | 显示全部楼层
选择所有文件
71453647623c1bd437.png
 楼主| 无法去污粉 发表于 2023-5-31 00:26 | 显示全部楼层
工程选项中添加头文件路径:点击魔术棒,C/C++,Include Paths内声明所有包含头文件(即含有.h的文件)的文件夹(因为是自己移入工程的)
98842647623d056194.png
 楼主| 无法去污粉 发表于 2023-5-31 00:27 | 显示全部楼层
工程里新建User文件夹并新建main.c文件

添加User文件夹
64126647623de302d0.png
 楼主| 无法去污粉 发表于 2023-5-31 00:27 | 显示全部楼层
添加新文件
34958647623ebec030.png
 楼主| 无法去污粉 发表于 2023-5-31 00:27 | 显示全部楼层
选择文件类型和文件路径(主要要选择已经建立好的文件夹下)
7825647623ff1cb15.png
 楼主| 无法去污粉 发表于 2023-5-31 00:28 | 显示全部楼层
添加Library文件夹,将该本地路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src和STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc下的库函数文件都添加到该文件夹下

还需要在user文件夹下添加下列文件,文件所在的本地路径是STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
2025464762410eee9d.png
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER,使用库函数就必须声明

工程选项,Debug,下拉列表选择对应调试器ST-Link Debugger,点击右边Settings,Flash Download里勾选Reset and Run,下载程序后会立马复位执行
 楼主| 无法去污粉 发表于 2023-5-31 00:28 | 显示全部楼层
工程架构
172076476242809944.png
startup_stm32f10x_md.s文件
中断函数中调用了复位中断和其他中断(其他函数的参数用到的中断函数名就在该文件查询),完成设置初始SP(堆栈指针)、设置初始PC(程序计数器)、配置时钟系统

复位中断首先调用SystemInit()函数,该函数在system_stm32f10x.h中定义(-system_stm32f10x.c和system_stm32f10x.h用来配置时钟)

复位后函数调用顺序:startup_stm32f10x_cl.s(启动文件) → SystemInit() → SetSysClock () → SetSysClockTo72()
 楼主| 无法去污粉 发表于 2023-5-31 00:29 | 显示全部楼层
main函数文件中引入"stm32f10x.h"的头文件,该头文件中又引入 “stm32f10x_conf.h”(头文件包含关系配置)。因为"stm32f10x.h"使用条件编译的条件是USE_STDPERIPH_DRIVER,所以需要在Define内定义,在stm32f10x_conf.h中引入了Library中所有的库函数头文件

842356476244793ef0.png

其他中断的函数定义不在"stm32f10x_it.h"中而在"startup_stm32f10x_md.s"文件中

stm32f10x.h是stm32的外设寄存器描述文件,作用和51单片机的REGX52.H一样,描述寄存器及其地址(外设描述文件)

core_cm3.h是内核寄存器描述文件
 楼主| 无法去污粉 发表于 2023-5-31 00:29 | 显示全部楼层
工程文件命名:

hardware——存储于硬件相关的程序
system——存储无硬件的程序
library——库函数程序
user——主程序
工程模板文件中执行keilkill.bat,会把Listings和Object里面的文件清空
 楼主| 无法去污粉 发表于 2023-5-31 00:29 | 显示全部楼层
四、其他
对于所使用的硬件,其实是了解如何初始化时序图和读写时序图,也就是说硬件编程是看时序写驱动

对于外设,需要了解其触发方式、通道配置、输出到哪里,写外设文件函数一般包含初始化函数和触发函数

W25Q64 Flash模块,存储数据并用SPI总线进行通信

旋转编码器包含编码电机的霍尔传感器输出和光电传感器的输出两种
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部