STM32基于HAL 库开发包创建新的工程-编译-烧录

1. 创建目录

先创建项目根目录, 比如我的项目名称为Test01, 然后在其中创建如下子目录 OBJ, HALLIB, CORE, USER, 结构如下:

复制代码
TEST01
	├─CORE
	├─HALLIB
	├─OBJ
	└─USER
2. 新建空工程

打开Keil, 我所使用的版本是V5.25.2.0
Project -> New uVision Project 在弹出的对话框选中 TEST01/USER 路径

下一步会让选配MCU型号, 我这里用到的是STM32L475VE

之后会在USER自动生成项目文件

复制代码
TEST01
	├─CORE
	├─HALLIB
	├─OBJ
	└─USER
	    ├─DebugConfig    调试配置文件
	    ├─Listings             中间文件
	    ├─Objects             中间文件
	    ├─test01.uvoptx    
	    └─test01.uvprojx   工程文件, 非常关键, 不能删除	    
3. 从STM32CubeL4包中复制文件到项目中

STM32CubeL4包版本使用的是 STM32Cube_FW_L4_V1.13.0 版本

复制内容列表


From:
STM32Cube_FW_L4_V1.13.0\Drivers\STM32L4xx_HAL_Driver

To:
Test01\HALLIB

复制完成后, 在STM32L4xx_HAL_Driver目录下只保留Inc, Src, 其他全删掉


From:
STM32Cube_FW_L4_V1.13.0\Drivers\CMSIS\Device\ST\STM32L4xx\Source\Templates\arm\startup_stm32l475xx.s

To:
Test01\CORE


From:
STM32Cube_FW_L4_V1.13.0\Drivers\CMSIS\Include

这个目录下复制如下5个文件
cmsis_armcc.h
core_cm4.h
core_cmFunc.h
core_cmInstr.h
core_cmSimd.h

To:
Test01\CORE


From:
STM32Cube_FW_L4_V1.13.0\Drivers\CMSIS\Device\ST\STM32L4xx\Include

这个目录下赋值如下3个文件
stm32l4xx.h
stm32l475xx.h
system_stm32l4xx.h

To:
Test01\USER


From:

将如下两个目录中所有文件复制过去
STM32Cube_FW_L4_V1.13.0\Projects\B-L475E-IOT01A\Templates\Inc
STM32Cube_FW_L4_V1.13.0\Projects\B-L475E-IOT01A\Templates\Src

所有文件如下
main.c
stm32l4xx_hal_msp.c
stm32l4xx_it.c
system_stm32l4xx.c
main.h
stm32l4xx_hal_conf.h
stm32l4xx_it.h

To:
Test01\USER


这一步复制正点原子自定义的SYSTEM文件夹, 其中内容也可以自己实现, 包括时钟初始化, 串口,和延时函数

From:
开发板资料\【正点原子】潘多拉IoT开发板资料\4,程序源码\1,裸机例程 - HAL库版本\实验0-1 Template工程模板-新建工程章节使用\SYSTEM

To:
Test01\SYSTEM

4. 将复制来的文件添加到Keil工程中

