STM32基础教程–创建一个STM32工程(基于STM32F103C8T6)
目录
前言
技术实现
1. 安装器件包
2.工程创建
3.软件破解
4.配置必要文件
编辑5.文件添加
6.路径添加
7.添加 USE_STDPERIPH_DRIVER定义
8.选择下载器并设置
9.程序下载
10.代码规范
代码验证
实验现象
问题与解决
前言
STM32是由意法半导体(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列。该系列微控制器具有高性能、低功耗、低成本等特点,集成了丰富的外设接口,如通用输入输出端口(GPIO)、串行通信接口(USART、SPI、I2C)、模数转换器(ADC)等。STM32广泛应用于工业控制、消费电子、汽车电子、医疗设备、智能家居等嵌入式系统领域。意法半导体为STM32提供了完善的开发工具和软件生态系统,包括STM32CubeMX、STM32CubeIDE等,简化了开发流程,提高了开发效率。
技术实现
1. 安装器件包
1.在创建工程之前我们要安装STM32芯片的器件包,打开keil5 MDK, 点击这个图标(如图所示)
2.等待列表更新完毕后, 在左侧会出现一系列STM32芯片的制造厂商。
3.找到名为 STMicroelectronics的厂商即意法半导体,点击”+“,找到“STM32F2”系列,再点击STM32F205系列,找到STM32F205RB, 再右侧找到Device Specific( 此处以STM32F205RB 为例,因为我已经在之前安装好了)
4.点击install下载 DFP文件,等待下载完毕问哦们的器件包就下载好了
2.工程创建
1.创建一个文件夹,用于存放你写的所有工程,我们这里将其命名为”stm32编程“
2.为你要建立的工程单独建立一个文件夹,我们暂时将其命名为"test" 。在我们创建一个具体项目时,最好将这个文件夹命名为一个能概括你的项目内容的名称,例如:LED闪烁。
3.打开keil5 MDK,点击Project.
4.点击New uVision Project
5.进入刚刚创建的文件夹,将工程名命名为"Project",点击保存。
6.然后就会出现一个窗口选择芯片,点击STMicroelectronics展开,然后再点击STM32F2 Series
7.选择STM32F103C8,点击OK,我们就选择芯片完成了,随后出现的窗口关闭即可,工程创建完毕
3.软件破解
1.开始Keil软件注册,右击图标选择以管理员身份运行,点击Lience Mangement。
2.Customer Infomation部分随便填写,然后在右侧Cumpoter ID部分点击Git LIC via internet.
3.打开破解机,将复制的内容填入CID,Target 选择ARM,点击Generate,复制生成的内容。
4.将复制的LIC 粘贴至如图所示的位置,点击Add LIC,如果破解成功,则中间表格中会出现Project为MDK-ARM Plus,Lience ID Code 为你刚才复制的内容的信息。
5.弄好后,我们的界面是一个文件也没有的
4.配置必要文件
1.打开工程文件,我们创建一个名为Start的文件,里面存放STM32的启动文件(从官方固件库获得)。
2.点击Source Group1,然后单击将命名改为Start,右击,选择Add Exiciting file to….,将文件类型改为All Files ,要添加以md.s结尾的文件,其余的.c和.h 文件均要添加进来。
3.再返回我们创建的工程文件,创建一个名为Library的文件,用于存放库函数文件(官方固件库中获得)
4.同上,右击Target1, 选择Add Group,并将其命名为Library,同样,将工程文件中Library中的所有文件添加进来。
6.至此,我们已经创建好了STM32 的启动函数文件和库函数文件,接下来还要添加一个conf(文件名结尾为conf。下同)文件用于包含所有头文件以及两个it文件(官方固件库中获得)。我们再在工程文件中创建一个名为哦User的文件。将这三个文件复制进去。
5.文件添加
1.同上在Keil中创建一个User组,将这些文件添加进去。
6.路径添加
1.添加路径。点击“魔法棒”。
点击C/C++,找到Include Paths,点击右侧三个点,
点击New
再点击右侧按键, 将User,Start,Library ,将三个文件的路径都添加进来。点击OK,关闭所有窗口。
7.添加 USE_STDPERIPH_DRIVER定义
1.在User文件加中创建main.c文件,使用#include包含头文件
4.选中头文件的名称,右击,点击Open Documents "stm32f10x.h"
26.在第8346行找到这部分代码
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
将USE_STDPERIPH_DRIVER复制,然后点击“魔法棒”,点击C/C++界面,将其粘贴至Define
,这部分操作完毕 ,目的是定义USE_STDPERIPH_DRIVER使程序包含stm32f10x_conf.h头文件。
8.选择下载器并设置
1.接着点击Debug界面,点击右侧Use列表选择STLink(我们使用STLink下载程序)
2.点击Setting,点击Flash Download界面,在Download Function中勾选Rset and Run,点击”确定“,点击OK,我们设置完毕。
9.程序下载
1.编译,程序在写完后应点击编译图标编译一下
2.下载。点击下载按钮,程序通过ST-link 自动下载
10.代码规范
1.主函数
主函数的返回值必须为int型,但程序不需要再最后添加类似于return 0; 的语句。参数列表为空
2.整个程序文件的最后一行必须为空行,不能有任何文字
代码验证
/*使用库函数电灯操作*/
#include <stm32f10x.h> /*stm32头文件*/
/*
主函数返回值为int型,参数列表为空
*/
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //APB2外设时钟配置
/*
APB2外设时钟设置应放在GPIO_InitStruct结构体定义之前
*/
GPIO_InitTypeDef GPIO_InitStruct; //定义结构体
/*
结构体初始化
*/
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; //选择PC13引脚
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //选择GPIO口的速度
GPIO_Init(GPIOC,&GPIO_InitStruct); //GPIO_Init()函数的第二个参数为指向结构体指针,此处应将结构体的地址传递给它
// GPIO_SetBits(GPIOC,GPIO_Pin_13); //将PC13口设置为高电平
GPIO_ResetBits(GPIOC,GPIO_Pin_13); //将PC13口设置为低电平
while(1);
}
/*文件最后一行必须为空行*/
此时最小系统板的与PC13相连的LED应为点亮状态
/*使用库函数电灯操作*/
#include <stm32f10x.h> /*stm32头文件*/
/*
主函数返回值为int型,参数列表为空
*/
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //APB2外设时钟配置
/*
APB2外设时钟设置应放在GPIO_InitStruct结构体定义之前
*/
GPIO_InitTypeDef GPIO_InitStruct; //定义结构体
/*
结构体初始化
*/
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; //选择PC13引脚
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //选择GPIO口的速度
GPIO_Init(GPIOC,&GPIO_InitStruct); //GPIO_Init()函数的第二个参数为指向结构体指针,此处应将结构体的地址传递给它
GPIO_SetBits(GPIOC,GPIO_Pin_13); //将PC13口设置为高电平
// GPIO_ResetBits(GPIOC,GPIO_Pin_13); //将PC13口设置为低电平
while(1);
}
/*文件最后一行必须为空行*/
此时最小系统板的与PC13相连的LED应为熄灭状态
实验现象
问题与解决
1.若出现如下错误提示
说明缺少core_cm3.h文件。
解决方法: 在Start文件夹中复制core_cm3.h文件,将其粘贴\keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include路径下。再次编译,即可解决问题。
作者:Czzzzlq