当前位置: 首页 > ops >正文

keil之stm32f10x模板工程创建

文章目录

  • 1.文件目录说明(含未添加到keil工程的文件:如部分启动文件)
    • 一级目录说明:
    • 二级目录说明:
    • 三级目录说明:
    • 文件树结构
    • 横向展示文件目录框图
  • 2. keil工程文件创建
    • 新建空白工程
    • project工程文件目录说明
    • 横向展示的工程文件目录结构图
    • 头文件路径配置
    • `USE_STDPERIPH_DRIVER宏定义设置(重要)`
    • main.c测试用例
    • keil编码与编辑设置
    • 编译测试
  • 参考资料


1.文件目录说明(含未添加到keil工程的文件:如部分启动文件)

一级目录说明:

  1. app文件夹:存放main.c文件,是程序的入口文件。
  2. config文件夹:存放stm32f10x_conf.h配置文件、中断配置文件(it.c、it.h)
  3. firmware文件夹:固件库(firmware library),存放内核文件夹cmsis、ST官方标准驱动库文件夹driver、启动文件startup
  4. mdk文件夹:存放keil工程文件
  5. my_driver文件夹:外设器件驱动文件,比如显示屏驱动文件,按键驱动文件等。(部分教程里也经常取名为Hardware)
  6. third_library文件夹:比如移植开源组件EayLogger、FatFs文件系统、FreeRTOS实时系统
  7. readme.md文件:必要的工程文件介绍信息

二级目录说明:

firmware之下有cmsis文件、driver文件、startup文件:

  1. cmsis文件下存放core与device文件夹
  2. driver文件下存放inc、src文件夹,需要从STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x直接复制过来
  3. startup文件下存放各类启动文件,方便后续选择和添加到keil工程里

三级目录说明:

cmsis文件下存放core与device文件夹

  1. core文件下,需要移植STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport
  2. device文件夹下,需要移植STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

文件树结构

project/

├── app/ # 应用程序

│ └── main.c # 程序主入口

├── config/ # 配置文件

│ ├── stm32f10x_conf.h # 外设库配置

│ ├── it.c # 中断服务程序

│ └── it.h # 中断头文件

├── firmware/ # 固件库

│ ├── cmsis/

│ │ ├── core/ # CMSIS核心

│ │ │ ├── core_cm3.c

│ │ │ └── core_cm3.h # 移植自…\CoreSupport

│ │ │

│ │ └── device/ # 设备特定文件

│ │ ├── stm32f10x.h

│ │ ├── system_stm32f10x.c

│ │ └── … # 移植自…\DeviceSupport\ST\STM32F10x

│ │

│ ├── driver/ # 标准外设驱动

│ │ ├── inc/ # 头文件

│ │ └── src/ # 源文件

│ │

│ └── startup/ # 启动文件(未全部加入工程)

│ ├── startup_stm32f10x_ld.s # 小容量

│ ├── startup_stm32f10x_md.s # 中容量

│ └── startup_stm32f10x_hd.s # 大容量

├── mdk/ # Keil工程(子目录会随着工程创建自动创建)

│ ├── Project.uvprojx

│ └── Objects/ # 编译输出

├── my_driver/ # 用户驱动

│ ├── lcd/ # 显示屏驱动

│ └── key/ # 按键驱动

├── third_library/ # 第三方库

│ └── EasyLogger/ # 日志组件

└── readme.md # 工程说明

横向展示文件目录框图

project/
app/:::l2
config/:::l2
firmware/:::l2
mdk/:::l2
my_driver/:::l2
third_library/:::l2
readme.md
main.c
stm32f10x_conf.h
it.c
it.h
cmsis/:::l3
driver/:::l3
startup/:::l3
core/:::l3
device/:::l3
core_cm3.c
core_cm3.h
stm32f10x.h
system_stm32f10x.c
inc/:::l3
src/:::l3
stm32f10x_gpio.h
stm32f10x_usart.h
stm32f10x_gpio.c
stm32f10x_usart.c
startup_stm32f10x_ld.s
startup_stm32f10x_md.s
startup_stm32f10x_hd.s
Project.uvprojx
Objects/
lcd/:::l3
key/:::l3
lcd_driver.c
lcd_driver.h
key_driver.c
key_driver.h
EasyLogger/:::l3
elog.c
elog.h

2. keil工程文件创建

新建空白工程

