一、基于固件库

1、新建文件夹
新建一个Template文件夹,在此文件夹下新建五个子文件夹

2、打开keil软件,点击菜单栏Project –>New Uvision Project,如果有其他工程,先点击Project->Close Project,然后将目录定位到刚才建立的文件夹 Template 之下的 USER 子目录,同时,工程取名为 Template 之后点击保存,我们的工程文件就都保存到 USER 文件夹下面

3、 接下来会出现一个选择 Device 的界面,我的开发板型号是STM32F407ZG,这里我选择 STMicroelectronics→STM32F4 Series→STM32F407→STM32F407ZG(如果使用的是其他系列的芯片,选择相应的型号就可以了)

点击OK,出现界面,直接点击cancel

4、将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。打开官方固件库包,定位到我们之前准备好的固件包目录:\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver 下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 FWLIB 文件夹下面。

5、将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。
打开官方固件库包,定位到目录\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 下面,将文件 startup_stm32f40_41xxx.s 复制到 CORE 目录下面。然后定位到目录
\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Includ , 将 里 面 的 四 个 头文件 :
core_cm4.h、core_cm4_simd.h、core_cmFunc.h 以及 core_cmInstr.h 同样复制到 CORE 目录下面

6、接下来我们要复制工程模板需要的一些其他头文件和源文件到我们工程。首先定位到目录:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 将里面
的 2 个头文件 stm32f4xx.h 和 system_stm32f4xx.h 复制到 USER 目录之下。然后
进入目录\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates ,
将 目 录 下 面 的 5 个 文 件 main.c , stm32f4xx_conf.h , stm32f4xx_it.c , stm32f4xx_it.h ,
system_stm32f4xx.c 复制到 USER 目录下面。

7、前面步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将
这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items

8、 Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Group1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK

9、右键点击点击Tempate,选择 Manage Project Items.然后选择需要添加文件的 Group,这里第一步我们选择 FWLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录\FWLIB\src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.可以看到 Files 列表下面包含我们添加的文件(对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。例如我只用 GPIO,我可以只用添加 stm32f4xx_gpio.c 而其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,)

stm32f4xx_fmc.c 比较特殊。这个文件是 STM32F42 和 STM32F43 系列才用到,
所以我们这里要把它删掉(注意是 stm32f4xx_fmc.c 要删掉,不要删掉 stm32f4xx_fsmc.c)。

10、用同样的方法, CORE 下面需要添加的文件为 startup_stm32f40_41xxx.s(注意,默认添加的时候文件类型为.c,也就是添加 startup_stm32f40_41xxx.s 启动文件的时候,你需要选择文件类型为 All files才能看得到这个文件 )


11、USER 目录下面需要添加的文件为 main.c,stm32f4xx_it.c,system_stm32f4xx.c。 这样我们需要添加的文件已经添加到我们的工程中去了,最后点击 OK,回到工程主界面

点击add界面不会退出,自己添加成功后点击close关闭,主界面如下

12、在 MDK 里面设置头文件存放路径。也就是告诉 MDK 到那些目录下面去寻找包含了的头文件。这一步骤非常重要。如果没有设置头文件路径,那么工程会出现报错头文件路径找不到。

我们需要添加的头文件路径包括:\CORE, \USER\以及\FWLIB\inc。这里大家务必要仔细,
固件库存放的头文件子目录是\FWLIB\inc,不是 FWLIB\src。因为Inc中是头文件,src中是源文件

13、还需要添加一个全局宏定义标识符。添加方法是点击魔术棒之后,进入 C/C++选项卡,然后在 Define 输入框连输入:STM32F40_41xxx,USE_STDPERIPH_DRIVER。注意这里是两个标识符 STM32F40_41xxx和 USE_STDPERIPH_DRIVER,他们之间是用逗号隔开的

14、接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。方法是点击魔术棒 ,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。同时将下方的三个选项框都勾上

Create HEX File 选项选上是要求编译之后生成 HEX 文件。
Browse Information 选项选上是方便我们查看工程中的一些函数变量定义。选择OBJ是因为生成的文件统一放在这个文件夹下,不然会放在系统默认文件夹下。
15、编写代码,把 main.c 文件里面的内容替换为如下内容:

#include "stm32f4xx.h"void Delay(__IO uint32_t nCount);void Delay(__IO uint32_t nCount)
{while(nCount--){}
}int main(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOF, &GPIO_InitStructure);while(1){GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);Delay(0x7FFFFF);GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);Delay(0x7FFFFF);}
}

