打印
[STM32F4]

STM32F407 建立工程并点亮LED灯

[复制链接]
192|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keil 5 下建立stm32f4工程
1.建立工程文件夹目录
在电脑某盘中创建一个文件夹,里面包含如下所示的文件目录:

其中各个代表的意思为
FWLIB: 存放F4官方标准外设库文件(包括.c文件和.h头文件)
CORE: 存放F4内核相关的文件
DOC: 存放说明性问档文件(.txt文件)
SYSTEM: 存放F4系统文件(sys delay 和 usart)
HARDWARE: 存放自己写的.c和.h文件
OBJ: 存放生成的一些列文件(.hex)
USER: 存放main函数文件以及一些相关的官方文件


使用特权

评论回复
沙发
xiyaoko2365|  楼主 | 2023-6-29 00:20 | 只看该作者
2.从官方固件库中导入文件到工程目录中
直接去官网下载STM32F4的固件库,放置电脑某个位置。这里直接在正点原子官网下载的:stm32f4_dsp_stdperiph_lib.zip 解压之后有一个 STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 的文件夹。
然后从该文件夹中搬运文件到自己建立的工程目录下去
①.搬运外设文件到FWLIB中
进入路径:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver 里面有inc 和 src的文件夹 分别存放.h和.c文件的外设库,直接将两个文件夹子复制粘贴到自己的工程目录FWLIB下
②.搬运内核文件到CORE中
进入路径:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Include
里面有一些.h文件 直接可以全选复制粘贴到自己的工程目录CORE下,
进入路径:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm

使用特权

评论回复
板凳
xiyaoko2365|  楼主 | 2023-6-29 00:20 | 只看该作者
如图所示,里面有.s启动文件,选择第一个复制粘贴到工程目录CORE下

使用特权

评论回复
地板
xiyaoko2365|  楼主 | 2023-6-29 00:21 | 只看该作者
③.搬运main函数文件以及相关文件到USER中
进入路径:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates
将main.c main.h stm32f4xx_conf.h stm32f4xx_it.c stm32f4xx_it.h system_stm32f4xx.c文件全部复制粘贴到USER中
进入路径:
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include
将里面的两个文件 system_stm32f4xx.h stm32f4
xx.h 复制粘贴到USER目录中
至此文件全部添加完毕!

使用特权

评论回复
5
xiyaoko2365|  楼主 | 2023-6-29 00:21 | 只看该作者
3.打开keil5创建F4工程
点击任务栏 Project -> new uVision Project 然后系统会弹出提示框框,直接选择在刚刚建立的USER目录下建立工程 文件名自己取。
之后选择芯片包如图所示:(用的是ZET6最小系统板)

使用特权

评论回复
6
xiyaoko2365|  楼主 | 2023-6-29 00:21 | 只看该作者
弄好直接一路ok,接下来就是将文件添加到keil工程项目中去

使用特权

评论回复
7
xiyaoko2365|  楼主 | 2023-6-29 00:23 | 只看该作者
完成后右边的Files框 选择Add Files,会自动跳往工程目录下,对应文件按如下选择
USER

使用特权

评论回复
8
xiyaoko2365|  楼主 | 2023-6-29 00:23 | 只看该作者
CORE

使用特权

评论回复
9
xiyaoko2365|  楼主 | 2023-6-29 00:25 | 只看该作者
FWLIB
.c外设库文件较多,add file时候直接全选然后添加(将fmc.c这个文外设文件删除,否则会报错),或者可以选择把用到的添加进去

使用特权

评论回复
10
xiyaoko2365|  楼主 | 2023-6-29 00:26 | 只看该作者
然后就是包含文件路径以及宏定义,

使用特权

评论回复
11
xiyaoko2365|  楼主 | 2023-6-29 00:26 | 只看该作者
添加.h文件的路径,不添加的话编译时候会报错
这里添加的路径都是.h文件所在目录

使用特权

评论回复
12
xiyaoko2365|  楼主 | 2023-6-29 00:27 | 只看该作者
打开f4xx.h文件,找到定义 STM32F40_41xxx,(启动文件用的这个)这里面定义了一些外设的通道,将其复制到魔术棒的Define中

使用特权

评论回复
13
xiyaoko2365|  楼主 | 2023-6-29 00:27 | 只看该作者
完成上述步骤后直接双击下载按钮,然后看生成窗口,出现如图所示的现象代表配置成功!

使用特权

评论回复
14
xiyaoko2365|  楼主 | 2023-6-29 00:27 | 只看该作者
建立工程总结
1.配置32库的过程可能有点麻烦,尤其是在官方固件库转移文件的时候,但是配置过程也是了解32项目构造的过程,尤其是几个内核外设文件库的配置,能够帮助理解32工程项目的构造以及后续头文件、函数的调用。
2.无论是F1还是F4的配置思路都是大同小异的,只需要改指定的外设库和内核即可

使用特权

评论回复
15
xiyaoko2365|  楼主 | 2023-6-29 00:28 | 只看该作者
点亮LED
添加系统文件
系统文件包括delay sys usart,直接用原子哥的导入即可
按照上述相同的方法在keil工程中建立SYSTEM的目录用来保存三个系统文件

使用特权

评论回复
16
xiyaoko2365|  楼主 | 2023-6-29 00:29 | 只看该作者
创建LED文件目录,并编写LED文件
Windows下进入工程文件目录,打开HARDWARE目录,新建LED文件目录,之后在LED目录下新建led.c和led.h文件
进入Keil5,在工程中的HARDWARE目录下导入led.c文件(led.h文件在下载的时候自动导入进去)

led.c
初始化GPIO结构体,配置成输出模式 推挽输出 定义GPIO输出引脚 输出速度配置

使用特权

评论回复
17
xiyaoko2365|  楼主 | 2023-6-29 00:30 | 只看该作者
#include "led.h"

void LED_Init(void)
{
//初始化PE9 (开发板上与LED灯相连)
        GPIO_InitTypeDef GPIO_InitStruct;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
        GPIO_InitStruct.GPIO_Mode =        GPIO_Mode_OUT;
        GPIO_InitStruct.GPIO_OType =        GPIO_OType_PP;  
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStruct.GPIO_Speed = GPIO_Medium_Speed;
    GPIO_Init(GPIOF,&GPIO_InitStruct);
}

使用特权

评论回复
18
xiyaoko2365|  楼主 | 2023-6-29 00:30 | 只看该作者
led.h
#ifndef _LED_H_
#define _LED_H_
//系统头文件
#include "sys.h"

#define LED0 PFout(9)        //定义宏 直接可以用LED0来表示PE9端口电平
       
void LED_Init(void);        //初始化函数
#endif

使用特权

评论回复
19
xiyaoko2365|  楼主 | 2023-6-29 00:30 | 只看该作者
魔术棒配置参数

使用特权

评论回复
20
xiyaoko2365|  楼主 | 2023-6-29 00:31 | 只看该作者
main
#include "stm32f4xx.h"
#include "delay.h"
#include "led.h"

int main(void)
{

把头文件全部添加路径后,直接下载程序,并将代码烧录到板子中去即可实现LED灯的循环亮灭!

总结
LED灯的亮灭一般就是来检测程序编写是否有问题或者作为一个判断标志使用,在工程项目中,可以留着LED的目录作为检测代码是否正确使用!
  delay_init(168);
  LED_Init();       
  while(1)       
        {
                LED0 = 0;
                delay_ms(1000);
                LED0 = 1;
                delay_ms(1000);
        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

376

帖子

0

粉丝