您的位置 首页 被动

STM32库文件剖析弥补

1.没有加入stm32f10x_it.c初始化文件找不到中断向量。2.没有加入CM3文件夹的的头文件,编译器自动将类型定义链接到MDK的库中,C:\Program…

1.没有参加stm32f10x_it.c 初始化文件找不到中止向量。

2.没有参加CM3文件夹的的头文件,编译器主动将类型界说链接到MDK的库中,
C:\Program Files\MDK380a\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23): error: #256: invalid redeclaration of type name “s32” (declared at line 312 of “C:\Program Files\MDK380a\ARM\INC\ST\STM32F10x\stm32f10x.h”)
这个error是由于在程序顶用到了s32这个类型,可是程序中没有包括这个stm32f10x_type.h
这个时分编译器提示你,这个类型是在上面这个途径的文件中界说的,要你包括这个
头文件。
在编译器途径中参加了CM3文件夹途径,这个问题能够得到解决。
原因是 stm32f10x.h文件中界说了这些类型。
#include “stm32f10x.h” 包括下面的两个头文件。它们都坐落CM3文件夹中。
#include “core_cm3.h”
#include “system_stm32f10x.h”
在stm32f10x.h文件的8184行,有这样一句
#ifdef USE_STDPERIPH_DRIVER
#include “stm32f10x_conf.h”
#endif
其间这个stm32f10x.conf.h 文件中包括的以下的头文件
#include “stm32f10x_adc.h”
#include “stm32f10x_bkp.h”
#include “stm32f10x_can.h”
#include “stm32f10x_crc.h”
#include “stm32f10x_dac.h”
#include “stm32f10x_dbgmcu.h”
#include “stm32f10x_dma.h”
#include “stm32f10x_exti.h”
#include “stm32f10x_flash.h”
#include “stm32f10x_fsmc.h”
#include “stm32f10x_gpio.h”
#include “stm32f10x_i2c.h”
#include “stm32f10x_iwdg.h”
#include “stm32f10x_pwr.h”
#include “stm32f10x_rcc.h”
#include “stm32f10x_rtc.h”
#include “stm32f10x_sdio.h”
#include “stm32f10x_spi.h”
#include “stm32f10x_tim.h”
#include “stm32f10x_usart.h”
#include “stm32f10x_wwdg.h”
#include “misc.h”
在文件包括途径中参加了CM3文件夹,在C文件中参加stm32f10x.h文件,一同在MDK中
设置USE_STDPERIPH_DRIVER ,这个C文件中的函数就能够调用一切规范库外设。
1.stm32发动文件
STM32发动文件简略剖析(STM32F10x.s适用范围)定时器, 类型, 姓名在<>,
咱们一切的例程都采用了一个叫STM32F10x.s的发动文件,
里边界说了STM32的仓库巨细以及各种中止的姓名及进口函数称号,还有发动相关的汇编代码。
STM32F10x.s是MDK供给的发动代码,从其里边的内容看来,它只界说了3个串口,4个定时器。
实际上STM32的系列产品有5个串口的类型,也只要有2个串口的类型,定时器也是,做多的有8个定时器。
比方,假如你用的STM32F103ZET6,而发动文件用的是STM32F10x.s的话,
你能够正常运用串口1~3的中止,而串口4和5的中止,则无法运用。
又比方,你TIM1~4的中止能够正常运用,而5~8的,则无法运用。
所以STM32F10x.s并不能适用一切的STM32类型,这样,咱们就得对不同类型的STM32,挑选不同的发动文件
其间,ld.s适用于小容量 产品;md.s适用于中等容量产品;hd适用于大容量产品;
这儿的容量是指FLASH的巨细.判别办法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH
cl:互联型产品,stm32f105/107系列
vl:超值型产品,stm32f100系列
xl:超高密度产品,stm32f101/103系列 超大容量 512-1024K
ld:低密度产品,FLASH小于64K
md:中等密度产品,FLASH=64 or 128
hd:高密度产品,FLASH大于128-512
2、 typedef与结构结合运用
typedef struct tagMyStruct
{
int iNum;
long lLength;
} MyStruct;
这句子实际上完结两个操作:
1) 界说一个新的结构类型
 struct tagMyStruct
 {
 int iNum;
 long lLength;
 };
 剖析:tagMyStruct称为“tag”,即“标签”,实际上是一个暂时姓名,
struct 关键字和tagMyStruct一同,构成了这个结构类型,不管是否有typedef,
这个结构都存在。
 咱们能够用struct tagMyStruct varName来界说变量,但要留意,
运用tagMyStruct varName来界说变量是不对的,由于struct 和tagMyStruct
合在一同才干表明一个结构类型。
 2) typedef为这个新的结构起了一个姓名,叫MyStruct。
 typedef struct tagMyStruct MyStruct;
 因而,MyStruct实际上相当于struct tagMyStruct,
咱们能够运用MyStruct varName来界说变量。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/268355.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部