与此同时,我们要将 USER 分组下面的 stm32f4xx_it.c 文件内容清空。或者删掉其中的 32 行对
main.h 头文件的引入以及 144 行 SysTick_Handler 函数内容


16、点击编译按钮编译工程无错误和警告
17、到这里,一个基于固件库的工程模板就建立完成,同时在工程的 OBJ 目录下面生成了
对应的 hex 文件。打开flymcu软件定位到对应的hex文件进行串口烧录,烧录进开发板后两个LED灯闪烁。

18、每个实验都有一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay,存放的是我们每个实验都要使用到的共用代码。用我们之前讲解的办法,在工程中新建一个组,命名为SYSTEM,然后加入这三个文件夹下面的.c 文件分别为 sys.c,delay.c,usart.c

再编译一遍,如果没有报错说明添加成功
19、最后,系统时钟的配置,修改为符合我们硬件的值修改 System_stm32f4xx.c 文件,把 PLL 第一级分频系数 M 修改为 8,这样达到主时钟频率为 168MHz

同时,我们要在 stm32f4xx.h(在system_stm32f4xx.c中,注意关闭keil再重新打开才能看到) 里面修改外部时钟 HSE_VALUE 值为 8MHz,因为我们的外部高速时钟用的晶振为 8M

二、基于寄存器

1、新建一个test文件夹,在test文件夹中新建USER文件夹

2、打开 MDK(以下将 MDK5 简称为 MDK)软件。然后点击 Project→New uVision Project,将工程名设为test,保存在这个 USER 文件夹里面

3、开发板所使用的 STM32 型号为 STM32F407ZGT6,所以在这里我们选择STMicroelectronics→STM32F4 Series→STM32F407→STM32F407ZGT6(如果使用的是其他系列的芯片,选择相应的型号就可以了

点击OK,之后弹出的界面点击cancel
4、添加启动代码,直接使 startup_stm32f40_41xxx.s 这个启动文件即可。不过这个启动文件做了一点修改,到寄存器版本文件夹下的其中一个实验(如跑马灯实验)中的USER下找到启动文件复制到刚刚新建的的test下的USER文件夹下


我们在汇编代码里面使能了 FPU,所以在 MDK 里面,我们也要设置使用 FPU,否则可能代码会无法运行,设置方法如下:点击魔术棒,选择 Options for Target ‘Target1’,打开 Target 选项卡,在 Code Generation 里面,选择 Use single precision

5、启动文件添加到工程,我们找到 Target1→Source Group1→双击→设置打开文件类型为 Asm Source file→选择 startup_stm32f40_41xxx.s→点击 Add

6、MDK5.14 默认将文件生成在了 Listings 和 Objects 文件夹里面,所以我们在TEST 目录下新建一个新的 OBJ 文件夹来存放这些中间文件

点击OK,这时定位到了OBJ文件夹下
7、copy系统代码,还是进入寄存器的system文件夹下复制到test文件夹下

8、将system添加到工程,在 Target 目录树上点击右键→Manage Project Items,然后点击 Add Files 按钮,把 SYSTEM 文件夹三个子文件夹里面的:sys.c、usart.c、delay.c 加入到 SYSTEM 组中。

9、与上一步骤同样方式新建USER文件夹,新建一个 test.c 文件,并保存在 USER 文件夹下。然后双击 USER 组,会弹出加载文件的对话框,此时我们在 USER 目录下选择 test.c 文件,加入到 USER 组下。


10、编写代码,在 test.c 文件里面输入如下代码:

#include "sys.h"
#include "usart.h"
#include "delay.h"
//ALIENTEK 探索者STM32F407开发板 实验0
//新建工程实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司int main(void)
{ u8 t=0;Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhzdelay_init(168);     //初始化延时函数uart_init(84,115200);  //串口初始化为115200while(1){printf("t:%d\r\n",t);delay_ms(500);t++;}
}

此时编译会报错,显示找不到头文件

然后在 Include Paths 处(4 处),点击 5 处的按钮。在弹出的对话框中加入 SYSTEM 文件
夹下的 3 个文件夹名字,把这几个路径都加进去

先用flyMCU软件通过串口烧录进开发板,打开串口助手可看到数字增加,程序执行正确

至此,stm32基于库函数和寄存器新建工程模板完成,所有资料均来自正点原子stm32f407探索者开发板

正点原子stm32F407学习笔记1——新建工程模板相关推荐

  1. 正点原子stm32F407学习笔记2——GPIO操作跑马灯实验

    一.库函数版本 1.硬件原理图 2.软件设计 打开上一节新建的库函数版本工程模板,直接点击工程下面的 USER 目录下面的 Template.uvproj. 跑马灯实验我们主要用到的固件库文件是: s ...

  2. 正点原子stm32F407学习笔记4——按键输入实验

    一.硬件连接 KEY0.KEY1 和 KEY2 是低电平有效的,而 KEY_UP 是高电平有效,并且外部都没有上下拉电阻,所以,需要在 STM32F4 内部设置上下拉. 二.软件设计 参考蜂鸣器一节新 ...

  3. 正点原子stm32F407学习笔记3——蜂鸣器实验

    一.硬件设计 蜂鸣器为有源蜂鸣器,当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声,硬件原理图如下 二.软件设计 1.新建beep.c文件 打开keil软件 ...

  4. 正点原子STM32F103ZET6学习笔记-新建库函数工程模板

    STM32F10x系列官方固件包免费下载链接 新建STM32工程 步骤一:创建工程文件 1,新建工程目录temp 2,在工程目录temp下面新建四个文件夹 (1)USER:存放工程文件(templat ...

  5. STM32F4(正点原子)学习笔记(一):GPIO及其小实验

    目录 一.写在前面: 二.GPIO基本情况 1.概述 2.引脚说明 3.GPIO工作方式 (1)4种输入模式 (2)4种输出模式 (3)4种最大输出速度 (4)主要特性 4.GPIO相关配置寄存器 三 ...

  6. 正点原子STM32F103学习笔记(六)——时钟系统

    时钟系统 RCC: reset clock control 复位和时钟控制器. 注意: 任何一个外设在使用之前,必须首先使能其相应的时钟 时钟系统框图 图形含义 梯形灰色方块:选择器 蓝色框:时钟源 ...

  7. stm32f407 6路串口dma如何配置_stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)...

    本程序编写基于正点原子STM32F407开发板. 本文使用的扫码模块是下面这个品牌. 扫码模块的应用场景非常广泛,我们可以上百度搜索一下: 等等. 今天就来说说如何在开发板上实现控制它吧,打开数据手册 ...

  8. STM32F407学习笔记——MG90S舵机模块(基本控制)

    STM32F407学习笔记--MG90S舵机模块(基本控制) 一.基本原理: 通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms). 旋转 ...

  9. STM32学习笔记——MDK新建项目

    STM32学习笔记 KIEL新建项目过程 文章目录 STM32学习笔记 前言 一.keil新建库函数版本项目 二.注意事项 1.文件分类 2.MDK配置 总结 前言 此处使用寄存器版,进行学习.后期看 ...

