STM32使用Keil MDK新建工程详细教程
@TOCSTM32 keil5 MDK新建工程教程
STM32 keil5 MDK新建工程教程
这是根据B站江科大stm32教程,所整理的一篇如何新建一个stm32工程。本教程所需文件包源于B站江协科技
1、确定一级目录
确定一个文件路径,新建文件夹用于以后存放stm32工程。这里我新建了一个project文件夹作为stm32工程的一级目录。
2、打开keil新建工程
在上步中的一级目录下,新建文件夹作为该工程的存放目录,我新建为学习记录,并在该目录下设置工程名
新建好后,点击保存,将会弹出选择芯片
3、选择芯片
我使用的是STM32103C8T6
点击ok,将弹出快速新建工程小助手。直接叉掉
4、添加启动文件
上步完成后,打开工程所在文件夹,文件结构如下(keil新建工程后自动生成的)
新建Start文件夹(启动文件)
将固件\\STM32F10x_StdPeriph_Lib_V3.5.0\\STM32F10x_StdPeriph_Lib_V3.5.0\\Libraries\\CMSIS\\CM3\\DeviceSupport\\ST\\STM32F10x\\startup\\arm
该目录下的所有文件复制粘贴到Start文件夹下。
继续将 固件库\\STM32F10x_StdPeriph_Lib_V3.5.0\\STM32F10x_StdPeriph_Lib_V3.5.0\\Libraries\\CMSIS\\CM3\\DeviceSupport\\ST\\STM32F10x
路径下的三个文件复制粘贴进Start文件夹下。
添加内核寄存器描述文件
将 固件库\\STM32F10x_StdPeriph_Lib_V3.5.0\\STM32F10x_StdPeriph_Lib_V3.5.0\\Libraries\\CMSIS\\CM3\\CoreSupport
文件夹下的文件复制粘贴到Start中
最后Start内文件结构如下
5、载入工程
重命名组
按顺序单击进行重命名,为Start
载入启动文件
选择ALL FILES
按照该表参照自己的开发板的型号,选择启动文件,我这里选择后缀为md.s文件点击add
继续添加Start文件夹中的.c和.h文件,添加完成后点击Close,完成后如下(每个文件图标上都有一个小钥匙,代表只读,不能更改)
6、添加头文件路径
单击魔术棒,选择C/C++,点击Include Path后的三个点,双击空白出现三个点并单击,弹出文件选择弹窗,选择Start,单击选择该文件夹。
点击OK
7、编写主函数
为了让工程目录更为清晰,在该工程文件夹下,新建文件夹User
载入工程
改名为User
添加.c文件(main.c)
8、配置调试器等
用的什么选什么,我用的ST-Link
选中运行前自动重置,否则在每次上传完程序后都需要手动按复位键进行复位
9、寄存器开发执行
就可以在该文件下编写主函数,进行运行。注意到此为止仅可以进行寄存器开发
#include "stm32f10x.h" // Device header
int main(void)
{
RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00002000;
while(1);
}
结果
10、使用库函数进行开发
在工程目录下新建文件夹Library用于存放库函数
打开 固件库\\STM32F10x_StdPeriph_Lib_V3.5.0\\STM32F10x_StdPeriph_Lib_V3.5.0\\Libraries\\STM32F10x_StdPeriph_Driver
该路径
将inc和src文件夹复制粘贴至Library中
11、载入库函数至工程
同User的创建方法一致,新建组Library,将文件目录Library下inc和src中的所有文件添加进Library组
12、添加库函数配置文件和中断函数文件
复制粘贴 固件库\\STM32F10x_StdPeriph_Lib_V3.5.0\\STM32F10x_StdPeriph_Lib_V3.5.0\\Project\\STM32F10x_StdPeriph_Template
路径下的如图所示的三个文件至工程的User目录下
将该三个文件载入到工程中去
13、添加宏定义
此处有条件编译
需要对USE_STDPERIPH_DRIVER进行宏定义
14、设置头文件路径
将Library/inc路径与User路径设置到包含目录中去
15、尝试编译
编译成功,表示我们新建工程成功!!!!
16、使用库函数点亮小灯
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
while(1);
}
作者:羽码