历史上的今天
返回首页

历史上的今天

今天是:2024年09月13日(星期五)

正在发生

2018年09月13日 | 菜鸟初识STM32固件库文件夹

2018-09-13 来源:eefocus

ARM、TI、ST等公司在嵌入式学习者眼中的区别

ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而 TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 芯片 (例如Cortex-M3),他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。所以你会发现,不同公司设计的 芯片(例如Cortex-M3)他们的端口数量,串口数量,控制方法这些都是有区别的,这些资源他们可以根据自己的需求理念来设计。同一家公司设计的多种内核芯片(例如Cortex-M3)的片上外设也会有很大的区别.通过ARM公司的《Cortex-M3 权威指南》中的一个图来了解一下:


CMSIS 标准

ARM 公司为了能让不同的芯片公司生产的 Cortex-M3 芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准 CMSIS 标准(Cortex  Microcontroller  Software  Interface  Standard )  ,翻译过来是“ARM Cortex™  微控制器软件接口标准”。 ST 官方库就是根据这套标准设计的。基于 CMSIS 应用程序基本结构:



CMSIS 分为 3 个基本功能层:

1)  核内外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。
2)  中间件访问层:定义访问中间件的通用 API,也是 ARM 公司提供。
3)  外设访问层:定义硬件寄存器的地址以及外设的访问函数。
从图中可以看出, CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库函数必须按照 CMSIS 这套规范来设计。


一个简单通俗的例子

我们在使用 STM32 芯片的时候首先要进行系统初始化, CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公
司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。CMSIS 还对各个外设驱动文件的文件名字规范化,以及函数名字规范化等等一系列规定。上一节讲的函数GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。至于 CMSIS 的具体内容就不必多讲了,需要了解详细的朋友可以到网上搜索资料

STM32官方固件库包的结构

官方 V3.5 版本的固件库包的目录结构:



Libraries 文件夹

有 CMSIS 和 STM32F10x_StdPeriph_Driver 两个目录,这两个目录包含 固 件 库 核 心 的 所 有 子 文 件 夹 和 文 件 。 其 中 CMSIS 目 录 下 面 是 启 动 文 件 ,STM32F10x_StdPeriph_Driver 放的是 STM32 固件库源码文件。源文件目录下面的 inc 目录存放的是 stm32f10x_xxx.h 头文件,无需改动。src 目录下面放的是 stm32f10x_xxx.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。这里的文件也是固件库的核心文件,每个外设对应的一组文件。

Project 文件夹

有两个文件夹,顾名思义, STM32F10x_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重STM32F10x_StdPeriph_Template 文件夹下面存放的是工程模板。Utilities 文件下就是官方评估板的一些对应源码。

固件库的帮助文档


根目录中还有一个 stm32f10x_stdperiph_lib_um.chm 文件,直接打开可以知道,这个文档学习过程中非常有用

关键文件介绍

提供进入 M3 内核接口文件

位于\Libraries\CMSIS\CM3\CoreSupport 目录下面的core_cm3.c 和 core_cm3.h 文件。这是 ARM 公司提供,对所有 CM3 内核的芯片都一样,你永远都不需要修改这个文件!

启动文件以及比较基础的寄存器定义以及中断向量定义的文件

位于\Libraries\CMSIS\CM3\DeviceSupport目录下有三个文件:system_stm32f10x.c,  system_stm32f10x.h 以及 stm32f10x.h 文件。

system_stm32f10x.c,  system_stm32f10x.h文件

在这对文件里面有一个非常重要的 SystemInit()函数,这个函数在我们系统启动的时候都会调用,用来设置系统的整个时钟系统。

stm32f10x.h 文件

这个文件相当重要,只要你做 STM32 开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作········

启动文件

位于DeviceSupport\ST\STM32F10x \startup文件夹下,在\startup\arm 目录下,我们可以看到 8 个 startup 开头的.s 文件。这里之所以有 8 个启动文件,是因为对于不同容量的芯片启动文件不一样。对于 103 系列,主要是用其中 3 个启动文件:
startup_stm32f10x_ld.s     :  适用于小容量  产品
startup_stm32f10x_md.s  :  适用于中等容量产品
startup_stm32f10x_hd.s   :  适用于大容量产品
这里的容量是指 FLASH 的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH

对于本人使用的STM32-F103-ZET06属于大容量产品,所以做工程的时候选择startup_stm32f10x_hd.s文件

启动文件作用:打开启动文件看看:启动文件主要是进行堆栈之类的初始化, 中断向量表以及中断函数定义。启动文件要引导进入 main 函数。 Reset_Handler中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。   跟踪工程,会发现Reset_handler 在我
们系统启动的时候会调用,下面让我们看看 Reset_handler 这段代码:
; Reset handler
Reset_Handler    PROC
EXPORT   Reset_Handler              [WEAK]
IMPORT   __main
IMPORT   SystemInit
LDR      R0, =SystemInit
BLX      R0            
LDR      R0, =__main
BX       R0
ENDP

据IMPORT   __main知道,这里导入 main 函数,同时在进入 main 函数之前,且调用 SystemInit 系统初始化函数。注释:引导程序进入__main(此__main是C_Library中的函数,非main()),这里启动文件只讲到这:详细可去搜索相应型号的芯片启动文件的解析

