STM32F4教程从零开始1——建工程

2023-05-16

今天,新买的机械到手,很开心,用得很爽,所以决定再写一篇,话说这是我第一次买机械键盘,我现在也支持程序员可以没有一个好的电脑,但必须有一个好的键盘的说法了。。。

接着,开始我们的游戏吧。

建工程分成5个阶段:

建目录——复制文件——MDK建工程——下载器设置

第一个阶段——建目录

1、在一个干净的文件夹里,见一个新文件夹F407,然后把下载好的固件库复制过来


2、在F407里面建5个目录(我们先来必须的,具体工程应用时目录更多,随着这系列的教程的继续会持续增加。。)

CMSIS:用于存放STM32的CPU核心相关的文件

Library:存放STM32的外设库,这是STM32好入门的关键,大大简化了编程

Driver:存放芯片级的驱动文件,如Bsp.c(板级支持包)、中断处理函数的文件、外设库的配置文件

User:用户的文件夹,存放如main..c、Global.h、用户新建的其他文件

Prj:MDK工程相关的目录,存放编译生成的中间文件,KEIL工程相关的文件


然后在Prj目录下新建Output目录和List目录,把编译生成的临时文件放在Output里面,备份或者拷给别人的时候,把Output里面的文件删掉可以大大减小压缩包的容量。


3、解压缩固件库到当且目录


这个目录里面我们主要用Libraries和Project里面的文件,那个chm是这个固件库的说明文档,里面有大量的例程。

然后,把我们的工程目录和固件库目录在桌面上并排方便操作


然后进入下一个阶段

第二阶段——复制文件

1、复制CMSIS里面的文件,也就是CPU相关的文件

都在固件库的\Libraries\CMSIS目录下

\Libraries\CMSIS\Device\ST\STM32F4xx\Include下的system_stm32f4xx.h和stm32f4xx.h

\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates下的system_stm32f4xx.c

\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm下的startup_stm32f40xx.s,这个目录下文件要根据所用的芯片选择,我们用的是F407所以。。。

\Libraries\CMSIS\Include\下的core_cm4.h和core_cm4_simd.h和core_cmFunc.h和core_cmInstr.h,STM32F1XX的小伙伴们注意选带cm3的。。。

这样CMSIS目录下共有8个文件


2、复制Library里的文件

这个简单,把\Libraries\STM32F4xx_StdPeriph_Driver下的src目录和inc目录复制过去就可以了

3、复制到Driver里的文件

\Project\STM32F4xx_StdPeriph_Templates下的stm32f4xx_conf.h和stm32f4xx_it.c和stm32f4xx_it.h

并且在目录下新建文件Bsp.c和Bsp.h(暂时不用,也可以不建)

4、复制到User里的文件

\Project\STM32F4xx_StdPeriph_Templates下的main.c和main.h

这个就不用截图了吧,复制结束,进入下一关

第三阶段——MDK建工程

1、启动MDK,也就是KEIL,我用是MDK5.1,并点击Project->New u.......不打了

2、目录选择到我们的工程的Prj目录下,敲入工程名F407,点确定

3、芯片选择F407VG,脑残级操作,把后来弹出来的窗口关了,没有弹出来的就算了

4、点工具栏上那个三个正方形的图标

5、添加目录,并添加响应文件夹里的文件,

注意添加CMSIS里面的文件的时候要把文件类型选成.*,避免漏掉.s文件,Library目录只需要添加src里面的文件就行了,那个Bsp就不用加了,还没写呢。。

6、工程设置,点击工具栏上的魔术棒图标

7、设置Output到Output目录,List到List目录

8、切换到C/C++选项卡,填入define内容

USE_STDPERIPH_DRIVER STM32F40XX(注意XX是大写的,就是跟CMSIS里面的.s文件一样,后来发现截图错了,懒得改了)

然后,点include paths后面的按钮,进入include设置窗口

9、添加工程的所有目录,除了Prj以外,Library里添加的是inc目录等其他目录,然后点OK