Project->New uVision Project
在这里插入图片描述
文件命名stm32f10x,选择mdk目录
在这里插入图片描述
选择stm32f103c6系列的芯片
在这里插入图片描述
默认勾选OK即可
在这里插入图片描述

project工程文件目录说明

在这里插入图片描述

  1. app文件夹:存放main.c文件,是程序的入口文件。
  2. config文件夹:存放stm32f10x_conf.h配置文件、中断配置文件(it.c、it.h)。
  3. firmware/startup文件夹:存放指定启动文件startup_stm32f10x_ld.s
  4. firmware/cmsis文件夹:存放内核.c文件
  5. firmware/driver文件夹:存放src文件
  6. my_driver文件夹:存放外设驱动文件
  7. third_library文件夹:存放三方库文件

横向展示的工程文件目录结构图

以下是横向展示的工程文件目录结构图,使用Mermaid语法绘制,不同层级用不同颜色区分:

project/ (工程根目录)
app/ (应用程序)
config/ (配置文件)
firmware/ (固件库)
my_driver/ (用户驱动)
third_library/ (第三方库)
main.c
stm32f10x_conf.h
it.c
it.h
startup/ (启动文件)
cmsis/ (ARM内核支持)
driver/ (标准外设驱动)
startup_stm32f10x_ld.s
core_cm3.c 来源cmsis/core
system_stm32f10x.c 来源cmsis/device
src/ (驱动源码)
stm32f10x_gpio.c
lcd_driver.c
EasyLogger/
elog.c

头文件路径配置

魔术棒-》勾选Use MicroLIB
在这里插入图片描述
魔术棒-》C/C++,Include Paths,添加下列路径(third_library后面有需要再添加)
third_library后续有需要再添加
在这里插入图片描述

USE_STDPERIPH_DRIVER宏定义设置(重要)

CTRL+F搜索conf.h
在这里插入图片描述
可以看到需要添加如下宏定义 USE_STDPERIPH_DRIVER
在这里插入图片描述
魔术棒-》C/C++,添加上述宏定义
在这里插入图片描述

main.c测试用例

#include "stm32f10x.h"                  // Device header
#include <stdbool.h>
#include <stdio.h>int main(void)
{while(1){//test}
}

keil编码与编辑设置

在这里插入图片描述

编译测试

编译成功后".\Objects\stm32f10x.axf" - 0 Error(s), 0 Warning(s).
在这里插入图片描述
在这里插入图片描述


参考资料

  1. STM32 大小容量芯片之间的差别及启动文件的选择——博客园
  2. STM32不同型号的芯片对应的启动文件如何选择——CSDN博客
  3. 工程模板创建——B站
http://www.xdnf.cn/news/17419.html

相关文章:

  • 简要介绍交叉编译工具arm-none-eabi、arm-linux-gnueabi与arm-linux-gnueabihf
  • 【重建技巧】Urban Scene Reconstruction-LoD细节提升
  • 【unitrix数间混合计算】2.9 小数部分特征(bin_frac.rs)
  • 第十四届蓝桥杯青少年组省赛 编程题真题题解
  • [SC]高效地调试SystemC模型中的语法错误
  • AI大模型模态特征详解
  • 【ref、toRef、toRefs、reactive】
  • Qt Graphics View框架概述
  • Redis 事务机制
  • Sklearn 机器学习 数据降维PCA 指定方差百分比计算分量数
  • 生态问题是什么?
  • C++ 虚函数、多重继承、虚基类与RTTI的实现成本剖析
  • 徘徊识别场景误报率↓77%:陌讯动态时序建模方案实战解析
  • Linux网络转发系统框架分析
  • 强化学习概论(1)
  • 生产环境某业务服务JVM调优总结
  • 关于C语言本质的一些思考
  • 计算BERT-BASE参数量
  • 驾驶场景玩手机识别准确率↑32%:陌讯动态特征融合算法实战解析
  • 数据结构——优先级队列(PriorityQueue):一文解决 Top K 问题!
  • 01数据结构-图的邻接矩阵和遍历
  • Java进阶之单列集合List接口下的通用方法
  • Serper注册无反应
  • spring的知识点:容器、AOP、事物
  • C语言中级_宏定义传参、volatile和extern关键字、字符串数组和字符串函数
  • Python Gradio 写的-文本情感分析小软件 (不用Html+css+js 可写出网页来)
  • Mac屏幕取色不准?探究原理和换算规则
  • STM32学习笔记6-TIM-2输出比较功能
  • PyQt5技术栈简述
  • SpringBoot日志关系