其他几个文件 stm32f10x_it.c,stm32f10x_it.h 以及 stm32f10x_conf.h 文件

 stm32f10x_it.c、stm32f10x_it.h顾名思义这对文件是用来中断服务函数,stm32f10x_conf.h(confer:参看)文件打开可以看到一堆的#include,这里你建立工程的时候,可以注释掉一些你不用的外设头文件.


推荐阅读

史海拾趣

绿宝石(BERYL)公司的发展小趣事

绿宝石公司注重品牌建设和形象提升。公司加大了广告宣传的投入力度,通过电视、网络、户外广告等多种渠道进行品牌推广。此外,绿宝石公司还积极参与社会公益活动,履行企业社会责任。这些举措不仅提升了公司的知名度和美誉度,也增强了消费者对绿宝石品牌的认同感和忠诚度。

Automatic Connector公司的发展小趣事

在电子连接器行业,品质是决定企业生死存亡的关键。Automatic Connector公司深知这一点,因此在生产过程中严格执行品质管理标准。公司引进了先进的生产设备和质量检测仪器,确保每一件产品都符合高标准的质量要求。同时,公司还建立了完善的售后服务体系,及时解决客户在使用过程中遇到的问题。凭借卓越的品质和优质的服务,Automatic Connector赢得了客户的信赖和好评。

DIALIGHT公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

Alpha & Omega Semiconductor(万国半导体)公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

EDAC公司的发展小趣事

面对数字化浪潮的冲击,ECS-D公司积极拥抱数字化转型,通过引入先进的信息技术和智能化设备,提升企业的运营效率和创新能力。公司建立了数字化管理平台,实现了生产、销售、财务等各个环节的信息化管理。同时,ECS-D公司还加强了对员工的数字化培训和教育,提升员工的数字化素养和创新能力。这些数字化转型的举措使ECS-D公司在激烈的市场竞争中保持了领先地位,也为公司的未来发展奠定了坚实的基础。

以上五个故事均以ECS公司的发展为主题,分别从不同角度描述了这些公司在电子行业中的成长历程和成功经验。这些故事旨在展示ECS公司如何通过技术创新、全球化战略、品质管理、绿色环保理念和数字化转型等方式实现持续发展和壮大。

常州能动(ENDRIVE)公司的发展小趣事

人才是企业发展的重要保障。常州能动深知这一点,因此在发展过程中始终注重人才引进与培养。公司不仅积极引进高端技术人才,还建立了完善的培训体系,为员工提供多样化的培训机会,帮助他们不断提升技能水平。这些措施使得公司的人才队伍不断壮大,为公司的持续发展提供了有力保障。

问答坊 | AI 解惑

LPC1300 MCU USB使用指南

LPC1300系列微控制器工作频率高达72MHz,功耗低至200μA/MHz,将ARM架构的功耗性能带上一个新的台阶。该系列微控制器内置嵌套向量中断控制器NVIC,支持中断嵌套和优先级分组机制,并集成电源管理单元PMU,支持睡眠、深度睡眠和深度掉电三种节电模式 ...…

查看全部问答>

请问各位大哥,arm +linux平台,应用程序开发用什么调试器

请问各位大哥,arm +linux平台,应用程序开发用什么调试器…

查看全部问答>

Nand 拷贝

我现在从Nand Flash拷贝到RAM的时候,经常在拷贝的时候,拷贝到一半就挂掉了。。。 但有的时候又可以成功。…

查看全部问答>

wince文件保存

wince 下如何像windows下一样创建txt文件。并将它保存在flash中。…

查看全部问答>

evc 串口通信程序问题

我的程序只能发送数据,不能读数据! 读串口线程代码如下,请大虾帮忙找出原因!谢谢! //串口读线程函数 DWORD CCESeries::ReadThreadFunc(LPVOID lparam) { CCESeries *ceSeries = (CCESeries*)lparam;         DW ...…

查看全部问答>

IAP搞不定,请教大家

IAP 程序使用例程中自带的,只修改了按键对应的端口。用户程序已经把xcl里的 Vector Table 和 ROM Start 地址都改成了0x08002000,stm32f10x_nvic.h文件里对于Vector Table的定义也做了修改 :# ...…

查看全部问答>

怎么在win7 64位系统上安装 AVR studio 4的驱动程序啊? 各位大侠帮帮忙吧

怎么在win7 64位系统上安装 AVR studio 4的驱动程序啊? 各位大侠帮帮忙吧?、…

查看全部问答>

msp430详细案例(带电路图和程序)

附件给出了几个大学生用msp430做的一些项目,包含电路图和源程序,希望能给msp430初学者提供帮助…

查看全部问答>

嵌入式实时操作系统uC/OS-II及其应用(转)

早在上世纪六十年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及。其在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。针对国内大部分用户使用的51系列的8位处理器 ...…

查看全部问答>

【试用心得】第三集——SysTick设置

续上回。这次的内容是重新设置系统的SysTick 我总觉得fps是有什么问题,因为我目测好像也不止这样,可是显示偏就是只有最高4FPS,因此推断计数帧数是有问题的 要知道,我可是按照示例上抄袭的库函数调用呢: // // Set up the period for the ...…

查看全部问答>