10、编译,点工具栏上的编译按钮

应该是没有错误或者有两个错误,用官方的纯净的固件库是没有错误的,如果用disvovery的包的话是会有两个错误的。就是没有选用是那块板子。。

这个时候,把main.h里面的

#if defined (USE_STM324xG_EVAL)
  #include "stm324xg_eval.h"
  #include "stm324xg_eval_lcd.h"

#elif defined (USE_STM324x7I_EVAL) 
  #include "stm324x7i_eval.h"
  #include "stm324x7i_eval_lcd.h"

#else
 #error "Please select first the Evaluation board used in your application (in Project Options)"
#endif
删了,注释比较保险。。

把main.c里面的

#if defined (USE_STM324xG_EVAL)
  #define MESSAGE1   "     STM32F40xx     "
  #define MESSAGE2   " Device running on  " 
  #define MESSAGE3   "   STM324xG-EVAL    "

#else /* USE_STM324x7I_EVAL */ 
  #define MESSAGE1   "     STM32F427x     "
  #define MESSAGE2   " Device running on  " 
  #define MESSAGE3   "  STM324x7I-EVAL    "
#endif 
删了,main函数也删了,重新写一个,哪些代码都是用官方的板子实现的,我们一般不用哪些代码

重新写一个main函数

int main(void)
{
  RCC_GetClocksFreq(&RCC_Clocks);
  SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);
 while(1)
 {
 }
}

重新编译,不会报错了吧,可能有一个waring,暂时忽略。

这样一个工程就建好了。

第四阶段——下载器设置

我用的是st-LINK,jlink同理,但是jlink一般用jtag接口下载,而st-link一般用swd接口下载。jlink也是支持swd的。。。

1、点那个工具栏上的魔术棒按钮,然后点debug选项卡,选择合适的下载器,jlink之类的,然后点setting

2、选择swd模式,看自己需求,用jtag接口的就不用改了,jtag一般用20pin那种,swd只有4-6根线。。

3、点flash download选项卡,把reset打上勾,然后点adding

4、选择合适的flash,看芯片说明

5、然后一路oK就OK了。

最后点工具栏上的下载按钮,下进去了,是不是很有成就感。哇咔咔。

最后,说一点,STM32F4一般配8M或者25M的晶振,这个需要根据实际情况修改库文件

在CMSIS下的stm32f4xx.h和system_stm32f4xx.c,有一个是只读的需要设置属性,去掉只读。

stm32f4xx.h第100行

 #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */

我的板子是8M的,所以把25改成8

system_stm32f4xx.c的第155行

#define PLL_M      25

我的板子是8M的,所以把25改成8

OK,这样就差不多了。好累啊。。。

有空把我工程发上来。。

