本文讲解的是一个库函数模板工程的搭建,我们做的基于库函数的开发基本上都是基于该模板。当然STM32开发不只是有库函数一个途径,还有寄存器、HAL库等方式。那本节主要讲的是关于库函数的模板搭建,需要相关文件的可以私信。下面进入正题。
Step1:准备项目目录。新建Template文件夹,文件夹结构如下图:
CORE【内核驱动程序】 包含c文件,放置ST公司官方提供的,对arm内核和mcu系统的基础文件,一般不做修改。库函数模板中,CORE包含core_cm3.c/.h与启动文件(startup_stm32f10x_hd.s)
启动文件的选择:
OBJ【文件编译输出目录】 编译后生成的文件基本都在该目录下。设置输出文件存放路径的方法:(记得勾选create hex file)
STM32F10x_FWLIB【内部功能的基本函数库】 包含c文件,st公司提供,需要根据用户的需求对其进行增减。这部分的文件都是在做项目的时候参考的,比如说你要控制GPIO,那就需要将官方内部的GPIO函数库导进去,然后查看GPIO文件写关于GPIO的代码。
inc存放.h文件,src存放源程序.c文件。博主自己的如下:
USER【用户程序】 包含主程序。
SYSTEM【内部功能的驱动函数】 包括dealy.c和sys.c等,有用户编写的延时程序,也有st公司提供。
ex:HARDWARE【外部硬件的驱动程序】 用户根据自己需求编写的驱动文件,如led.c、key.c等。
Step2:项目配置。
- 打开keil:project->new project->Template创建项目。
- 配置Step1中的目录分组:
如USER分组,需要将USER文件夹下的所有.c文件都导入进去,方法图中已标出,其他雷同。 - 魔术棒的配置
需要打开C、C++选项卡,配置启动文件,在Define中定义:STM32F10X_HD,USE_STDPERIPH_DRIVER, 当然这里对应你之前选择的启动文件,如果是LD,那就要换成LD,如图中1处。还需要配置头文件路径(h文件路径),这里需要配置到h文件的当前文件夹。对于hex文件的生成,我们需要打开output选项卡,勾选Create Hex file。
Step3:项目开发。 如实现led闪烁的功能,主函数代码如下所示。编译运行,烧入开发板即可。
#include "stm32f10x.h"
void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
Delay(3000000);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
Delay(3000000);
}
}
【提醒】:上述讲解均是以STM32F103ZET6为例,其它开发板可能需要做小的修改。