您的位置:首页 > 其它

STM32F10XXX(Cortex-M3) MDK-RAM 使用固件库函数的配置

2017-08-14 10:17 357 查看


 STM32F10XXX(Cortex-M3) MDK-RAM 使用固件库函数的配置

1 建立工程

Project>> New μVison Project。在弹出的“Select Device for Target ‘…’”窗口中选择STMicroelectronics下的STM32F103VC后点击OK。在弹出的窗口中点击“是”添加startup_stm32f10x.hds文件。点击配置文件结构按钮将工程结构配置为以下结构:



Figure1:Cortex-M3最基本工程文件

根据建立第一个M3工程笔记,那个时候总结只要一个工程中拥有这三个文件就可以在这个工程下深入编程。Startup_stm32f10x.hds用汇编初始化了芯片很多内容并分别调用main.c文件和systm_stm32f10x.c文件中的main()和SystemInit()函数。

在这样的情况下编译工程可能会有这样的错误:..\CMSIS\stm32f10x.h(96): error:  #35: #error directive: "Please selectfirst the target STM32F10x
device used in your application (in stm32f10x.hfile)",解决这个编译错误的方法有两种。第一种方法是去掉stm32f10x.h文件中66 ~ 73行中芯片对应的类型宏,比如STM32F103VC是大容量产品(指闪存存储器容量在256K至512K字节之间),那么就应该去掉STM32F10X_HD宏的注释,不过这种做法不提倡,一般不采取修改系统文件的手段。推荐的是第二个方式:选中当前工程 >> Target Option >> C/C++,在Preprocessor
Symbols的Define中写入芯片的类型宏STM32F10X_HD。再进行编译工程就不会有错误提示了。在文件中包含"stm32f10x.h"头文件就可以使用MDK所集成的芯片的内容了,如模块名GPIOA。

此时,在建立的工程环境中就可以边读着STM32F10XXX的参考手册就可以配置各模块的寄存器了。前一段日子配置过了USARTx,TIMx,GPIOx及NVIC相关的寄存器,亲自配置寄存器对熟悉芯片带来很大的作用,虽然工作量大。而且亲自配置寄存器使模块工作成功后再来使用固件库函数似乎要得心应手得多,为了效率和灵活,对于刚入门的人来说,应用固件库函数来配置芯片也是值得提倡的。


2 使用固件库函数

在以上的基础之上继续组织工程文件结构如下,



Figure2:添加固件库函数到工程中

StdPeriphDriver就是到固件库函数中添加的一些外设模块的文件。根据下划线后的名就可以看出上图各个文件主要包含的函数的操作对象分别为GPIO模块、RCC时钟模块及USART模块。此时编译工程除了“..\STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c(23):
error:  #5: cannot open source input file"stm32f10x_rcc.h": No such file or directory”类可能的错误外还可能会弹出以下窗口,



Figure3:添加固件库函数的编译错误

为解决弹出这个窗口的错误是为固件库函数添加路径,所有的固件库函数都被声明在对应的头文件中,只要告诉编译器固件库函数头文件的路径即可(源文件已经被包含进来了)。告诉编译器头文件路径的方法:选中工程 >> Target Option >> C/C++下的Include Paths中浏览到固件库函数头文件的目录,



Figure4:固件库函数头文件路径添加

如果出现"..\stm32f10x.h(8297): error:  #5: cannot open source input file "stm32f10x_conf.h": No such file or directory"的编译错误,它表示如果定义了USE_STDPERIPH_DRIVER宏(使用固件库函数的宏),那么MDK就应该包含“stm32f10x_conf.h”文件的路径。该文件在"stm32f10x.h"中被包含:



“stm32f10x_conf.h”文件包含了所有固件库函数的头文件,并定义了断言函数assert_param()。这样,用户只需要在工程 >> Target Option >> C/C++下的“Include Paths”下添加固件库函数头问件的路径就可以了,不用添加任何的头文件到工程中来。但需要添加使用的源程序文件。

在编译工程,此时还可能有诸如此类的编译错误:.\TEST.axf: Error: L6218E: Undefined symbolassert_param (referred from stm32f10x_gpio.o).解决这个编译错误的推荐做法是选中工程
>> Target Option >> C/C++下的Define栏下添加USE_STDPERIPH_DRIVER宏。

现在已经没有编译错误,试着在程序中调用一个固件库函数使用。

#include "stm32f10x.h"

int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

while(1);
}


调用开启外设模块时钟的函数,编译无错误。
因为每个模块基本都会调用使能对应模块时钟的函数,所以使用固件库函数时一定要包含stm32f10x_rcc.c文件。对于要使用中断的模块肯定也要添加misc.c文件了。然后,你需要什么功能就把具有什么功能的.c文件(下划线后的名字表示芯片内对应的外设模块)添加进工程里再去寻找对应的函数来使用就可以了。


3 使用J-Link下载程序的配置


(1) Tartget Option for…>> Debug



Figure5:Debug Config


(2) Tartget Option for…>> Utilities



Figure6:Utilities Config

在上图中点settings,添加本芯片类型



Figure7:选择芯片类型

对于STM32F103来说属于大容量芯片,故而添加以上High-density Flash类型。
经过这两步的配置就可以下载程序了,并且可调用固件库函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: