STM32库文件分析补充

发布者:快乐航程最新更新时间:2016-09-25 来源: eefocus关键字:STM32  库文件  分析补充 手机看文章 扫描二维码
随时随地手机看文章
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来定义变量。
 
关键字:STM32  库文件  分析补充 引用地址:STM32库文件分析补充

上一篇:stm32f10x_it.c 的书写
下一篇:STM32外设库文件分析(V3.5)

推荐阅读最新更新时间:2024-03-16 15:11

说说STM32调试DEBUG相关知识
学习STM32开发,肯定少不了DEBUG调试这一步骤。那么,本文带你了解一下这个调试相关的知识。 本文以STM32F1、Cortex-M3为例,其它系列芯片或内核,原理相同或类似。 1概况 在STM32中,有很多调试组件。使用它们可以执行各种调试功能,包括断点、数据观察点、 闪存地址重载以及各种跟踪。 STM32F1使用Cortex™-M3内核,该内核内含硬件调试模块,支持复杂的调试操作。 硬件调试模块允许内核在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。 当STM32F10x微控制器连接到调
[单片机]
说说<font color='red'>STM32</font>调试DEBUG相关知识
基于STM32的学习型通用红外遥控设备的设计实现
CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 二、学习型红外遥控设备的各个模块实现 2.4 红外脉宽存储及FLASH的读写 根据STM32型号的不同,FLASH容量由16K到1024K不等。 FLASH模块主要由三部分组成:主存储器、信息块、闪存存储器接口寄存器。FLASH模块组织: 详细内容见《STM32中文参考手册》小节《2.3.3 嵌入式闪存》。 主存储器用来存放代码和数据常数,对于大容量产品,划分为256页,每页2K字节;中小容量产品每页则是1K。信息块的启动程序代码用来存储ST
[单片机]
基于<font color='red'>STM32</font>的学习型通用红外遥控设备的设计实现
STM32学习笔记(1):GPIO口的使用
摸索了很久之后终于把ARM开发板上的LED灯点亮了,虽然是很简单的一个IO口操作,但是由于以前从来都没有什么经验,所以浪费了很多时间,也查找了很多资料。现在可以操作IO口了,证明迈出了学习ARM的第一步。 实验平台清单如下: 开发板: 奋斗STRIVE V3 核心芯片: STM32F103VET6 开发环境: RealView MDK-ARM Version:3.50 PC操作系统: Windows 7 家庭普通版 仿真器: SEGGER J-Link 其中,STM32F103VET6芯片是基于ARM Cortex-M3内核的,具体技术参数请参考ST公司给出的芯片资料(http
[单片机]
关于STM32数据手册中的定时器信号
打开STM32数据手册中的总体框图。娘的,又TMD一阵眼花缭乱。 首先,我们可以看到这个图大概有两个不分,一个部分是时钟源,另一个部分则是输入输出时钟源计数,到CNT计数器,然后根据捕获比较寄存器进行记录或比较。记录或比较有不同的配置。 首先是TI信号 TI1 TI2 TI3 TI4:这个信号就是外部信号,是直接与管脚相连的信号,图中还有一个问题就是TI1是可以是第一通道的外部信号进行触发,也可以设置为,第一通道,第二通道,第三通道异或进行触发。外部信号送往滤波器和边沿检测器。 TIxFP触发有效信号。 TI1FP1 TI1FP2TI2FP1 TI2FP2 TI3FP3 TI3FP4TI4FP3 TI4FP4:这个就是一个触发
[单片机]
stm32退出停止模式出现死机现象分析
根据《STM32中文参考手册》描述,STM32的低功耗模式有三种:睡眠模式,停止模式,待机模式。(有些资料说其实只有两种模式,不存在睡眠模式一说)。其中待机模式可实现系统的最低功耗,所以本来想采用该模式。但是《STM32中文参考手册》提到从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等),板子接了屏,再快再快也需要时间去加载界面,所以速度还是慢了。之后采用尝试采用停止模式,图1为停止模式的进入和退出方法。 图1 根据手册和开发板给的源码,直接实现停止模式,但是发现退出时就发生死机现象,并没有进入恢复正常,只执行了中断函
[单片机]
<font color='red'>stm32</font>退出停止模式出现死机现象<font color='red'>分析</font>
STM32的启动文件
C语言运行时有条件的,比如没有栈,C语言时运行不了的,所以单片机一开始跑的不是C语言代码,而是汇编,献给C语言建立好运行的环境,比如栈 堆的分配。这也是为什么启动文件是汇编文件,也就是s文件 而且每个STM32工程都必须有的,每个工程最开始执行的都是启动文件,一段汇编,因为一开始是执行不了C代码的。 野火的书也有介绍 我觉得把这种东西弄懂弄透彻可能比你单纯做个STM32项目更有意义。这样学STM32让我感觉更深入一个层面,变得更为专业。真正去把一个东西啃透。这才是一个业内人士玩STM32的表现。确实是要回归底层,把这些啃透。你会组装个无人机,这是低水平的技术,你会写STM32启动文件,这才叫技术人士业
[单片机]
<font color='red'>STM32</font>的启动文件
STM32单片机内部EEPROM的读写
STM32L系列单片机内部提供了EEPROM存储区域,但实质上,其FLASH也是EEPROM类型,只不过有一块区域被开放出来专门用作EEPROM操作而已。STM32L的EEPROM使用寿命设计为100000次擦写以上,容量为2K-4K,这对于一般设备的参数存储来说是非常理想的。但从EEPROM使用方式看,其不适用于被反复修改的数据存储使用,一般作为配置参数,其修改次数往往是比较少量的。 STM32L的EEPROM和FLASH是统一编址,操作共用同一个读写电路,所以在EEPROM读写的时候STM32L核对于FLASH的一切访问和操作都将暂停,只有当EEPROM的操作完成后,才继续执行后续代码,在这期间只有EEPROM的读写电路工
[单片机]
使用STM32点亮一颗LED实验
本次实验系统环境 Matlab版本: 2021b 系统环境 :Win10专业版 模型与原理图 simulink模型如图5.1所示,实验现象PB8以0.5S周期反转,PB9以1S周期翻转闪烁,本次实验电路原理如图5.2所示,实验所使用的下载器为STLINK 2V1版本,下载器自带一个串口,完整实验电路板如图5.3所示 图5.1 两颗LED闪烁simulink模型 图5.2 LED闪烁电路图 图5.3 实验开发板 基础模型介绍与分析 “Digital Write”模型用于控制I/O口作为普通输出用,双击模型可更改引脚编号,如图5.4所示其引脚对应STM32的PB8端口,例如想使用PA5引脚时,可通过将其改为“PA_
[单片机]
使用<font color='red'>STM32</font>点亮一颗LED实验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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