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

2019-10-19来源: eefocus关键字:固件库  stm32  程序模板  流水灯

一、准备

 Keil mdk514


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


示例芯片型号:STM32F103C8 


二、创建工程


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

图1:工程文件目录结构


 2. 准备文件:复制固件库LibrariesSTM32F10x_StdPeriph_Driver下的2个文件夹到工程模板目录的FWLIB下;复制固件库LibrariesCMSISCM3CoreSupport下的文件到工程模板目录的CORE下;复制固件库LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm下的startup_stm32f10x_XX.s到到工程模板目录的CORE下;复制固件库LibrariesCMSISCM3DeviceSupportSTSTM32F10x下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h到工程模板的USER目录;复制固件库ProjectSTM32F10x_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:小容量产品启动文件

图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.

图4 创建工程


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


图5 


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


结果如图6:


图6


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


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

图7


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


 

图8


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

图9


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

图10

图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)按钮成功编译

图 12


三、下载运行或调试


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

图13

关键字:固件库  stm32  程序模板  流水灯 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477694.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:【STM32】入门 · 流水灯
下一篇:STM32F103流水灯实验

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F0之SPI(使用固件库)
typedef struct{  uint16_t SPI_Direction;//设置方向     (2线全双工、2线只接受、一线发送、一线接受)  uint16_t SPI_Mode;     //模式         (从或主设备)  uint16_t SPI_DataSize; //宽度         (8或16位)  uint16_t SPI_CPOL;     //时钟极性     (低或高)  uint16_t
发表于 2019-11-07
再造STM32---第七部分:初识 STM32 固件库
看源码也可以了解函数功能。7.3 总结:① 什么是固件库?1、固化到EEPROM或者是芯片的FLASH中2、操作的是最底层的设备② 如何获取固件库?官网获取http://www.stmcu.org/document/list/index/category-524③ 固件库文件分析简介④ 库帮助文档的使用stm32f4xx_dsp_stdperiph_lib_um.chm
发表于 2019-09-28
再造STM32---第七部分:初识 STM32 固件库
再造STM32---第九部分:GPIO输出—使用固件库点亮LED
       本章参考资料:《STM32F4xx 参考手册》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。       利用库建立好的工程模板,就可以方便地使用 STM32 标准库编写应用程序了,可以说从这一章我们才开始迈入 STM32 开发的大门。       LED 灯的控制使用到 GPIO 外设的基本输出功能,本章中不再赘述 GPIO 外设的概念,如您忘记了,可重读前面“GPIO 框图剖析”小节, STM32 标准库中 GPIO 初始化结构体GPIO_TypeDef
发表于 2019-09-28
再造STM32---第九部分:GPIO输出—使用固件库点亮LED
STM32学习之旅② 固件库的使用及工程模板的建立
一、认识其本质STM32在进入中国市场的时候,商家为了迎合中国市场,翻译了很多英文文献,所以STM32相对与其他单片机的资料是相对丰富的,这也是很多人推崇STM32的原因,这对于我们学习来说也是相当不错的,但是由于翻译版本很多,注意以官方版本为准,在看文档发现不对时应该参考官方文档固件库其实是官方为了加快开发速度,帮助用户快速上手芯片,进行二次开发而研究出来的,它的出现大大缩短了芯片开发周期二、为什么要使用固件库(一)基于寄存器的编程(传统编程方式)好处:开发者可以了解单片机较为底层的寄存器,了解程序在硬件上的具体实现方式,便于纠错。不足:移植性差:由于单片机通常由很多外设,而不同型号的的单片机的寄存器操作方式都有所不同,当进行
发表于 2019-09-27
STM32学习之旅② 固件库的使用及工程模板的建立
STM32F1系列——固件库函数使用手册摘要
命名1.缩写2.函数命名固态函数库遵从以下命名规则 PPP表示任一外设缩写,例如:ADC。更多缩写相关信息参阅章节1.1 缩写系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。寄存器作为常量处理。他们的命名都由英文字母大写书写。在大多数情况下,他们采用与缩写规范与本用户手册一致。外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分
发表于 2019-09-24
STM32F1系列——固件库函数使用手册摘要
stm32正点原子学习笔记(29)独立看门狗实验
; IWDG_ReloadCounter(); 9     IWDG_Enable();10     11 }iwdg.h1 #ifndef __IWDG_H2 #define __IWDG_H3 4 #include "stm32f10x.h"5 6 void iwdg_init(uint8_t IWDG_Prescaler,uint16_t Reload);7 8 9 #endifmain.c 1 #include "exti.h" 2 #include "
发表于 2019-11-11
stm32正点原子学习笔记(29)独立看门狗实验
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved