概述(来自搜索)

Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

keil新建工程(基于标准库)

keil工程文件
STM32官方固件库(标准外设库下载)
Test
keil.arm官网CMSIS PACKS
Test
新建工程

  1. Project→create new project,选择芯片型号
    Test
  2. 新建文件夹——移植标准外设库

ProjectName/
├── ProjectName.uvprojx # 项目配置文件
├── ProjectName.uvoptx # 用户选项配置文件
├── Start/ # 启动文件夹
│ ├── startup.s # 启动汇编代码
│ ├── stm32f4xx.h # STM32F4 系列微控制器头文件
│ ├── system_stm32f4xx.h # 系统初始化头文件
│ ├── system_stm32f4xx.c # 系统初始化代码
│ ├── stm32f4xx_conf.h #配置和定义硬件外设的初始化参数
│ ├── stm32f4xx_it.c
│ ├── stm32f4xx_it.h
│ ├── CMSIS/Core/ # Cortex-M 硬件抽象层,CMSIS 核心文件
│ │ ├── core_cm4.h
│ │ ├── core_cmFunc.h
│ │ ├── core_cmInstr.h
│ │ ├── core_cmSimd.h
├── User/ # 源文件夹
│ ├── main.c # 主程序入口
├── Hardware/ # 外设
│ ├── peripheral.c # 外设驱动实现代码
│ ├── peripheral.h # 外设驱动声明文件
├── Libraries/ # 库文件夹
│ ├── STM32F4xx_StdPeriph_Driver/inc # STM32 标准外设库
│ ├── STM32F4xx_StdPeriph_Driver/src

从下载的固件库复制相应文件到对应文件夹

  • keil中添加文件
    Test
  • 包含相关文件路径
    Test
    预处理定义
    需要选择使用的芯片

可能的报错

  1. fmc,fsmc相关文件内存在未定义变量名→可能stm32f401不支持,直接删去.c/.h文件
  2. 头文件中定义了引用了main.h,由于直接从示例项目中copy,本项目未建立main.h,所以将该引用注释掉即可
    Test
  1. 做个点灯,检测一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"

void GPIO_INIT(void){
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT ;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
int main (void){

GPIO_INIT();

while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_5);
for (int i = 0; i < 1000000; i++);
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
for (int i = 0; i < 1000000; i++);
}
}

keil调试

keil调试

配置相关

Option for target
keil工程目标选项配置

个人觉得这个博主关于keil的系列介绍的很详细,感兴趣的可以看一看,我只在这里记录一些常用的配置,不常用的不展开说明

  • Device
    Test
    新建工程的时候选择使用设备(在此之前需要去keil.arm下载相关设备的包)
  • target
    Test
  1. Arm 编译器
  2. 分为片外和片内
    ROM (Flash) 地址:在 ‘Read/Only Memory Areas’ 部分,你可以看到 ‘Start’ 和 ‘Size’ 字段,这里填入的是 Flash 存储器的起始地址和大小。
    程序存储地址
    RAM 地址:在 ‘Read/Write Memory Areas’ 部分,同样会显示 ‘Start’ 和 ‘Size’ 字段,用于设置 RAM 的起始地址和大小。
    Test
    Test
  • Output
    Test
    输出可执行文件/库的地址,信息配置(初学者保持默认选项即可)
  • Listing
    Test
    生成列表相关配置
  • User
    Test
    编辑之前/编译之前/编译之后执行的程序
  • C++
    Test
  1. Preprocessor symbols预处理定义
    stm32f4xx.h文件中即不用再定义使用芯片
  2. Language / Code Generation
  3. Include path
    项目文件所在文件夹路径都包含进来
  4. Misc Controls 多功能控件
  5. Compiler control string
    对编译器执行的指令
  • Asm
    Test
    针对asm汇编的配置,与C/C++配置内容相对应
  • Linker链接器配置
    Test
    Use Memory Layout from Target Dialog内存配置对话
  • Debug
    Test
  • Utilities
    Test
    Setting:设置
    很多人下载程序之后,需要复位一下程序才运行,原因在于没有勾选“Reset and Run”
    Test