STM32学习笔记:创建标准库工程模板
背景
STM32作为一类经典的MCU。本人从2018年1月1日开始对于STM32系列单片机的学习。
本人所持的型号为;STM32F429ZI-DISCOVERY,M4内核,封装类型为:LQFP144
很感谢我的班主任送我的开发板:STM32F429I-DISCOVERY (M4)
以下是ST官网对应的型号数据以及开发文档:
芯片:
- 英文版文档信息:https://www.st.com/en/microcontrollers-microprocessors/stm32f429ii.html
- 中文版文档信息:https://www.st.com/zh/microcontrollers-microprocessors/stm32f429ii.html
开发板:https://www.st.com/en/evaluation-tools/32f429idiscovery.html
第三方资料(正点原子):http://www.openedv.com/posts/list/13912.htm
STM32F4 DISCOVERY 信息
评估板 STM32F4 DISCOVERY
硅芯制造商:STMicroelectronics
内核架构:ARM
内核子架构:Cortex-M4
硅芯号:STM32F429I
硅芯系列号:STM32F4xx
套件包含:Dev Board STM32F429ISTM32F429ZIT6 MCU,2MB 内部FLASH,256KB 内部RAM,LQFP144 引脚封装
板载ST-LINK/V2调试下载工具
USB供电
采用2.4" QVGA TFT LCD
外扩 64 Mbits SDRAM
USB OTG接口引出
2个用户按键,RESET,user
板载3轴数字陀螺仪 L3GD20
6个LED指示灯
– LD1 (red/green) for USB communication
– LD2 (red) for 3.3 V power-on
– Two user LEDs:
LD3 (green), LD4 (red)
– Two USB OTG LEDs:
LD5 (green) VBUS and LD6 (red) OC(over-current)STM32F429I-DISCO is based on an STM32F429ZIT6 and includes an ST-LINK/V2 embedded debug tool interface, 2.4" TFT LCD, SDRAM 64 Mbits, Gyroscope ST MEMS, LEDs, pushbuttons and a USB OTG micro-B connector. The most importand features intoduced in new 429/439 MCU series are synchronous dynamic memory (SDRAM) controller and LCD TFT controller that supports resolution up to 800x600 pixels.
STM32对应的开发文档也有3种类型:
版本 | 描述 |
---|---|
HAL库版本 | 起初被人诟病的一个版本,但现在作为ST主推的一个开发方向 |
标准库函数 | 是一个经典版本 |
寄存器版本 | 难度比较大 |
本人下载的官方标准库为:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0
解压后如下:(对于本块知识,可以看看博友的文章:http://t.cn/RHTEHmT)
Libraries
Project
Utilities
_htmresc
MCD-ST Liberty SW License Agreement V2.pdf
stm32f4xx_dsp_stdperiph_lib_um.chm
stm32f4xx_dsp_stdperiph_lib_um.chw
创建工程模板
文件管理
为了方便管理,我们在创建项目前,先规范好项目文件夹。
请注意,创建工程模板没有规定一定要按以下步骤,可以是另外的创建步骤,但只要是便于管理,那么就是一个好的工程。
在项目文件夹中,创建以下文件夹:
文件夹 | 用途 |
---|---|
CMSIS | Cortex微处理器软件接口标准,适用于所有Cortex系列 |
Library | 存放STM32驱动库文件 |
User | 根据用户文件夹的不同,带了不同的驱动,也是main.c的存放目录 |
Project | 工程相关的目录,存放编译生成的中间文件 |
拷贝有关的文件
将下面4个文件夹中指定的文件复制到新建的CMSIS
文件夹中,共8个。
在
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_stm32f429_439xx.s
在
Libraries\CMSIS\Include
中复制core_cmSimd.h core_cmFunc.h core_cmInstr.h core_cm4.h
(因为F429是M4系列的,根据core_cm4.h
中要求的头文件的不同,来决定这一块复制的文件)
将下面2个文件夹复制到新建的Library
里面。
- 复制
Libraries\STM32F4xx_StdPeriph_Driver\src
- 复制
Libraries\STM32F4xx_StdPeriph_Driver\inc
将复制下面的两个文件到User
里
- 在
Project\STM32F4xx_StdPeriph_Templates
中,复制main.c main.h
- 在
Project\STM32F4xx_StdPeriph_Templates
中,复制stm32f4xx_conf.h stm32f4xx_it.c stm32f4xx_it.h
我甚至写了一个自动拷贝工程的脚本
##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
# File Name: make.sh
# Created : 2020年02月28日 19:44:03
##
#!/bin/sh
TOP=`pwd`
BASE=`pwd`
LIB_DIR=../STM32F4xx_DSP_StdPeriph_Lib_V1.4.0
make_dirs () {
mkdir ${TOP}/Project_StdPeriph_F429 -p
cd ${TOP}/Project_StdPeriph_F429
mkdir CMSIS Driver Library User Project -p
BASE=`pwd`
}
get_LIB_DIR_PATH () {
cd ${LIB_DIR}
LIB_DIR=`pwd`
}
make_CMSIS () {
echo ""
echo "make_CMSIS"
cd ${BASE}
echo `ls ${LIB_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Include/`
echo "cp [Libraries/CMSIS/Device/ST/STM32F4xx/Include/*]"
cp ${LIB_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Include/* ./CMSIS
echo `ls ${LIB_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/`
echo "cp [Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c]"
cp ${LIB_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c ./CMSIS
echo `ls ${LIB_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/`
echo "cp [Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f429_439xx.s]"
cp ${LIB_DIR}/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f429_439xx.s ./CMSIS
echo `ls ${LIB_DIR}/Libraries/CMSIS/Include/`
echo "cp [Libraries/CMSIS/Include/{core_cm4_simd.h core_cmFunc.h core_cmInstr.h core_cm4.h}]"
cd ${LIB_DIR}/Libraries/CMSIS/Include/
#cp core_cmSimd.h core_cmFunc.h core_cmInstr.h core_cm4.h ${BASE}/CMSIS
cp core_cm4_simd.h core_cmFunc.h core_cmInstr.h core_cm4.h ${BASE}/CMSIS
}
make_Library () {
echo ""
echo "make_Library"
cd ${BASE}
echo `ls ${LIB_DIR}/Libraries/STM32F4xx_StdPeriph_Driver/`
echo "cp [Libraries/STM32F4xx_StdPeriph_Driver/*]"
cp ${LIB_DIR}/Libraries/STM32F4xx_StdPeriph_Driver/* ${BASE}/Library -r
}
make_User () {
cd ${BASE}
echo ""
echo "make_User"
echo `ls ${LIB_DIR}/Project/STM32F4xx_StdPeriph_Templates/`
echo "cp [Project/STM32F4xx_StdPeriph_Templates/main*]"
cp ${LIB_DIR}/Project/STM32F4xx_StdPeriph_Templates/main* ${BASE}/User -r
echo `ls ${LIB_DIR}/Project/STM32F4xx_StdPeriph_Templates/`
echo "cp [Project/STM32F4xx_StdPeriph_Templates/{stm32f4xx_conf.h stm32f4xx_it.c stm32f4xx_it.h}]"
cd ${LIB_DIR}/Project/STM32F4xx_StdPeriph_Templates/
cp stm32f4xx_conf.h stm32f4xx_it.c stm32f4xx_it.h ${BASE}/User -r
}
make_dirs
get_LIB_DIR_PATH
make_CMSIS
make_Library
make_User
创建&配置项目
创建项目,选定芯片型号,确定,关闭弹出的窗口(或者选NO)
配置组:
1、点击:Manage Project Items
2、填好Groups下项目如图所示
3、填好Groups对应的Files
1)CMSIS:Add Files->将对话框弹出来的文件类型选为“All Files(.)”->选择文件(直至确保所有文件都加进去为止)
2)Uesr: 仅需要添加*.c即可
3)Library:只需要添加src文件夹里面的所有文件*.c
4、点击OK
(大致效果如图)
配置输出文件夹:选`Project\Objects即可(注意:Objects文件夹中的文件是可以随时删除的)
配置预定义块:
将USE_STDPERIPH_DRIVER STM32F429_439xx
这两个词复制进去。
请注意,这里的 STM32F429_439xx 要根据芯片的型号填写(包括大小写),在stm32f4xx.h内注释部分能够找到
请注意:F4系列比较特殊,本人在配置的时候发现要么 stm32f4xx_fmc.c报错要么stm32f4xx_fsmc.c报错。
后来发现原因是因为F427以及高级型号支持fmc功能,所以如果再导入fsmc则导致冲突。
支持FMC的芯片移除FSMC;不支持FMC的芯片移除FMC;STM32F4 删除FMC
添加工程目录:
将 除开Project以外的文件夹 依次添加进来即可
以上,点击编译如果没有error就证明你成功了。
配置下载器
这是代码烧录到芯片中不可或缺的一个步骤
1.配置下载器(根据自己拥有的下载器选择)
2.匹配flash(根据芯片选好对应的Flash大小)
3.驱动设置
以上便是创建一个模板项目工程、以及烧录在板子中的大致步骤。
STM32学习笔记:创建标准库工程模板的更多相关文章
- C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型
一.string #include <string> using std::string 初始化函数: string s1; 默认构造函数 s1 为空串 ...
- C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型
标准库类型(一) --命名空间using与string类型 引: 标准库类型是语言组成部分中更主要的哪些数据类型(如:数组.指针)的抽象! C++标准库定义的是高级的抽象数据类型: 1.高级:由 ...
- js学习笔记之标准库
在全局函数中,this等于window 在函数被作为某个对象的方法调用时,this等于那个对象. 数组的函数: 检测:Array.isArray() 转换:toString(),toLocalStr ...
- Python 3 学习笔记之——标准库概述
1. 操作系统接口 os 模块提供了一些与操作系统相关联的函数. >>> os.getcwd() # 获取当前工作目录 '/home/senius' >>> os. ...
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
- stm32学习笔记——外部中断的使用
stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...
- STM32学习笔记——OLED屏
STM32学习笔记--OLED屏 OLED屏的特点: 1. 模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2. 显示尺寸为0.96寸 3. 分辨率为128*64 4. ...
- STM32学习笔记——点亮LED
STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...
- STM32学习笔记(四)——串口控制LED(中断方式)
目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...
- STM32学习笔记-NVIC中断知识点
STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...
随机推荐
- aliyun全站DCDN刷新--Django
1.编写原因: 由于登录到阿里云DCDN,需要登录加打开各种页面,导致推送一次感觉非常麻烦,所以编写(网上以有很多可以借鉴) 2.基础环境 # 所需模块 pip install aliyun-pyth ...
- Django之ajax简介
1.MTV与MVC 框架类型:MVC: M:models V:views C:controller Django用的框架就是MTV MTV: M:models T:templates V:views ...
- 一款基于Vue3实现的漂亮且功能强大的在线海报设计器
大家好,我是 Java陈序员. 我们在工作中经常需要设计各种各样的图片,海报.产品图.文章图片.视频/公众号等. 我们可以选择使用 PS 来设计图片,但是有时候想快速完成任务,有没有一款工具支持快速生 ...
- Rust中的并发性:Sync 和 Send Traits
在并发的世界中,最常见的并发安全问题就是数据竞争,也就是两个线程同时对一个变量进行读写操作.但当你在 Safe Rust 中写出有数据竞争的代码时,编译器会直接拒绝编译.那么它是靠什么魔法做到的呢? ...
- kali 设置 Java 版本,并更换为 1.8 版本
kali 设置 Java 版本,并更换为 1.8 版本 1.安装 JDK 1.下载java 1.8 :https://repo.huaweicloud.com/java/jdk/8u202-b08/j ...
- 1、Linux基础
1.centos 安装 2.磁盘分区表示方法 1.2.3.4:主分区,最多4个主分区,后数据为逻辑分区 主分区可以激活,但一个硬盘只能激活一个主分区 被激活的主分区就是用来引导操作系统的主分区 扩展分 ...
- uni-app移动端开发中ios/安卓--坑和经验总结
1. ios new时间对象,需要用逗号隔开传日期的方式, 不支持 new Date('2019-03-01 08:00:00') 格式: 支持以下两种方式: 2. ios个别版本对fixed的属性的 ...
- ECMAScript 语言规范每年都会进行一次更新,而备受期待的 ECMAScript 2024 将于 2024 年 6 月正式亮相。目前,ECMAScript 2024 的候选版本已经发布,为我们带来了一系列实用的新功能。
Promise.withResolvers 使用 Promise.withResolvers() 关键的区别在于解决和拒绝函数现在与 Promise 本身处于同一作用域,而不是在执行器中被创建和一次性 ...
- 智能勘探 | AIRIOT智慧油田管理解决方案
石油勘探和开采地处偏远地区,涉及面广且生产规模大.特殊的作业环境下,使得工作人员作业条件艰苦,仅靠人工值守难度很大,不可避免的遇到一系列硬核挑战: 1.设备维护难度较高: 2.采油厂分布地域广.分 ...
- FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
AVS3是中国AVS工作组制定的第三代音视频编解码技术标准,也是全球首个已推出的面向8K及5G产业应用的视频编码标准.AVS工作组于2019年3月9日完成第三代AVS视频标准(AVS3)基准档次的制 ...