当前位置: 首页 > article >正文

2 新建工程步骤

2 新建工程步骤

0.建立工程文件夹

选择一个程序储存文件,新建一个2-1 STM32工程模板文件夹,在2-1 STM32工程模板文件夹新建一个Start,User,Library文件夹

1.Keil中新建工程,选择型号

打开keil5,project->new project->选择文件夹(2-1 STM32工程模板)->给工程取个名称(Project),点击保存,选择型号:STM32F103C8,点击ok

2.工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹

1)添加STM32的启动文件

打开固件库,…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm,将这些文件复制下来,将复制下来的文件粘贴进2-1 STM32工程模板文件夹下的Start文件夹;

2)添加STM32的头文件和配置时钟文件

//STM32的外设寄存器描述文件,用来描述STM32有哪些寄存器和它对应的地址的
stm32f10x.h 		 

//用来配置时钟的,STM32主频72MHz,就是system文件里的函数配置的
system_stm32f10x.c	 
system_stm32f10x.h

将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的三个.c,.h文件也复制到Start文件夹下;

3)添加STM32的内核寄存器的描述文件

core_cm3.c
core_cm3.h

将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的文件也复制到Start文件夹下。

4)添加文件到工程

打开keil5,在Project树下,修改Source Group 1为Start,然后右键,选择Add Existing Files to Group ‘Start’,打开Start文件夹,将startup_stm32f10x_md.s启动文件添加进来,然后再将.c和.h文件都添加进来。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nsBLLF2V-1680425617769)(32单片机.assets/image-20230402112701487.png)]

5)在工程选项中添加头文件路径

在keil5软件下,点击魔术棒按钮,在C/C++里,在Include Paths栏,然后点击右边三个点的按钮,点击新建,选中Start文件夹,将其路径添加进来,点击ok(一定要记得添加进来,不然后面运行程序可能会报错);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mspDbZzU-1680425617777)(32单片机.assets/1.png)]

6)在工程选项中添加main函数

将main函数就存放在在2-1 STM32工程模板文件夹下的User文件夹里面;然后在keil5软件下,在target 1下右键,点击Add Group,将组的名字改为User,然后在User右键,点击添加Add new …,选择C文件,名字叫main,路径选择User文件夹,点击Add。

在main.c文件下编辑:(文件最后一行必须要空行,要不然会报警告)

#include "stm32f10x.h"                  // Device header

int main(void)
{
	while (1)
	{
	
	}
}

然后点击编译看看会不会报错,理论上不会出错。.

7)调试

拿出STM32最小系统板用杜邦线与STLINK连接好,将usb口插上,发现stm32板上,一个灯频闪,一个灯常亮;

然后配置一下调试器,点击魔术棒按钮,选择debug,将调试器选择为ST-Link Debugger,点击setting,在Flash Download的这一项下,把Reset and Run 这一项勾上(勾上这一项,我们下载程序后会立马复位执行);

8)点灯(寄存器)

main:

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC->APB2ENR = 0X00000010; 
	GPIOC->CRH = 0X00300000;
	GPIOC->ODR = 0X00002000;   //常灭(低电平点亮,把2换成0就点亮)
	while (1)
	{
	
	}
}

9)添加库文件

将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src的文件全选,粘贴在Library文件夹下;

将…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc的文件全选,粘贴在Library文件夹下;

回到软件,在target 1下右键,点击Add Group,将组的名字改为Library,然后在Library右键,选择Add Existing Files to Group ‘Library’,打开Library文件夹,将全部文件都添加进来;

打开…\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template,将下面三个文件复制下来,粘贴到工程的User目录下,然后回到软件,将添加进来的三个文件Add进来;

//用来配置库函数头文件的包涵关系的
stm32f10x_conf.h 

//用来存放中断函数的
stm32f10x_it.c
stm32f10x_it.h

3.工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹

打开魔术棒,在C/C++选项下的Define栏目粘贴USE_STDPERIPH_DRIVER;

然后在C/C++里,在Include Paths栏将User和Library也添加进来;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KF1ggL4h-1680425617778)(32单片机.assets/image-20230402153647630.png)]

然后编译运行,0错误,0警告

总结:

建立工程文件夹,Keil中新建工程,选择型号
工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

2.3 验证环节:点灯(库函数)

#include "stm32f10x.h"                  // Device header

int main(void)
{
	//step1:使能时钟(第一个参数,使用外设时钟;第二个参数,选择外设状态)
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	//定义一个结构体(GPIO模式,端口,速度)
	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;
	//step2:配置端口模式(第一个参数,选择哪个GPIO;第二个参数,参数的结构体)
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	//step3:设置高低电平进行点灯
	GPIO_SetBits(GPIOC, GPIO_Pin_13); 		 //高电平
//	GPIO_ResetBits(GPIOC, GPIO_Pin_13);		 //低电平(点亮)
	while (1)
	{
	
	}
}

点灯完毕~


http://www.kler.cn/a/7431.html

相关文章:

  • 低代码平台:跨数据库处理的重要性与实现方式
  • 【Pikachu】XML外部实体注入实战
  • 2024-11-16 串的存储结构
  • paddle表格识别数据制作
  • 【操作系统不挂科】<Linux进程概念(4)>选择题(带答案与解析)
  • SAFETY LAYERS IN ALIGNED LARGE LANGUAGEMODELS: THE KEY TO LLM SECURITY
  • 045:cesium加载OpenStreetMap地图
  • 第十四届蓝桥杯模拟赛(第一期)——C语言版
  • 详解如何使用Nginx搭建文件服务器及实现文件服务
  • 询问ChatGPT的高质量答案艺术——提示工程指南(更新中……)
  • 什么是服务架构?微服务架构的优势又是什么?
  • 聚会Party
  • 剪枝与重参第四课:NVIDIA的2:4剪枝方案
  • 做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
  • 4.5--计算机网络之基础篇--1.模型分层--(复习+深入)---好好沉淀,加油呀
  • Elasticsearch:索引状态是红色还是黄色?为什么?
  • C++ 数组与字符串详解
  • 51单片机-LED篇
  • erpnext--指令
  • 多个硬盘挂载到同一个目录
  • 重新理解一个类中的forward()和__init__()函数
  • MyBatisPlus-DML编程控制
  • Muduo库源码剖析(八)——TcpServer类
  • 腾讯云轻量应用服务器价格表(2023版)
  • 前端学习:HTML基本标签
  • cgroups是linux内核中限制、记录、隔离进程组(process groups)所使用的物理资源的机制