1.新建一个文件夹,命名为工程的名字(例如:STM32_Demo),在此文件夹下建立5个文件夹,分别命名为。如下图:CORE,FWLIB,OBJ,SYSTEM,USER

2.在ST官网下载最新标准固件库(STM32F4xx_DSP_StdPeriph_Lib_V1.8.0)并解压:

https://www.st.com/en/embedded-software/stm32-embedded-software.html?querycriteria=productId=SC961

打开Keil uVision5,新建工程,选择 CPU(STM32F407ZG),点击OK后可以退出,不需要选择配套固件。

3.从解压到固件包往新建的工程(STM32_Demo)中拷贝文件:

a.将STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\STM32F4xx_StdPeriph_Driver中的inc和src文件分别拷贝到STM32F4_Template\FWLIB中;

b.将STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm目录下的startup_stm32f40_41xxx.s文件,将STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Include中的core_cm4.h和core_cmSimd.h,core_cmFunc.h,core_cmInstr.h文件均拷贝到STM32F4_Template\CORE文件夹中;

c.将STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include中的stm32f4xx.h和system_stm32f4xx.h共2个文件, 将STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates中的main.c,stm32f4xx_conf.h,stm32f4xx.it.c,stm32f4xx_it.h,system_stm32f4xx.c共5个文件拷贝到STM32F4_Template\USER目录下:

4.在所建的工程中添加文件:

a.右键Template,打开Manage Project Items, 更改并添加文件。在FWLB中添加所有(注意删除stm32f4xx_fmc.c),在USER中添加main.c,stm32f4xx_it.c,system_stm32f4xx.c,在CORE中添加startup_stm32f40_41xxx.s。

此时点击工程左边目录,可以看到工程树结构。

b.打开Option for Target ,打开output标签,更改目标输出文件路径,选中Create HEX File。在C/C++标签中的Define中输入STM32F40_41xxx,USE_STDPERIPH_DRIVER,在Include Path中添加路径。这样软件会更改寻找头文件的路径。

c.打开main.c文件,删除原有内容,添加新的代码:


#include <stm32f4xx.h>void Delay(__IO uint32_t nCount){while(nCount--);}void GPIO_Con(){GPIO_InitTypeDef GPIO_Struct;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);GPIO_Struct.GPIO_Pin=GPIO_Pin_9;GPIO_Struct.GPIO_Mode=GPIO_Mode_OUT;GPIO_Struct.GPIO_Speed=GPIO_Speed_100MHz;GPIO_Struct.GPIO_OType=GPIO_OType_PP;GPIO_Struct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOF,&GPIO_Struct);}int main(void){GPIO_Con();while(1){GPIO_SetBits(GPIOF,GPIO_Pin_9);Delay(1000);GPIO_ResetBits(GPIOF,GPIO_Pin_9);Delay(1000);}}

将stm32f4xx_it.c中的头文件#include "main.h"注释掉,将void SysTick_Handler(void)函数中的内容注释掉。

5.更改其他事项:

打开文件system_stm32f4xx.c,将#define PLL_M      25中的25改为8(及更改时钟频率)。打开main.c路径下的stm32f4xx.h(需编译后才能找到),将其中的#define HSE_VALUE    ((uint32_t)25000000)改为#define HSE_VALUE    ((uint32_t)8000000)。

