背景

标准库下载:地址

本章的项目可以在这里下载

STM32作为一类经典的MCU。本人从2018年1月1日开始对于STM32系列单片机的学习。

本人所持的型号为;STM32F429ZI-DISCOVERY,M4内核,封装类型为:LQFP144

很感谢我的班主任送我的开发板:STM32F429I-DISCOVERY (M4)

以下是ST官网对应的型号数据以及开发文档:

芯片:

开发板: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 STM32F429I

STM32F429ZIT6 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学习笔记:创建标准库工程模板的更多相关文章

  1. C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型

    一.string    #include <string>  using std::string    初始化函数:    string s1;        默认构造函数 s1 为空串 ...

  2. C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型

     标准库类型(一) --命名空间using与string类型 引: 标准库类型是语言组成部分中更主要的哪些数据类型(如:数组.指针)的抽象! C++标准库定义的是高级的抽象数据类型: 1.高级:由 ...

  3. js学习笔记之标准库

    在全局函数中,this等于window  在函数被作为某个对象的方法调用时,this等于那个对象. 数组的函数: 检测:Array.isArray() 转换:toString(),toLocalStr ...

  4. Python 3 学习笔记之——标准库概述

    1. 操作系统接口 os 模块提供了一些与操作系统相关联的函数. >>> os.getcwd() # 获取当前工作目录 '/home/senius' >>> os. ...

  5. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  6. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

  7. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  8. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

  9. STM32学习笔记(四)——串口控制LED(中断方式)

    目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...

  10. STM32学习笔记-NVIC中断知识点

    STM32学习笔记-NVIC中断知识点总结 中断优先级设置步骤 1. 系统运行后先设置中断优先级分组 函数:void NVIC_PriorityGroupConfig(uint32_tNVIC_Pri ...

随机推荐

  1. ITIL4服务价值系统(SVS)与莫比乌斯环:无限服务优化的拓扑之旅

    莫比乌斯环:单一而无限的象征 莫比乌斯环,这个拓扑学上的奇观,以其独特的一体两面特性,完美地映射了ITIL4服务价值系统的精髓.它象征着无限.统一和连续性,提示我们看待事物时应超越传统二元对立的视角, ...

  2. C#/C++ 通过ODBC连接OceanBase Oracle租户

    概述 近期我们项目正处于将Oracle数据库迁移到OceanBase Oracle租户模式的阶段.考虑到我们项目采用了C++和C#混合开发,并且使用了多种技术,因此存在多种数据库连接方式.然而,针对C ...

  3. keepalived(1)- keepalived集群概述

    目录 1. 高可用集群概述 2. keepalived概述 2.1 keepalived介绍 2.2 keepalived体系架构 2.3 keepalived实现原理 2.4 keepalived配 ...

  4. java中调用exe程序和问题处理

    常规方法如下: public class RunExe { public static void main(String[] args) { try { // exe文件的完整路径 String fi ...

  5. 80x86汇编—80x86架构

    文章目录 计算机如何工作 存储器 逻辑地址到物理地址 寄存器 数据寄存器使用细节 其他知识点细节 堆栈Stack 标志寄存器 中断 汇编入门简单,深入难 使用8086架构进行学习,本章节如果没有学过计 ...

  6. Spring 面向切面编程AOP 详细讲解

    1. Spring 面向切面编程AOP 详细讲解 @ 目录 1. Spring 面向切面编程AOP 详细讲解 每博一文案 2. AOP介绍说明 2.1 AOP的七大术语 2.2 AOP 当中的 切点表 ...

  7. webapi创建WCF WebService+WCF WebService远程服务调用

    首先需要引入soapcore包 这个包提供了所需的类和soap终结点中间件. 引入这个这个包之后,我们需要定义提供的服务. 这里我写了一个用于查询省份面积的服务. 省份信息服务 /// <sum ...

  8. 什么是Java线程池

    摘自:某个百度知道 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在 ...

  9. NET9 AspnetCore将整合OpenAPI的文档生成功能而无需三方库

    OpenAPI 规范是用于描述 HTTP API 的标准.该标准允许开发人员定义 API 的形状,这些 API 可以插入到客户端生成器.服务器生成器.测试工具.文档等中.尽管该标准具有普遍性和普遍性, ...

  10. ChatGPT-4o模型功能介绍

    1.概述 OpenAI 持续突破人工智能的边界,推出了其最新模型 ChatGPT-4o,作为 ChatGPT-4 的继承者,该模型有望带来显著的提升和创新功能.本文将深入解析 ChatGPT-4 与 ...