搭建stm32工程

目录

  • 1.引脚
  • 2.启动配置
  • 3.支持包安装
    • [3.1 在线模式:](#3.1 在线模式:)
    • [3.2 离线模式](#3.2 离线模式)
  • 4.工程搭建
    • [4.1 工程建立](#4.1 工程建立)
    • [4.2 文件添加](#4.2 文件添加)
      • [4.2.1 start文件](#4.2.1 start文件)
      • [4.2.2 Library文件夹](#4.2.2 Library文件夹)
      • [4.2.3 User文件夹](#4.2.3 User文件夹)
      • [4.2.4 debug选择](#4.2.4 debug选择)
      • [4.2.5 编译测试](#4.2.5 编译测试)
    • [4.3 启动文件选择](#4.3 启动文件选择)
    • [4.4 工程框架图](#4.4 工程框架图)

1.引脚

橙色列的是电源相关的引脚、蓝色的是系统相关的引脚、绿色的是IO口功能引脚

  1. 类型:S是指电源、I/O是指输入输出、O是指输出、I是指输入
  2. I/O电平:表示所能容忍的电平电压。空的是指最高能容忍3.3V,FT则能容忍5V。因此没有FT的引脚需要接5V的电压就要加装电平转换电路
  3. 主功能:上电后默认的功能
  4. 默认复用功能:IO口上连接的外设功能引脚,可以将主功能改成对应的复用功能
  5. 重映射功能:如果有两个功能同时用在一个IO口,并且是确实需要用到这两个功能,就可以将其中一个功能重映射其它的端口上,前提是该引脚得支持,也就是表中对应位置不为空

以上是从列的角度来进行介绍,下面是对具体的引脚进行介绍,序号和表中的引脚编号相对应

(1) 该引脚可以借一个3V的电池,但系统断电的时候,备用电池可以给内部的RTC时钟和寄存器提供电源

(2) PC13-TAMPER-RTC:IO口-侵入检测-RTC时钟,从表中可以看出默认情况下是PC(PC并行口即可以作数字输出口,也可以作数字输入口)。复用功能可以是TAMPER-RTC,也就是侵入检测,比如要兼顾产品安全性,那么可以在产品的外壳添加防拆的触电和该引脚进行连接,如果有人拆开产品,就有电压变化,从而触发stm32的侵入信号,进行数据删除操作;RTC则可以用来输出RTC校准时钟、RIC闹钟脉冲或者秒脉冲

(3)、(4) IO口或者接32.768KZ的RTC晶振

(5)、(6)接系统的主晶振,一般是8MHz,然后芯片内部又锁相环电路,可以对这个8MHz的频率进行倍频,最终产生72MHz的频率作为系统的主时钟 ,或者可以说是滴答时钟

(7)NRST:系统复位引脚,N表示低电平复位

(8)、(9)内部模拟部分的电源。VSSA是负极,接GND;VDDA是正极,接3.3V

(10)~(19)都是IO引脚,其中10号还兼具了WKUP功能,也就是唤醒处于休眠待机状态的STM32

(20)boot引脚,是用来配置启动模式的

(23)、(24)、(35)、(36)、(47)、(48)都是主电源口,因为stm32采用的是分区供电的模式,所以比较多

(25)~(33)都是I/O口

(34)、(37)、(38)、(39)、(30)都是IO口,默认功能是调试端口,也就是用来调试程序和下载程序的。可以看出支持SWD(只用到前两个引脚)和JTAG两种调试方式(5个都用到)。默认是使用SWD(使用STLINK来下载程序的),这种调试方式下,剩下的3种I/O可以当作普通的引脚来使用,但是需要在程序中进行配置。

2.启动配置

00:就是指定程序开始执行的位置,一般用的都是Flash。

01:至于系统存储器其实存储的就是stm32的一段Bootloader程序(BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境),理解成将串口的数据(比如下载程序)刷新到主闪存中,比如之前提到的(34)、(37)、(38)、(39)、(30)五个引脚有SWD和JITAG两种调试方式,默认是调试下载功能,但是如果不小心配置成普通的I/O引脚,那么就得用UART协议的去进行串口输出。

3.支持包安装

3.1 在线模式:

加载完选择想要安装的支持包然后点击install就行了,就是这种加载很慢

3.2 离线模式

主要是提供了一些已经下载好的支持包,点击对应的芯片然后点下载就行了:📎支持包.zip

压缩包解压后,选择对应的支持包然后双击安装就行了:

4.工程搭建

所需资料:

解压后有以下内容:

Libraries:建工程所需要的一些库函数的文章

Projiect:里面是官方提供的工程搭建示例、模板

Utilities:STM32相关评估板的例程,也就是用来测评stm32最小电路板的程序

剩下两个则是库函数的发布文档以及使用手册

那么接下来进入主题:

4.1 工程建立

  1. 首先先建立一个文件夹专门用来存放之后各自实验的相关工程文件夹,这个看各自所需。

我个人的是:D:\develop\STM32Project\stm32工程模板\

  1. 然后点击所对应板子的支持包:
  1. 之后会弹出一个工程建立速达界面,暂时忽略不用:
  1. 建立好之后是这样的,但是此时并还不能用,缺乏必要的库函数文件等:
  1. 看看此时的工程文件夹的内容:

4.2 文件添加

4.2.1 start文件

这里直接给出Start文件的压缩包,解压到新建工程的文件夹下就行,至于在keil中添加,往下面看:📎Start.zip

接下就是将一些必要的文件夹添加进工程中,需要的文件夹在上面已经给出了

  1. 首先是启动文件的添加,先在工程所在的文件夹(D:\develop\STM32Project\stm32工程模板\)建议一个Start的文件夹,用来存放启动文件:

启动文件从哪来:\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm:

将其全部复制进刚建立工程的新文件夹Start中:

同时返回上两级:\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\:

这三个文件也需要添加进Start文件夹中,其中第一个.h就是描述stm32的外设寄存器 的描述文件(用来描述stm32有哪些寄存器和对应的地址的),另外两个则是则是用来配置时钟的,将这三个也一起添加进Start文件中:

此时还不够,由于stm32是内核和内核外围设备组成的,已经添加了内核外围设备的寄存器描述文件,就还得添加内核设备的寄存器描述文件:打开\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport:

这些就是内核设备的寄存器描述.h文件,而.c则是相关的配置函数,将它们也一起复制到Start文件夹中:

这样就好了,之后回到keil软件,先把文件名改成Start:

然后右击添加已经存在的文件:

选择相应的启动文件,因此复制的启动文件只能选择一个,因此需要根据对应的板子去选择相关的启动文件添加进去:

这里选择这个,同时不要点add,还继续添加,先长按ctrl鼠标点击选择该启动文件,然后继续选择剩余的5个.h、.c文件,之后就可以点add添加了

这些都是只读文件,不然修改的,然后还差最后一步,就是文件路径添加进工程中:

4.2.2 Library文件夹

📎Library.zip

在工程项目文件再新建一个新的文件夹:Library,用来存放库函数:

接下来则打开固件库的文件夹:\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src

其中misc.c是内核的库函数,其余的则都是外设的库函数文件,接下来就是全选复制粘贴到新建的文件夹Library中:

同时打开打开固件库的inc文件夹,将头文件夹也复制粘贴到Library,\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc:

接下来回到Keil软件,添加Libray组:

然后右键添加已经存在的文件组:

接下来就将将Library的路径添加上:

4.2.3 User文件夹

📎User.zip

可以在该文件夹下开始编写代码,但此时还差一些头文集和宏定义。

先继续在工程模板的目录下创建一个User文件夹:

同时在keil中创建一个User组:

之后将相关.h文件添加进User中,\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template:

第一个中用来配置库函数头文件的包含关系以及用来参数检测的,剩下两个文件则是中断函数相关的,将这些复制到User目录下:

接下来回到keil软件,将文件加入进新的User组:

添加后是这样的:

至于main.c可以右击User组添加,,需要注意的是一定要选择好路径,否则会跑到User文件夹外面去:

在main.c中插入头文件:

此时还是不能用,还缺一个宏定义以及将该User文件目录添加进工程。什么宏定义???

就是USE_STDPERIPH_DRIVER,条件编译,需要有定义这个宏,#include "stm32f10x_conf.h"语句才有效:

这样工程就建的差不多了。

4.2.4 debug选择

4.2.5 编译测试

mian.c文件中:

c 复制代码
#include "stm32f10x.h"                  // Device header
int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
//	GPIO_SetBits(GPIOC, GPIO_Pin_13);
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
	while(1)
	{
		
	}
}

观察led灯情况

4.3 启动文件选择

上面的Start文件选择启动文件时,是需要根据芯片的型号去选择的:

4.4 工程框架图

相关推荐
时光の尘28 分钟前
FreeRTOS菜鸟入门(六)·移植FreeRTOS到STM32
c语言·数据结构·stm32·单片机·嵌入式硬件·嵌入式
Johnson Sheng1 小时前
正点原子STM32H743单片机实现tcp通信
stm32·单片机·tcp/ip
小白今天也很酷1 小时前
使用FreeRTOS解决单片机串口异步打印
单片机·嵌入式硬件·freertos·rtos·串口异步打印
努力创造奇迹2 小时前
STM32 HAL库 FreeRTOS 临界区保护的作用以及使用
stm32·单片机·嵌入式硬件
精彩漂亮ing2 小时前
STM32外部中断与外设中断区别
stm32·单片机·嵌入式硬件
模拟IC攻城狮5 小时前
(最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题)
单片机·嵌入式硬件·华为·硬件架构·电源·模拟芯片
如愿小李5 小时前
基于STM32的室内环境监测系统
stm32·单片机·嵌入式硬件
爱学习的颖颖5 小时前
stm32| 中断标志位和中断挂起位 | TIM_ClearFlag 函数和TIM_ClearITPendingBit 函数
stm32
森旺电子7 小时前
STM32的BootLoader 从SD卡更新固件
stm32·bootloader