最新文章

  1. Ubuntu12下挂载硬盘(9TB)
  2. python有道翻译-Python版有道翻译
  3. Ubuntu 16.04使用root 帐号开启 SSH 登录
  4. WebPart(汇总)[转载]
  5. VTK:网格质量用法实战
  6. 聊一聊Jmeter的参数化
  7. C++ 使用move来删除用户指定的文件
  8. JAVA进阶教学之(Object类中的equals方法)
  9. python定时任务是异步的吗_定时任务、异步任务
  10. HbuliderX + vue项目(初始化创建) - 准备篇
  11. 【Python】random库
  12. 删除mysql临时文件_mysql自动备份数据库与自动删除临时文件
  13. myeclipse java设置_【使用指南】MyEclipse部署配置(多图)
  14. Julia : Formatting库的 fmt Base.@sprintf
  15. 多模态机器翻译 | (1) 简介
  16. 使用MySQL进行地理坐标计算
  17. jquery html() 获取自己
  18. 文件比较命令(comp)
  19. solidwork 侵权 证据_企业常见版权侵权问题咨询总结
  20. LockSupport 是什么?怎么用?

热门文章

  1. C++ - 多态(2) | 虚表的打印、单继承与多继承的虚表
  2. Java进阶之深入理解对象与垃圾回收机制常见面试题
  3. 大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<2>
  4. CSS鼠标悬浮某元素上变色
  5. python中loc和iloc
  6. 在caffe 中添加Crowd counting 数据层
  7. .NET应用程序安全操作概述
  8. doxygen简单介绍
  9. OpenCV~图像处理API(逆光、模糊、亮度、雾霾)
  10. vue一些比较重要知识点的复习