文章目录
- 1、安装mdk525.exe;
- 2、下载离线的 `.pack` 器件支持包
- 3、双击 安装 `.pack` 器件支持包
- 4、新建【TEST】工程 文件夹
- 5、新建 MDK 5工程;
- 6、选择对应的开发器件;
- 7、MDK会弹出【Manage Run-Time Environment 】对话框,单击【Cancel】;
- 8、复制【CORE】需要的文件;
- 9、获取 固件库 外设驱动
- 10、复制【USER】需要的文件;
- 11、开发板例程的【SYSTEM】的3个文件夹:delay,sys,usart
- 12、修改Project下的【Target 1】为【TEST】,【TEST】下新建目录;
- 13、新建 main.c 文件,保存到【USER】目录;
- 14、新建 led.c 和 led.h 文件
- 15、如图所示添加文件到【TEST】工程目录;
- 16、单击魔术棒,增加 宏定义
- 17、把工程中引用到的 所有头文件 的路径 都包含到进来:
- 18、更改【目标文件】输出目录为【OBJ】;
- 19、单击【F7】编译通过;
- 20、勾选【Reset and Run】
- 21、单击【F8】下载固件
MDK 5.25 下载链接:https://pan.baidu.com/s/1-Qwf0Ggtj33SjNUe07kjYg
提取码:7wgf
1、安装mdk525.exe;
2、下载离线的 .pack
器件支持包
下载离线的.pack
器件支持包,单击右侧按钮下载;
3、双击 安装 .pack
器件支持包
下载后双击文件,按照默认路径安装(当前keil 5安装路径);
4、新建【TEST】工程 文件夹
新建【TEST】工程文件夹,再新建【子文件夹】;
序号 | 目录 | 作用 |
---|---|---|
1 | CORE | 固件库核心core_cm3 、启动文件startup |
2 | HARDWARE | 硬件外设 |
3 | OBJ | 目标文件 |
4 | STM32F10x_FWLib | 固件库文件 |
5 | SYSTEM | 系统 |
6 | USER | 工程文件 |
5、新建 MDK 5工程;
打开MDK 5,单击【Project】—>【New Uvision Project】,【保存】到预先建立的【TEST】工程文件夹的子文件夹【USER】。
6、选择对应的开发器件;
7、MDK会弹出【Manage Run-Time Environment 】对话框,单击【Cancel】;
8、复制【CORE】需要的文件;
打开官方固件库包【STM32F10x_StdPeriph_Lib_V3.5.0】
(1)把Libraries\CMSIS\CM3\CoreSupport下的core_cm3.c
和core_cm3.h
复制到【CORE】。
(2)DeviceSupport下的startup_stm32f10x_hd.s
启动文件,复制到【CORE】。
如图所示:
9、获取 固件库 外设驱动
把【STM32F10x_StdPeriph_Driver】下的【inc】和【src】文件夹复制到【STM32F10x_FWLib】,如图所示:
10、复制【USER】需要的文件;
(1)把【STM32F10x_StdPeriph_Lib_V3.5.0\Project】的【STM32F10x_StdPeriph_Template】下的stm32f10x_conf.h
,stm32f10x_it.c
,stm32f10x_it.h
,system_stm32f10x.c
,system_stm32f10x.h
复制到【USER】目录;
(2)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下的stm32f10x.h
,复制到【USER】
序号 | 文件 | 功能 |
---|---|---|
1 | system_stm32f10x.c system_stm32f10x.h | 设置 系统时钟 以及 总线时钟 |
2 | stm32f10x.h | 主要是系统寄存器定义申明以及包装内存操作 (相当重要,只要你做 STM32 开发,你几乎时刻都要查看这个文件相关的定义) |
3 | stm32f10x_conf.h | 启用/禁用 外设头文件的包含 |
4 | stm32f10x_it.c stm32f10x_it.h | 用来编写 中断服务函数 (其实 中断服务函数 也可以随意编写在工程里面的任意一个文件里面) |
11、开发板例程的【SYSTEM】的3个文件夹:delay,sys,usart
开发板例程的 SYSTEM 的3个文件夹 delay、sys、usart 复制到 SYSTEM ;
序号 | 目录 | 作用 |
---|---|---|
1 | delay | 实现系统的延时功能 (1) void delay_init(void) (2) void delay_us(u32 nus) (3) void delay_ms(u16 nms) |
2 | sys | sys.c ,sys.h |
3 | usart | usart.c ,usart.h 用于串口的初始化和中断接收 |
12、修改Project下的【Target 1】为【TEST】,【TEST】下新建目录;
13、新建 main.c 文件,保存到【USER】目录;
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init();
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
GPIO_SetBits(GPIOD, GPIO_Pin_2);
delay_ms(300);
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
delay_ms(300);
}
}
14、新建 led.c 和 led.h 文件
新建 led.c 和 led.h 文件,保存到【HARDWARE】—>【LED】目录;
led.c:
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_8);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD, GPIO_Pin_2);
}
led.h:
#ifndef __LED_H
#define __LED_H
#include "sys.h"
void LED_Init(void); //初始化
#endif
15、如图所示添加文件到【TEST】工程目录;
16、单击魔术棒,增加 宏定义
单击魔术棒 ,出来一个对话框,然后单击【C/C++】选项,在【Preprocessor Symbols】的【Define】框填入【STM32F10X_HD,USE_STDPERIPH_DRIVER】;
17、把工程中引用到的 所有头文件 的路径 都包含到进来:
单击【Include Paths】右边的按钮。弹出一个添加 path 的对话框,然后将图头文件所在的目录添加进去。
记住,Keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path 一定要定位到最后一级子目录,完成单击OK。
18、更改【目标文件】输出目录为【OBJ】;
19、单击【F7】编译通过;
20、勾选【Reset and Run】
选择调试工具,然后在【Setting】—>【Flash Download】对话框,勾选【Reset and Run】;
21、单击【F8】下载固件
单击【F8】下载固件,STM32自动运行【LED】程序。
序号 | 项目 | 描述 |
---|---|---|
1 | Code | 执行的代码,程序中所有的函数 |
2 | RO-data | 只读 数据,程序中所定义的全局常量数据 和字符串 |
3 | RW-data | 已初始化的读写数据 ,程序中 定义并且初始化 的全局变量 和静态变量 |
4 | ZI-data | 未初始化的读写数据 ,程序中 定义了但没有初始化 的全局变量 和静态变量 |