stm32之手动创建keil工程--HAL库

用CubeMx创建了好多stm32的工程,这里记录下手动创建keil工程的过程。完整工程在最后。

一、准备工作

1.1、下载对应的HAL库,

这里使用的是stm32f103c8t6, 下载地址stm32HAL库

在页面中输入对应型号点击进行二级页面进行下载

++++


下载的之后的目录如下,用到的是红色框圈住的。

1.2、准备工程

各文件夹下具体操作如下:

|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Doc | 相关文档 |
| Drivers | 将STM32CubeF1-master\STM32CubeF1-master\Drivers\STM32F1xx_HAL_Driver、STM32CubeF1-master\STM32CubeF1-master\Drivers\CMSIS下的文件放入到该文件夹下,这里要进行文件删除,具体见下 |
| Inc | 将STM32CubeF1-master\STM32CubeF1-master\Projects\STM32F103RB-Nucleo\Templates\Inc下的文件放入到该文件夹下 |
| MDK-ARM | STM32CubeF1-master\STM32CubeF1-master\Projects\STM32F103RB-Nucleo\Templates\MDK-ARM下的startup_stm32f103xb.s复制到该文件夹下 |
| Src | 将STM32CubeF1-master\STM32CubeF1-master\Projects\STM32F103RB-Nucleo\Templates\Src下的文件放入到该文件夹下 |

Drivers:

CMSIS:

对于CMSIS,除了Include和Device 其它全部删除,对于Device/ST/STM32F1xx下的文件除了Include和Source其它全部删除,对于Source/Templates下只保留system_stm32f1xx.c

STM32F1xx_HAL_Driver:

除了Inc和Src,其它全部删除; Inc下除了usb_ll_,删除文件名带有_ll_的.h文件; Src 下除了usb_ll_, 删除文件名带有_ll_的.c文件,这里也可以提前删除带template名字的相关.c文件,否则编译会报错

二、创建工程,放在MDK-ARM目录下

选中对应的型号,这里是stm32f103c8

选中CMSIS下的CORE(Cortex-M处理器支持)

工程创建完成之后要对工程进行配置

添加分组

这里列出相关名字,可以直接复制

  • Application/MDK-ARM
  • Application/User/Core
  • Drivers/STM32F1xx_HAL_Driver
  • Drivers/CMSIS

Application/MDK-ARM

Application/User/Core

Drivers/STM32F1xx_HAL_Driver

Drivers/CMSIS

添加头文件

这里列出相关路径,可以直接复制

  • ../Inc
  • ../Drivers/STM32F1xx_HAL_Driver/Inc
  • ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
  • ../Drivers/CMSIS/Device/ST/STM32F1xx/Include
  • ../Drivers/CMSIS/Include

添加宏

USE_HAL_DRIVER,STM32F103xB

USE_HAL_DRIVER是为了可以引入头文件**#include "stm32f1xx_hal.h"**

STM32F103xB是为了可以引入头文件**#include "stm32f103xb.h" (对于stm32f103来说)**

编译报错

删除#include "stm32f1xx_nucleo.h"

再次编译,还是报错

删除template相关文件,在目录中也要删除

第三次编译,不报错,但是一堆警告

警告是由Keil 中ARM的编译器版本导致 ,默认是version 6,

第四次编译,大功告成

调试器配置

三、点灯代码验证工程

cpp 复制代码
int main(void)
{

	GPIO_InitTypeDef GPIO_InitStruct = {0};

  HAL_Init();

  /* Configure the system clock to 64 MHz */
  SystemClock_Config();

	__HAL_RCC_GPIOB_CLK_ENABLE();
	
	GPIO_InitStruct.Pin=GPIO_PIN_9; 	//PF9,10
	GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;  	//推挽输出
	GPIO_InitStruct.Pull=GPIO_PULLUP;          	//上拉
	GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;    	 	//高速
	HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);

  /* Infinite loop */
  while (1)
  {
  }
}

四、配置好的代码

  • 工程包括所有的外设,如果不需要自行删除
  • 对于不会配置的操作,可以先利用CubeMX生成一个工程,参考生成的工程来配置(包括代码,keil配置等)

完成代码

相关推荐
花月mmc10 小时前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
en.en..11 小时前
STM32 HAL 库 | 核心知识点整理
单片机·嵌入式硬件
无敌贵点大王11 小时前
从寄存器层面重学STM32(9)——DMA理论
stm32·单片机·嵌入式硬件
希和202712 小时前
51 单片机入门笔记:江科大课程代码逐行讲解(按键控制 LED 流水灯)
笔记·单片机·mongodb
希和202712 小时前
51 单片机按键控制 LED:江科大课程代码小白笔记
笔记·单片机·嵌入式硬件
希和202712 小时前
51 单片机 LED 流水灯:从直接法到循环法(江科大课程笔记)
笔记·单片机·mongodb
Zwawa1 天前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式
Dev_XH1 天前
【成品设计】基于CH32H417的CH32H417AIOT家庭微电网
单片机·嵌入式硬件·物联网·ai
国科安芯1 天前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
国科安芯1 天前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天