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

发布者:Shuangfei最新更新时间: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  程序模板  流水灯 引用地址:创建基于固件库的stm32程序模板并实现流水灯

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

推荐阅读最新更新时间:2024-11-01 05:30

STM32的多个ADC模块如何同时采样转换详细应用实例说明
在STM32家族里,多数系列芯片内含2到3个ADC模块,有的甚至更多,比方G4系列可以有5个ADC模块。其中,通道数因不同的系列或型号多少不等,几个到几十个的都有。有时,我们可能需要多个ADC模块同时工作,比方3个ADC模块同时采样转换。这时如果芯片内含有3个ADC模块,并支持同时采样转换就很方便。比方STM32F4系列、STM32F7等其它系列都含有3个ADC模块,并支持同时AD采样转换。 这里就3个ADC模块同时进行采样转换应用,做个简单实现示例,以供有需要的用户参考。此时3个ADC模块会建立主从关系。以STM32F4芯片为例。内部大致框架如下: 采样转换时按如下图示操作,每次对分别属于3个ADC模块的3个通道进行AD
[单片机]
<font color='red'>STM32</font>的多个ADC模块如何同时采样转换详细应用实例说明
STM32系列MCU解决方案展示
  STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成多个不同的系列,满足不同应用的不同需求。由于STM32系列在开发工具的成本和广泛度;存储器的种类、规模、性能和容量;以及各种软件获得的难易度方面都做了非常出色的准备,因此迅速在市场上取得巨大成功,成为最受欢迎的工业及消费市场应用的MCU产品系列之一。   STM32系列 E-METER产品方案介绍   友尚集团   与传统的机械式电能表相比,eMeter能够更快、更便宜、更可靠地报告用电量。友尚推出ST于智能电表上的运用方案,整个方案中的架构主要包括计量芯片、MCU和外围芯片三个部分。   计量芯片   单相表
[单片机]
<font color='red'>STM32</font>系列MCU解决方案展示
如何使用STM32_V3.5版本固件库建立工程模板
准备工作如下: 1:下载STM32_V3.5的固件库 去论坛上找,很多 2:准备Keil uVision4 软件,并安装到电脑上。 3:不要带板凳了,带上你的脑袋就行,因为板凳不会思考。 开始: 1:首先解压缩下载的固件库(保留一个备份,你懂的) 里面有, _htmresc : ST的 logo完全无用,不用理会, Libraries: 比较重要的文件 包含STM32的系统文件和大量头文件,也就是库文件了。 Project: 包含大量外设的例程,和各个软件版本的评估版工程模板。 KEIL对应的就是 MDK-ARM 文件下的工程模板。你也可以利用这
[单片机]
如何使用STM32_V3.5版本<font color='red'>固件库</font>建立工程<font color='red'>模板</font>
STM32 ADC应用要注意的几点问题
所有的STM32芯片中都带有逐次逼近型ADC模块,关于它的应用非常广泛和频繁。不过,应用过程中时常也会遇到些问题,这尽力小结下,与大家分享出来算作一些提醒。 1、Vdda没有供电或没有正常供电;STM32系列众多,该参数不可一概而论,细节请参考各个芯片数据手册。 2、采样电阻取值不合适,跟采样时间不匹配,经常表现为输入电阻过大、配置的采样时间偏短。实际设计时可以参考下STM32官方各系列评估板的相关电路。另外可以参考ST官方的应用笔记AN2834。关于ADC 应用其它的应用笔记,可以去WWW.STMCU.COM.CN搜索ADC即可。 3、ADC上电开启到稳定需要一段时间,即Tstab,该参数在数据手册里有介绍。在
[单片机]
<font color='red'>STM32</font> ADC应用要注意的几点问题
嵌入式stm32学习:SPI-读写串行FLASH
bsp_spi_flash.h #ifndef __SPI_FLASH_H #define __SPI_FLASH_H #include stm32f4xx.h #include stdio.h /* Private typedef -----------------------------------------------------------*/ //#define sFLASH_ID 0xEF3015 //W25X16 //#define sFLASH_ID 0xEF4015 //W25Q16 //#define sFLASH_ID
[单片机]
STM32串口DMA传输不能使用的问题
1. 开发环境 开发平台:官方开发板STM32F030R8-Nucleo 开发软件:Keil uVision5.24 开发库:STM32Cube_FW_F0_V1.9.0 2. 实验现象 根据官方例程,将UART1的DMA传输配置更改为UART2,但是使用UART2时,DMA的中断都进入不了,一开始以为是时钟未开启导致的,后来仔细对比后并无异常。于是查看了STM32F030的参考手册,DMA这一章,发现DMA的通道固定映射到相应的外设上,而不能随意配置。 我这里使用的是UART2,从上面的 mapping 图中可以看出UART2_TX只能使用 Channel4,UART2_RX只能使用 Channel5。所以我们在使
[单片机]
<font color='red'>STM32</font>串口DMA传输不能使用的问题
STM32的I2S接口只支持单工模式,使用时要小心
刚开始设计硬件的时候没仔细看手册,想当然,把I2S_SD连接到PCM CODEC输入,MISO连接到CODEC输出,结果做软件的时候遇到麻烦才回头看手册,傻眼了,STM32的I2S数据线只有一根I2S_SD,要么输入,要么输出,跟全双工CODEC没法通讯,这一点跟NXP LPC和比是个很大的败笔。 解决方法(PCM接口模式):将STM32工作在SPI SLAVE方式,MOSI接CODEC输出,MISO接CODEC输入,SCK接BCLK,任意一个PIO作为中断输入与FRAME SYNC连接。 如果想使用DMA,需要将帧频率(采样频率)设置为BCLK的字长倍,比如16bit字长,采样频率8K,则Fsync设置为8K*16=12
[单片机]
STM32学习笔记之ADC转换
1. ADC简介 stm32f103最少有2个AD模数转换器,每个ADC都有18个通道,可以测量16个外部和2个内部模拟量。最大转换频率为1Mhz,也就是转换时间为1us(在 ADCCLK = 14Mhz,采样周期为1.5个时钟周期时)。最大时钟超过14Mhz,将导致ADC转换准确度降低。stm32的ADC是12位精度的。 stm32的ADC转换有两种通道,规则通道和注入通道,注入通道可以抢占式地打断规则通道的采样,执行注入通道采样后,再执行之前的规则通道采样,和中断类似。本例只使用规则通道实现独立模式的中断采样,这里不再赘述两种通道区别。 stm32的ADC可以由外部事件触发(例如定时器捕获,EXTI线)和软件触发(即在配置相关
[单片机]
<font color='red'>STM32</font>学习笔记之ADC转换
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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