STM32那点事之构建工程模板相关推荐

  1. STM32那点事(3)_中断(上)

    中断是STM32核心模块之一,几乎所有的模块都需要和中断打交道.了解STM32运作机制非常重要.在<STM32那点事(1)_STM32F40_41xx启动文件详解>中讲解启动流程中提到,中 ...

  2. STM32那点事(6)_定时器(上)

    STM32定时器是CPU中的基本功能模块之一,最基本的功能是提供定时,STM32定时器共用16个定时器,主要分为两个基本定时器,10个通用定时器,2个高级定时器,以及两个看门狗定时器.看门狗定时器后面 ...

  3. STM32那点事(5)_ADC(下)

    官方SDK中提供了ADC操作的相关主要接口,极大方便了对ADC的配置 ADC数据结构 ADC的主要数据结构有两个ADC_InitTypeDef 和  ADC_CommonInitTypeDef ADC ...

  4. STM32那点事(5)_ADC(中)

    在上节得ADC转换规则中可以看到有两个规则:规则通道和注入通道,两个规则应用场景不太一样: 规则通道是比较常用的转换规则,支持连续循环自动采集,不需要人工进行干预,可以由硬件自动触发进行采集,在同一个 ...

  5. STM32那点事(5)_ADC(上)

    ADC介绍 ADC顾名思义为模数转换,与之相对的是DAC为数模转换,AD/DA为电子元器件中的重要模块,主要负责模拟信号和数字信号之间的转换,因为我们计算机中使用到的主要是数字信息010101等,而我 ...

  6. STM32那点事(4)_DMA(下)

    DMA按照其数据流传输可以分为存储器到外设.外设到存储器或者存储器到存储器的传输. 外设到存储器模式 这种模式可以通过DMA_SxCR寄存器中的EN置1,每次产生外设请求,数据流都会启动数据源到FIF ...

  7. STM32那点事(4)_DMA(上)

    前言 DMA(直接存储器访问)主要用于外设与存储器之间以及存储器与存储器之间提高数据传输. 主要作用: 1:无需借助CPU操作,就可以通过DMA在两个外设或者存储器之间传递数据,速度较快. 2:解放C ...

  8. STM32那点事(3)_中断(下)

    上节主要讲述了STM32 的中断基础知识以及一般配置过程.外部中断与其他模块中断相对要复杂一点.外部中断一般都是由GPIO触发,是在整个系统中需要经常用到. 介绍 STM32F4 有多达23个中断,每 ...

  9. STM32那点事(2)_时钟树(下)

    上两篇主要讲述了系统时钟,APB1, APB2, AHB配置的整个过程,是系统启动的关键,剩余部门将单独介绍 独立看门狗(IWDGCLK) 独立看门够采用内部单独时钟LSIRC,用于与其他系统时钟隔离 ...

最新文章

  1. 【译文转帖】用C#写COM组件 Building COM Objects in C#
  2. json字段顺序读取 python_如何利用Python批量读取视频文件的时间长度?
  3. ZJU PAT 1027 Colors in Mars
  4. 201521123030《Java程序设计》 第2周学习总结
  5. Psych101(part2)--Day2
  6. 第八讲:tapestry组件
  7. 详解3种常用数据分析方法,满足你职场95%的高频需求
  8. Neuralink新动作:在洛杉矶开设动物实验中心
  9. linux rewind函数,C语言rewind()函数:将文件指针重新指向文件开头
  10. python mysql捕获异常_python mysql无法捕获异常
  11. Python中的输入输出(IO)
  12. java 获取jsessionid_如何从JSESSIONID加载Java HttpSession?
  13. sketch软件_初学UI设计要学sketch软件吗?
  14. linux基本知识点汇集
  15. 怎么做SEO——页面权重计算公式
  16. 实现一个简洁朴素的左侧贴边导航栏html+CSS+javaScript
  17. 国产化适配(身份证读卡器,条码枪,扫描仪,ca证书,在线文档编辑器)
  18. cisco思科sx10投屏_思科报告:Java和Android是恶意软件的荨麻疹
  19. BootStrap文件上传控件
  20. 产品体验报告——百词斩

热门文章

  1. 使用proguard混淆java web项目代码
  2. 6.HBase时髦谨慎财会会计
  3. jsp中forward与sendRedirect的区别
  4. 速查mysql数据大小
  5. 日志分析工具 Log Parser
  6. MyBatis入门(一) -- 简介
  7. 【Spark Summit East 2017】提升Python与Spark的性能和互操作性
  8. 高性能JavaScript-JS脚本加载与执行对性能的影响
  9. jboss7(01)服务器开启和关闭命令
  10. 我对Linux输入输出重定向的小结