在工程名(Target1)上右键-> Manage Project Items...

  1. Project Targets一栏中修改工程名为Test01
  2. Groups一栏删掉默认的Source Group 1, 新增CORE, SYSTEM, HALLIB, USER
  3. 选择HALLIB, 添加HALLIB\STM32L4xx_HAL_Driver\Src目录下所有文件
  4. 选择CORE, 添加CORE目录下所有文件(选择 All Files)
  5. 选择USER, 添加所有的USER/*.c文件
  6. 选择SYSTEM, 添加所有的SYSTEM/*.c文件
5. 设置头文件存放路径

菜单栏Projects => Options For Target 'Test01'...

在弹出的对话框选择C/C++选项, 定位到下方的Include Paths, 然后添加如下路径:
..\CORE
..\USER
..\SYSTEM\delay
..\SYSTEM\sys
..\SYSTEM\usart
..\HALLIB\STM32L4xx_HAL_Driver\Inc

6. 添加全局宏定义标识符

依旧是菜单栏Projects => Options For Target 'Test01'...

在弹出的对话框选择C/C++选项, 在Processor Symbols一栏中, 定位到Define输入框

输入: USE_HAL_DRIVER,STM32L475xx 注意逗号

7. 选择编译中间文件存放目录

依旧是菜单栏Projects => Options For Target 'Test01'...

在弹出的菜单栏选择Output选项卡, 点击Select Folder For Objects...按钮, 在弹出的窗口中选择路径 Test01\OBJ

然后在Output选项卡勾选Create HEX File选项, 用于生成可烧录的hex二进制文件

然后取消勾选Browse Information选项, 如果勾选了会导致编译时间过长

8. 编辑main.c文件

在main.h中删除#include "stm32l475e_iot01.h"这一行, 否则会报错

移除HALLIB/stm32l4xx_hal_msp_template.c文件, 这里会出现重复定义报错

移除HALLIB/stm32l4xx_hal_timebase_tim_template.c 文件, 这个文件会导致延时函数不可用

使用如下代码执行编译

c 复制代码
#include "sys.h"
#include "delay.h"
#include "usart.h"

void Delay(__IO uint32_t nCount);
void Delay(__IO uint32_t nCount)
{
	while(nCount--){};
}

int main(void){
	GPIO_InitTypeDef GPIO_InitStruct;
	HAL_Init();                     //初始化 HAL 库
	SystemClock_Config();           //初始化系统时钟为 80M
	__HAL_RCC_GPIOE_CLK_ENABLE(); 	//开启 GPIOE 时钟
	GPIO_InitStruct.Pin = GPIO_PIN_7;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;     //推挽输出
	GPIO_InitStruct.Pull = GPIO_PULLUP;             //上拉
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;   //高速
	HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
	
	while(1)
	{
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_SET);    //PE7 置 1
		Delay(0x7FFFFF);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_RESET);  //PE7 置 0
		Delay(0x7FFFFF);
	}
}
9. 烧录hex文件

编译后在OBJ目录下会生成test01.hex文件

菜单栏Projects => Options For Target 'Test01'...

Debug选项卡, 在下面Use选项栏选择ST-Link Debugger

在下方勾选Run to main(), 只要电击仿真就会直接运行到main函数, 否则会先执行startup_stm32l475xx.s文件中的Reset_Handler函数, 之后再跳到main函数

然后电机Settings设置ST LINK参数:

Port选择SW

Clock栏下Req填写4MHz

然后返回菜单栏Projects => Options For Target 'Test01'...

Utilities选项卡下勾选 Use Debug Driver

然后电击面板中的Settings

勾选Reset and Run

完成以上设置后, 电击Download按钮, 或者按F8, 即可实现烧录

相关推荐
曾浩轩2 小时前
跟着江协科技学STM32之4-5OLED模块教程OLED显示原理
科技·stm32·单片机·嵌入式硬件·学习
BreezeJuvenile3 小时前
ADC_案例练习:独立模式多通道采集
stm32·单片机·adc·多通道采集·dma辅助
代码游侠3 小时前
学习笔记——HC-SR04 超声波测距传感器
开发语言·笔记·嵌入式硬件·学习
Joshua-a3 小时前
高云FPGA在线调试/逻辑分析仪简要使用流程
嵌入式硬件·fpga开发·高云
国科安芯3 小时前
高轨航天器抗辐照MCU选型约束分析
单片机·嵌入式硬件·性能优化·机器人·安全性测试
CS Beginner3 小时前
【单片机】嵌入式显示屏开发框架:QT、SDL、LVGL 深度解析
单片机·嵌入式硬件·qt
YouEmbedded3 小时前
解码从架构到嵌套向量中断控制器(NVIC)
stm32·软件架构·mcu中断·exti外设·启动文件分析
亿道电子Emdoor4 小时前
【Altium】原理图中网络标签作用范围的设置
单片机·嵌入式硬件
风行男孩4 小时前
stm32基础学习——串口(USART)的基本使用
stm32·嵌入式硬件·学习