zoukankan      html  css  js  c++  java
  • STM32学习笔记:创建标准库工程模板

    背景

    标准库下载:地址
    本章的项目可以在这里下载

    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个。

    • LibrariesCMSISDeviceSTSTM32F4xxInclude中,复制system_stm32f4xx.h stm32f4xx.h

    • LibrariesCMSISDeviceSTSTM32F4xxSourceTemplates中,复制system_stm32f4xx.c

    • LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesarm中,根据芯片型号复制好对应的文件,这里是startup_stm32f429_439xx.s

    • LibrariesCMSISInclude中复制core_cmSimd.h core_cmFunc.h core_cmInstr.h core_cm4.h(因为F429是M4系列的,根据core_cm4.h中要求的头文件的不同,来决定这一块复制的文件)

    将下面2个文件夹复制到新建的Library里面。

    • 复制LibrariesSTM32F4xx_StdPeriph_Driversrc
    • 复制LibrariesSTM32F4xx_StdPeriph_Driverinc

    将复制下面的两个文件到User

    • ProjectSTM32F4xx_StdPeriph_Templates中,复制main.c main.h
    • ProjectSTM32F4xx_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 Itemsimg

    2、填好Groups下项目如图所示

    img

    3、填好Groups对应的Files

    1)CMSIS:Add Files->将对话框弹出来的文件类型选为“All Files(.)”->选择文件(直至确保所有文件都加进去为止)

    2)Uesr: 仅需要添加*.c即可

    3)Library:只需要添加src文件夹里面的所有文件*.c

    4、点击OK

     (大致效果如图)

    img

    配置输出文件夹:选`ProjectObjects即可(注意:Objects文件夹中的文件是可以随时删除的)

      img

    配置预定义块:

    USE_STDPERIPH_DRIVER STM32F429_439xx这两个词复制进去。

    请注意,这里的 STM32F429_439xx 要根据芯片的型号填写(包括大小写),在stm32f4xx.h内注释部分能够找到

    img

    请注意:F4系列比较特殊,本人在配置的时候发现要么 stm32f4xx_fmc.c报错要么stm32f4xx_fsmc.c报错。

    后来发现原因是因为F427以及高级型号支持fmc功能,所以如果再导入fsmc则导致冲突。

    支持FMC的芯片移除FSMC;不支持FMC的芯片移除FMC;STM32F4 删除FMC

    添加工程目录:

    将 除开Project以外的文件夹 依次添加进来即可

    img

    以上,点击编译如果没有error就证明你成功了。

    配置下载器

    这是代码烧录到芯片中不可或缺的一个步骤

    1.配置下载器(根据自己拥有的下载器选择)

    img

    img

    2.匹配flash(根据芯片选好对应的Flash大小)

    img

    img

    3.驱动设置

    img

    以上便是创建一个模板项目工程、以及烧录在板子中的大致步骤。

  • 相关阅读:
    Java提高班(五)深入理解BIO、NIO、AIO
    Java提高班(四)面试必备—你不知道的数据集合
    Spring Boot 系列总目录
    Java提高班(三)并发中的线程同步与锁
    Java提高班(二)深入理解线程池ThreadPool
    Spring Boot(十四)RabbitMQ延迟队列
    Spring Boot(十三)RabbitMQ安装与集成
    Spring Boot(十二)单元测试JUnit
    Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
    VS2013中Python学习笔记[环境搭建]
  • 原文地址:https://www.cnblogs.com/schips/p/12416356.html
Copyright © 2011-2022 走看看