创建基于固件库的stm32程序模板并实现流水灯



创建基于固件库的stm32程序模板并实现流水灯

 

一、准备
  1.  Keil mdk514

  2. 下载STM32F10x_StdPeriph_Lib_V3.5.0固件库(百度搜索或http://download.csdn.net/detail/weboo10000/9084145).

  3. 示例芯片型号:STM32F103C8 

二、创建工程

 1. 创建工程目录:新建一个文件夹,起名为“Template工程模板”,在该文件夹下建立下图所示子文件夹

创建基于固件库的stm32程序模板并实现流水灯_第1张图片

图1:工程文件目录结构

 2. 准备文件: 复制固件库 Libraries\STM32F10x_StdPeriph_Driver 下的 2 个文件夹到工程模板目录的 FWLIB 下;复制固件库 Libraries\CMSIS\CM3\CoreSupport 下的文件到工程模板目录的 CORE 下;复制固件库 Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 下的 startup_stm32f10x_XX.s 到到工程模板目录的 CORE 下;复制固件库 Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下的 stm32f10x.h system_stm32f10x.c system_stm32f10x.h 到工程模板的 USER 目录;复制固件库 Project\STM32F10x_StdPeriph_Template 下的 main.c stm32f10x_conf.h stm32f10x_it.c stm32f10x_it.h 到工程模板的 USER 目录。

其中startup_stm32f10x_XX.s文件由以下说明确定:

startup_stm32f10x_hd.s:大容量产品启动文件

startup_stm32f10x_md.s:中容量产品启动文件

startup_stm32f10x_ld.s:小容量产品启动文件

创建基于固件库的stm32程序模板并实现流水灯_第2张图片

图2:上表来自《STM32数据手册》

根据《STM32选型手册》得知:

图3 选型手册截图

STM32F103C8是中容量产品,应使用startup_stm32f10x_md.s

STM32F103ZE是大容量产品,应使用startup_stm32f10x_hd.s

3.创建工程:打开Keil uVision5,选Project->New uVision Project…创建工程,取名为Template并选择工程目录的USER目录保存;在弹出的设备选择页面中选择相应的设备型号,例如STM32F103C8,选择ok.

创建基于固件库的stm32程序模板并实现流水灯_第3张图片

图4 创建工程

 4.添加文件:这步主要是将步骤2中准备的文件添加到工程中。在Project视图中右键Target1选择Manage Project Items…出现工程文件管理界面。

创建基于固件库的stm32程序模板并实现流水灯_第4张图片创建基于固件库的stm32程序模板并实现流水灯_第5张图片

图5 

如图5右,在Project Targets中添加Template_Flash,Groups下新建USERFWLIBCORE,并在每个分组中添加步骤2中工程目录对应文件夹下的所有.c.s文件,单击ok完成。

结果如图6:

创建基于固件库的stm32程序模板并实现流水灯_第6张图片

图6

5.工程配置:单击Keil工具栏中的魔术棒图标(optionfor target…

(1)Target标签设置如下(图7),如果正确选择器件型号则无需修改红框中内容。

创建基于固件库的stm32程序模板并实现流水灯_第7张图片

图7

(2)Output标签和Listing标签:单击按钮选择obj文件保存位置为工程模板目录的OBJ目录,勾选红框中的选项。Listing标签下只需修改链接文件保存位置为工程模板目录的LIST即可。

创建基于固件库的stm32程序模板并实现流水灯_第8张图片

图8

(3)C/C++标签:preprocessor Symbolsdefine中填入定义:STM32F10X_XD,USE_STDPERIPH_DRIVER;在Include Paths中添加在该工程目录中所有包含.h文件的目录路径。  注意!!!其中:STM32F10X_XD由芯片容量决定,小容量,中容量,大容量Flash(参见步骤2)的芯片分别应写成:STM32F10X_LD,STM32F10X_MD,STM32F10X_HD。

创建基于固件库的stm32程序模板并实现流水灯_第9张图片

图9

(4)BEBUGUtilities标签:a如果要用仿真器调试和下载需在右侧选择相应的仿真器,并单击settings出现的设置页面选择Flash Download设置如图所示,勾选Reset and Run(若正确选择器件型号,flash编程算法和RAM地址都无需再配置),Utilities标签下Settings同理;b.软件仿真则勾选左侧的Use Simulator即可。

创建基于固件库的stm32程序模板并实现流水灯_第10张图片

图10

创建基于固件库的stm32程序模板并实现流水灯_第11张图片

图11

6.最后修改:将stm32f10x_it.c文件的SysTick_Handler函数注释掉;打开main.c文件替换如下:

#include "stm32f10x.h"
u16 DelayCounter=0;
void Delay_Init()
{
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);    //Systick时钟源
	SysTick_Config(SystemCoreClock / 1000); //初始化systick,时钟为HCLK,并开启中断每毫秒中断
}

void SysTick_Handler(void)
{
	if(DelayCounter!=0)
	{
		DelayCounter--;
	}
}

void Delayms(u16 ms)
{
	DelayCounter=ms;
	while(DelayCounter!=0);
}

 int main(void)
 {	
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能PA端口时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5;	//LED0-->PA.1 PA.3 PA.5 端口配置
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
  GPIO_Init(GPIOA, &GPIO_InitStructure);	//根据设定参数初始化GPIOA
  GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5);	//输出高 
  Delay_Init();
  while(1)
 {
	    GPIO_SetBits(GPIOA,GPIO_Pin_1);
	    GPIO_SetBits(GPIOA,GPIO_Pin_3);
            GPIO_ResetBits(GPIOA,GPIO_Pin_5);
	    Delayms(500);
	    GPIO_SetBits(GPIOA,GPIO_Pin_1);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_3);
	    GPIO_SetBits(GPIOA,GPIO_Pin_5);
	    Delayms(500);
	    GPIO_ResetBits(GPIOA,GPIO_Pin_1);
	    GPIO_SetBits(GPIOA,GPIO_Pin_3);
	    GPIO_SetBits(GPIOA,GPIO_Pin_5);
	    Delayms(500);
 }
 }

最后单击Build(F7)按钮成功编译

创建基于固件库的stm32程序模板并实现流水灯_第12张图片

图 12


三、下载运行或调试

创建工程并编译通过后,即可进行下载测试,将Jlink链接到PC并安装完驱动,另外一端连接到STM32F103C8开发板JTAG接口并供电;单击Keil mdk软件的Download按钮即可下载程序,还可点击Debug按钮进行单步调试。(STM32芯片的BOOT引脚都要接地)

创建基于固件库的stm32程序模板并实现流水灯_第13张图片

图13




Keil工程模板下载:

http://download.csdn.net/detail/weboo10000/9085393






你可能感兴趣的:(STM32学习日记)