手把手教学一文在Keil5创建工程模版(以STM32F103C8T6点灯为例)
目录
方法一(少量文件添加推荐):直接在左侧"Project"添加
一、创建工程文件夹
? ? ? ? 在任意盘下先新建一个文件夹,可命名格式为项目名+版本号+主题内容,如下图我命名为"ProjectTemplate_v1_0_0_工程模版"。接着在里面再新建两个文件夹"Drivers"与"MDK","Drivers"用于存放程序文件,"MDK"用于存放MDK的工程文件。把程序文件与工程文件分开,是因为考虑到后续可能使用不同的IDE,如"VScode"、"IAR"等,有利于项目文件的整理;
二、在Keil5中新建工程
? ? ? ? 打开Keil5,在上方找到"Project",然后点击"New μVision Project..."
? ? ? ? 找到刚刚创建好的文件夹"MDK",然后填写工程名字,接着点击"保存";
? ? ? ? 选择芯片,在"STMicroelectronics"类别中找到并点击选择"STM32F103C8",然后点击"OK"。如果没有目标芯片,那就是没有下载对应固件支持包,先移步到手把手教学一文安装Keil5(MDK)固件支持包先按步骤下载对应固件支持包。
? ? ? ? 直接右上角退出软件包导入界面,我们选择从外部导入的方式(外部导入方式有利于移植与工程转移);
? ? ? ? 左侧"Project"出现下图内容即创建工程成功;
三、如何新建文件
- ①点击新建文件;
- ②新建成功;
- ③点击保存;
? ? ? ? 找到刚刚新建的文件夹"Drivers",我在里面又新建了一个"User"用来存放这个新命名为"main.c"的文件,然后点击"保存";
四、添加文件夹与文件到工程里
方法一(少量文件添加推荐):直接在左侧"Project"添加
????????编辑文件夹名,直接单击文件夹;
????????添加文件,?双击文件夹,选择文件添加;
????????查看是否添加成功,然后直接退出即可;
????????新建文件夹,右键点击目标工程1,然后点击"Add Group...";
方法二(批量文件添加推荐):在上侧找到像"品"字的图标
????????单击"品"字;
- ? ?
- ①新建文件夹;
- ②单击选中,双击重命名文件夹;
- ③在对应选中的"Group"里添加文件;
- ④删除选中的文件/文件夹;
- ⑤文件/文件夹 上下移动,用于整理位置;
- ⑥添加完毕;
五、导入STM32F10x固件库文件
方法一:在我的资源里直接白嫖
方法二:手动收集
? ? ? ? 在"Drivers"文件夹先新建文件夹"CMSIS",然后在里面再新建两个文件夹"CORE"与"STM32F10x_Driver",用于存放固件库文件;
? ? ? ? 在Keil5的安装文件夹里跟着如下图的路径①,找到②里的文件夹,这些文件夹里的文件就是固件库文件(如果没有找到"STM32F1xx_DFP"这个文件夹则需要先安装固件支持包,可以按着我的"手把手教学一文安装Keil5(MDK)固件支持包"教程进行下载安装);
? ? ? ? 打开"Include",复制如下图的文件到刚刚在工程文件夹里新建的"CORE"文件夹里;
????????打开"Source",复制如下图的文件到刚刚在工程文件夹里新建的"CORE"文件夹里;
????????? 打开"ARM",复制如下图的文件到刚刚在工程文件夹里新建的"CORE"文件夹里(下一步有解析为什么选择这个启动文件);
? ? ? ? ?由于本文以STM32F103C8T6为例,STM32F103C8的Flash大小为64K,所以启动文件选择了"startup_stm32f10x_hd.s";
? ? ? ? ?返回打开"StdPeriph_Driver/templates",先复制如下图的文件到刚刚在工程文件夹里新建的"CORE"文件夹里;
? ? ? ? 根据下图的路径找到"core_cm3.h"、"cmsis_armcc.h"、"cmsis_compiler.h"、"cmsis_version.h",复制刚刚在工程文件夹里新建的"CORE"文件夹里;
? ? ? ? 小插曲:以前所需要ARM内核的文件仅需要"core_cm3.c"、"core_cm3.h"这两个文件,但是在新版本的Keil5文件夹里找不到"core_cm3.c"文件,然后我就不管了,取了"core_cm3.h"直接编译了一波,根据编译提示错误:缺失了一些文件,结果在"core_cm3.h"所在的文件夹里一一对应都找到了,然后进行添加再次编译后就0Error,0Warning,芜湖。
????????接着在网上搜了一下为什么,搜到的有效信息少之又少,总结了大家的意思大概就是:ARM公司把CMSIS升级到2.0版本时对软件架构进行了调整,去掉了原本的"core_cm3.c",转而新增了其他文件进行替代,有的人说是"core_cmFunc.h"、"core_cmInstr.h"。可能是我所用的版本不一样,我需要新增的是"cmsis_armcc.h"、"cmsis_compiler.h"、"cmsis_version.h"。其实万变不离其中,大家可以在下图的路径,先在"ARM"里找到"core_cm3.h",取过来编译一下看看缺失什么文件,一个一个进行添加即可;
? ? ? ? ?回到"StdPeriph_Driver"把"inc"与"src"搬运到工程文件夹里的"STM32F10x_Driver"里即可;
六、把刚刚收集的固件库文件分类添加到工程里
七、MDK工程配置
? ? ? ? "Output"界面,勾选"Create HEX File"生成HEX文件;
????????"C/C++"界面,在"Define"里添加(USE_STDPERIPH_DRIVER)
? ? ? ? 添加头文件源;
? ? ? ? ?"Debug"界面
- ①脱离硬件,进行软件仿真时选择;
- ②需要勾选,在软件仿真时可以显示真实时间;
- ③STM32F103C8如图进行配置;
- ④连接硬件在线仿真时选择;
- ⑤连接硬件在线仿真时选择的工具;
? ? ? ? ?如下图进入"Settings";
八、修改stm32f10x_conf.h文件
? ? ? ? 解除文件只读属性,可以看到文件图标有个锁;
? ? ? ? 在文件夹里找到它,右键->属性;
? ? ? ? 取消"只读",然后点击应用;
? ? ? ? 再次看回Keil5里,文件图标的锁不见了就说明解锁成功了;
? ? ? ? 接下来如下图看到stm32f10x_conf.h文件里大概第27行附近有一行"#include "RTE_Components.h""(由于版本可能不一致,但行数应该是在这附近的),把它删除掉。它其实是有着一些RTE_DEVICE_xxxxxx宏的头文件,我的做法是全部删掉,包括下面的第27~100行内出现的RTE_DEVICE_xxxxxx宏全部删掉。当然你也可以自己新建一个"RTE_Components.h"文件添加进来工程,自己在里面填写所有宏;
? ? ? ? 把第27~100行内出现的RTE_DEVICE_xxxxxx宏全部删掉(只删除宏!对头文件声明请手下留情),修改为如下图所示:
九、编写main.c
? ? ? ? 如下图格式编写main函数;
#include "stm32f10x.h"
int main(void)
{
while(1)
{
}
}
? ? ? ? 编译工程(如有错误与警告请到评论区进行评论,我会第一时间回复);
十、点灯实验
#include "stm32f10x.h"
#define LED_GPIO GPIOB /**< LED引脚端口号 */
#define LED_PIN GPIO_Pin_7 /**< LED引脚编号 */
/*LED引脚配置*/
void LED_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*打开时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/*配置GPIO*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 模式-推挽输出 */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_Init(LED_GPIO, &GPIO_InitStructure);
/*初始化电平*/
GPIO_SetBits(LED_GPIO, LED_PIN); /* 默认输出高电平关闭LED */
}
/*设置LED开关*/
void Set_LEDState(unsigned char state)
{
GPIO_WriteBit(LED_GPIO, LED_PIN, (BitAction)state);
}
int main(void)
{
LED_GPIO_Init(); /* LED引脚配置 */
Set_LEDState(0); /* 输出低电平点亮LED */
while(1)
{
}
}
?????????分享先到这里,希望能给大家带来启发与帮助。如果对内容存在疑问或想法,欢迎在评论区留言,我会积极回复大家的问题。在我的“Keil5_MDK”专栏中,还有一些关于Keil的教程,欢迎一起探讨、一起学习。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!