工程链接:




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F4教程从零开始1——建工程 的相关文章

  • linux常用变量含义

    是传给脚本的参数个数 0 是脚本本身的名字 1 是传递给该shell脚本的第一个参数 2 是传递给该shell脚本的第二个参数 64 是传给脚本的所有参数的列表 是以一个单字符串显示所有向脚本传递的参数 xff0c 与位置变量不同 xff0
  • 四核 x86 MinnowBoard 和 UP Squared 单板计算机

    MinnowBoard的 MinnowBoard Turbot Quad 和Aaeon的UP平方单板计算机开始出货 xff0c 以社区网站和运行Linux和Android的英特尔SoC为特点 5月23日 xff0c Intel支持的Minn
  • 无人机悬停 优象科技LC302 V1.1光流模块

    5月30日 xff0c 学校组织了一年一度的五月风活动 xff0c 每个社团纷纷拿出自己协会的作品 在我们科技爱好者协会中 xff0c 展示了光流模块 xff0c 特斯拉线圈 xff0c 蓝牙小车 xff0c 激光显示仪器 xff0c 空气
  • git中tag与release的创建以及两者的区别

    简介 本文辨析在参与开源项目时会遇到的tag与release的概念区别与联系 xff0c 并比较两者的创建方法 定义 标签 xff08 tag xff09 是特定提交 xff08 commit 一个指针 xff0c 也就是每个tag对应一个
  • PX4源码的Makefile详细理解(包含部分makefile语法规则和编译逻辑)

    啰嗦 xff1a 越会一件事情 xff0c 就会忘了不会一件事情的感觉 前段时间在微信上看到这句话 xff0c 深以为然 xff0c 这就是为什么很多时候懂的人觉得自己讲的很清楚了 xff0c 但是不懂的人却觉得并没有讲的清楚明了 xff0
  • c/c++语言结构体中的冒号的用法

    结构体中常见的冒号的用法是表示位域 有些信息在存储时 xff0c 并不需要占用一个完整的字节 xff0c 而只需占几个或一个二进制位 例如在存放一个开关量时 xff0c 只有0 和 1 两种状态 xff0c 用一位二进位即可 为了节省存储空
  • ubuntu 升级内核的具体步骤

    收藏于 2013 04 09 迁移自本人的百度空间 转载自 http forum ubuntu org cn viewtopic php p 61 2730876 ubuntu 12 04内核是linux 3 2 0 24 xff0c 其实
  • 不花钱的机器人——ROS机器人仿真平台 | 模拟器 | Autolabor Simulation

    没钱买机器人底盘和激光雷达 xff0c 照样也能玩转机器人 xff01 Autolabor Simulation是什么 Autolabor Simulation是由 Autolabor 推出的一款基于ROS xff08 Robot Oper
  • 分布式之数据库和缓存双写一致性方案解析

    本文转自博客园 作者 xff1a 孤独烟 原文链接 xff1a https www cnblogs com rjzheng p 9041659 html 为什么写这篇文章 首先 xff0c 缓存由于其高并发和高性能的特性 xff0c 已经在
  • TVM在Windows10下编译安装

    本教程记录了Windows端安装tvm的过程 xff0c 欢迎交流 教程参考 TVM Windows下全功能编译方法 xff1a 从入门到劝退 https blog csdn net znsoft article details 11503
  • V4L2视频驱动框架---v4l2_device管理模块简述

    v4l2框架由4个主要的部分 数据结构 组成 xff1a v4l2 devices 包括v4l2 subdev xff1a v4l2 device管理所有的设备 media device xff1a meida device框架管理运行时的
  • Pixhawk uORB通信

    Pixhawk 飞控 系统是基于ARM的四轴以上飞行器的飞行控制器 xff0c 它的前身是PX4 IMU xff0c Pixhawk 把之前的IMU进行了完整的重构 xff0c 最新版本是2 4 3 而对应的Pixhawk 1 x版本与2
  • 深入了解C++linux工程师的技术需求,为你以后的职业发展定方向

    一 C 43 43 服务器程序员 xff08 流媒体后台 xff0c 游戏后台 xff0c 高性能服务器后台 xff09 1 精通C 43 43 xff0c STL xff0c Linux等 xff0c 熟悉设计模式 xff1b 2 熟练掌
  • C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版)

    C C 43 43 Linux后台服务器开发高级架构师学习知识点路线总结 xff08 2021架构师篇完整版 xff09 前言 xff1a 小编之前有跟大家分享过一篇架构师体系知识点总结的文章 xff0c 今天在原来的基础上有所改变更新 x
  • (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构

    一 xff1a 多人互动架构方案 xff08 一 xff09 WebRTC回顾 xff0c 两层含义 xff1a 1 WebRTC是google开源的流媒体客户端 xff0c 可以进行实时通讯 xff0c 主要应用于浏览器之间进行实时通讯
  • Linux C/C++后台开发高级架构师进阶指南-剑指腾讯T9

    C 43 43 后台开发是一个庞杂的技术栈 xff0c 因为没有统一的开发框架并且应用行业非常广泛 所有涉猎广泛 xff0c 这里就把C C 43 43 43 43 后台开发的技术点进行整理总结 xff0c 看完以后 xff0c 不会让你失
  • 如何让shell脚本变成可执行文件

    导读在本教程中介绍创建bash脚本并使用chmod命令使脚本可执行 xff0c 无需脚本前面加上sh或bash命令就可以运行它 创建脚本文件 第一步是使用以下命令创建一个扩展名为 sh的新文件 xff1a root 64 localhost
  • Fast-RTPS

    Fast RTPS是eprosima对于RTPS的C 43 43 实现 xff0c 是一个免费开源软件 xff0c 遵循Apache License 2 0 Fast RTPS现在被称为Fast DDS xff0c 作为ROS2的默认中间件
  • 如何使你的直流电机闭环?(PID讲解)

    前言 xff1a 看了看很多大佬写的PID讲解很全面也很复杂 xff0c 实在是不适合很多萌新入坑 xff0c 所以想按自己的理解写一篇通俗易懂的PID算法讲解 一 xff1a PID的基本定义 PID xff0c 就是 比例 xff08
  • Linux内核深度解析之中断、异常和系统调用——系统调用

    系统调用 系统调用是内核给用户程序提供的编程接口 用户程序调用系统调用 xff0c 通常使用glibc库针对单个系统调用封装的函数 如果glibc库没有针对某个系统调用封装的函数 xff0c 用户程序可以使用通用的封装函数syscall x

随机推荐

  • 面试题(嵌入式经典)

    1 用预处理指令 define声明一个常数 xff0c 用以表明1年中有多少秒 xff08 忽略闰年问题 xff09 define SECONDS PER YEAR 60 60 24 365 UL 2 写一个 标准 宏MIN xff0c 这
  • 择业面对选择,嵌入式 or 互联网,该进哪个?

    这个话题可能是不少电子相关专业的毕业生面临的困惑 xff0c 怎么选择 xff0c 可以听听别人的意见来作为参考 xff0c 但最终还是要由自己的兴趣和爱好决定 知乎上有这样一个提问 xff1a 本人大一开始玩各种单片机 FPGA DSP
  • 大疆无人机-图传技术

    大疆无人机 xff08 航拍器 xff09 遥控连接电脑驱动解决方案 http mini eastday com mobile 160722051432373 html 无人机系列之图传技术https blog csdn net ad360
  • 【2】uC/OS-III应用开发————>启动流程(STM32F767)

    简述 xff1a 上电启动 xff0c 分为三个阶段 CPU内核的初始化 xff0c ARM公司编写 xff0c 所用CPU的 s文件外设模块的初始化OS相关操作的初始化 启动 调度等等系统的启动 上电执行启动文件里面的复位函数Reset
  • Windows11原版镜像

    Windows 11 xff08 企业版 xff09 版本 22H2 xff08 2023年02月发布 xff09 64 位简体中文 文件 xff1a zh cn windows 11 business editions version 2
  • 树莓派操作系统

    树莓派操作系统 树莓派操作系统 介绍更新和升级树莓派操作系统 使用 APT使用 rpi 更新播放音频和视频 OMXPlayer 应用程序如何播放音频如何播放视频播放期间的选项在后台播放使用 USB 网络摄像头 基本用法自动化图像捕获延时拍摄
  • ARM平台FS6818/s5p6818开发板实验7 —— 通过I2C读取MMA8451三轴加速度传感器芯片实现计步器功能的实验

    实验目的 掌握I2C协议的内容 xff0c 了解I2C接口的特点 了解陀螺仪MMA8451的用途及数据采集过程 熟悉s5p6818处理器的I2C配置 xff0c 完成通过I2C读取MMA8451三轴加速度传感器芯片和加速度的改变实现计步功能
  • uC/OS-II 一些细节问题

    最高和最低优先级的任务最好不要使用 xff0c 而用户使用的任务多达56个 xff0c 0表示最高优先级 建立任务的函数有两个 OSTaskCreate OSTaskCreateExt xff08 可设置更多任务细节 xff09 OSSta
  • CubeMX配置FreeRTOS

    01 说在前面 RTOS为了提高任务调度效率一般都包含汇编程序 xff0c 因此移植起来需要一些汇编知识 xff0c 就算网上肯定有移植教程 xff0c 初次搞起来还是挺费劲的 初学时对RTOS代码不熟悉 xff0c 一开始就打击了积极性可
  • 云台控制协议VISCA、PELCO-D、PELCO-P

    1 VISCA部分协议命令 控制 命令 格式 备注 预置点 清除预置点 8X 01 04 3F 00 ZZ FF X 61 1 7 8是广播码 xff0c 下同 xff1b ZZ 61 00 3F xff0c 共64个预置点 设预置点 8X
  • lpms-ig1 IMU使用

    1 xff09 打开网址 https bitbucket org lpresearch lpmsig1opensourcelib 实现1 2 3块编译 2 xff09 给串口 ttyUSB0 赋予权限sudo chmod 777 dev t
  • Vitis AI1.1 系列教程1 - 软件安装

    这里写自定义目录标题 我的安装环境 安装过程在VMware中安装ubuntu 16 04安装Vitis AI几个常见的docker指令 我的安装环境 windows 10VMware 15 5Vitis AI 1 1ubuntu 16 04
  • PX4/Pixhawk - 编译环境搭建

    最近在学习px4的二次开发 xff0c 发现网上的环境搭建教程五花八门 xff0c 大多复杂 xff0c 重重踩坑之后 xff0c 发现还是官方的教程好使 xff0c 总结如下 xff1a 环境准备 采用vmware虚拟机搭建环境系统是ub
  • PX4/Pixhawk 教程 - 任务线程 - workqueue 和 task

    介绍 一个完整的px4的应用程序 xff08 或者叫任务 xff09 分为前台部分和后台部分 xff0c 前台部分是跑在shell任务中的 xff0c 比如helloworld那个程序就只有前台部分 xff0c 敲入指令即可在ssh中运行
  • PX4/Pixhawk 教程 - 可视化参数配置和自启动 - param

    px4常见的设置模块自启动的方式有两种 xff0c 一种是在rx xxx文件中添加需要启动的项 xff0c 另一种是通过yaml参数配置文件 通过添加系统启动项 通过修改系统的启动项实现模块的自启动 xff1a 在px4 ROMFS px4
  • PX4/Pixhawk 教程 - uavcan v1 - libcanard传输层最简例子

    介绍 上一篇主要是介绍libcanard的基础知识和函数 xff0c 比较偏理论一点 xff0c 这一篇呢主要注重于实践 主要解决以下问题 xff1a xff08 1 xff09 如何把uavcan v1编译到default标签 xff08
  • 如何把git的submoudule变为本仓库依赖

    介绍 一些著名的开源项目往往运用了大量的其他submodule xff0c 但是对于嵌入式开发 xff0c 我们希望可以维护一个稳定的完整的仓库 xff0c 因此需要把submodule的外部依赖改成本仓库依赖 步骤 删掉仓库根目录下的 g
  • qgroundcontrol编译环境搭建

    qgc编译环境搭建和编译 qt安装 从官网下载安装程序 http www qt io download open source 给安装程序授权 span class token function chmod span 43 x qt uni
  • STM32F4教程从零开始0——从官网获取固件库

    从大二到现在玩stm32也有两年了 xff0c 估计以后用stm32 的机会不多了 xff0c 所以打算写一系列的教程来纪念一下陪我走过大学时光 xff0c 成为我的科技竞赛重要利器的STM32F4 这系列的教程将用stm32F407VGT
  • STM32F4教程从零开始1——建工程

    今天 xff0c 新买的机械到手 xff0c 很开心 xff0c 用得很爽 xff0c 所以决定再写一篇 xff0c 话说这是我第一次买机械键盘 xff0c 我现在也支持程序员可以没有一个好的电脑 xff0c 但必须有一个好的键盘的说法了