微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记——使用函数库编程控制GPIO口输出

STM32学习笔记——使用函数库编程控制GPIO口输出

时间:11-28 来源:互联网 点击:
看了网上许多人的代码以及各类开发板所带的例程,大多数使用的都是官方发布的函数库来编程,通过查询后发现,使用函数库来编程可以简化开发过程,并不需要追溯到各个寄存器,通过查看库手册,新手也可以快速应用STM32,因此,决定先从函数库开始入门!

1.建立带函数库的IAR项目工程

先从网上下载3.5版(据说3.0版以后的固件库才逐渐稳定)stm32固件库(stm32f10x_stdperiph_lib)。由于与固件库版本兼容问题,重新下载安装了IAR6.30版。

1.1 创建项目文件夹“project”;

1.2解压“stm32f10x_stdperiph_lib.rar”后,

将...stm32f10x_stdperiph_libSTM32F10x_StdPeriph_Lib_V3.5.0下的“Libraries”文件夹拷贝到“project”文件夹,并在“project”文件夹中新建“project”文件夹以便与“Libraries”文件夹区分开;

1.3将...stm32f10x_stdperiph_libSTM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template下的“main.c”、“stm32f10x_conf.h”、“stm32f10x_it.c”、“stm32f10x_it.h”拷贝至...projectproject文件夹中;

1.4将...stm32f10x_stdperiph_libSTM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_TemplateEWARM下的“stm32f10x_flash.icf”、“stm32f10x_flash_extsram.icf”、“stm32f10x_nor.icf”、“stm32f10x_ram.icf”拷贝至...projectprojectEWARM文件夹中。

1.5新建IAR工程项目,添加分组及文件如图:


其中:

lCore_cm3.c在…projectLibrariesCMSISCM3CoreSupport文件夹中;

lSystem_stm32f10x.c在…projectLibrariesCMSISCM3DeviceSupportSTSTM32F10x文件夹中;

lStartup_stm32f10x_md.s在...projectLibrariesCMSISCM3DeviceSupportSTSTM32F10xstartupiar文件夹中,此外根据所使用芯片大小不同,所选择的startup文件也不同,具体选择如下:

startup_stm32f10x_cl.s互联型的器件,STM32F105xx,STM32F107xx
startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_hd_vl.s大容量的STM32F100xx
startup_stm32f10x_ld.s小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s小容量的STM32F100xx

startup_stm32f10x_md.s中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s中容量的STM32F100xx
startup_stm32f10x_xl.sFLASH在512K到1024K字节STM32F101xx,STM32F102xx,STM32F103xx

其中大、中、小容量的区分如下图所示:

各型号名称辨识如下图所示:

个人所使用的芯片型号是STM32F103VBT6,所以是属于中等容量,所以选择的是”startup_stm32f10x_md.s”文件。

lLWIB组则根据需要添加,由于要点亮led灯需要用到GPIO和时钟,所以添加了stm32f10x_gpio.c和stm32f10x_rcc.c两个文件,均 在...projectLibrariesSTM32F10x_StdPeriph_Driversrc下

l根据需要修改“main.c”文件,也可自己创建空白文件,但需要包含#include "stm32f10x.h"代码。

项目设置

除了“学前准备”文中所需要的设置外,还需要设置的项有:

GeneralOptions>Library Configuration项:

C/C++Compiler>Preprocessor项:

OutputConverter项:

Output项:

至此,工程设置完毕,可以往main文件里写空代码试着编译,如:

[cpp]view plaincopy

  1. #include“stm32f10x.h”
  2. Intmain()
  3. {While(1);}



编译无误后即可开始写自己的代码。

附注:关于CMSIS的core_cm3文件,在编译的时候经常会报错,一般是无法找到”core_cm3.h”文件,但实际上该文件与”core_cm3.c”同处于同一个目录,具体原因未明。解决方法如下:

lIAR 6.20版本注释有如下一段话:

A special note on CMSISintegration:

If your application source code include CMSISheader files explicitly, then you should not check theUse CMSIScheck-boxProject>Options...>GeneralOptions>Library Configuration>UseCMSIS. Some of the Cortex-M application examplesincludes CMSIS source files explicitly, do not check the saidcheck-box in these projects.
However, due to the evolution of the IAR C/C++ Compiler for ARM,older versions of CMSIS are incompatible with the current versionof the compiler. One simple example of how to solve this issueis:
a) Press F4 to bring up the erroneous source (header) file in theeditor - in most cases named core_cm3.h.
b) Right-click on the window tab of that editor window,chooseFile Properties....
c) Add (or remove) any character to the file name - so the compilerwont find it any more.
d) Modify project options: CheckProject>Options...>GeneralOptions>Library Configuration>UseCMSIS.
Steps a) to c) might need to be done for more than one file.Normally, the names of these files are core_cm0.h, core_cm3.h,core_cm4.h, core_cmFunc.h and core_cmInstr.h.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top