当前位置: 首页 > news >正文

请上传网站应用水印图片昆明做公司网站

请上传网站应用水印图片,昆明做公司网站,南阳住房和城乡建设厅网站,wordpress 皮肤新建工程的方式 1. 安装开发工具 MDK5 / keil52. CMSIS 标准3. 新建工程3.1 寄存器版工程3.2 标准库版工程3.3 HAL/LL库版工程3.4 HAL库、LL库、标准库和寄存器对比3.5 库开发和寄存器的关系 4. STM32CubeMX工具的作用 1. 安装开发工具 MDK5 / keil5 MDK5 由两个部分组成#… 新建工程的方式 1. 安装开发工具 MDK5 / keil52. CMSIS 标准3. 新建工程3.1 寄存器版工程3.2 标准库版工程3.3 HAL/LL库版工程3.4 HAL库、LL库、标准库和寄存器对比3.5 库开发和寄存器的关系 4. STM32CubeMX工具的作用 1. 安装开发工具 MDK5 / keil5 MDK5 由两个部分组成MDK Core 和 Software Packs。其中Software Packs 可以独立于工具链进行新芯片支持和中间库的升级。 MDK Core 分为四个部分uVision IDE with Editor编辑器ARM C/C Compiler编译器Pack Installer包安装器uVision Debugger with Trace调试跟踪器。Pack Installer 用于下载、安装、更新和管理 Software Packs。 Software Packs软件包 分为三个部分Device芯片支持CMSIS微控制器软件接口标准Mdidleware中间库。   特性MDK5Keil5定位完整的开发套件集成开发环境IDE包含内容IDE、编译器、调试器、中间件、设备支持包仅包含 IDE适用场景ARM Cortex-M 微控制器开发嵌入式开发尤其是 ARM Cortex-M功能范围更广泛包含完整的开发工具链专注于代码编辑、编译和调试适用项目规模开发复杂的嵌入式系统或者需要使用丰富的中间件只需要一个 IDE 来编写和调试代码或者项目规模较小 2. CMSIS 标准 因为基于 Cortex 系列芯片采用的内核都是相同的区别主要为核外的片上外设的差异这些差异却导致软件在同内核不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件的兼容性问题ARM 与芯片厂商建立了 CMSIS 标准微控制器软件接口标准。所有芯片厂家的官方库包括ST官方库都是根据这套标准设计的。   从图中可以看出CMSIS 层在整个系统中是处于中间层向下负责与内核和各个外设直接打交道向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准那么各个芯片公司就会设计自己喜欢的风格的库函数而 CMSIS 标准就是要强制规定芯片生产公司设计的库函数必须按照 CMSIS 这套规范来设计。   其实不用讲这么复杂的举一个简单的例子我们在使用 STM32 芯片的时候首先要进行系统初始化CMSIS 规范就规定系统初始化函数名字必须为 SystemInit所以各个芯片公司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。CMSIS 还对各个外设驱动文件的文件名字规范化以及函数名字规范化等等一系列规定。例如函数GPIO_ResetBits 这个函数名字也是不能随便定义的是要遵循 CMSIS 规范的。   CMSIS 分为 3 个基本功能层 核内外设访问层用于访问内核寄存器的名称、地址定义以及功能函数ARM 公司提供。中间件访问层用于访问中间件的通用 APIARM 公司提供。外设访问层提供片上的核外外设的地址和中断定义以及外设的访问函数芯片生产商提供。 3. 新建工程 3.1 寄存器版工程 必备文件描述位置 stm32f4xx.h标准外设库头文件包含寄存器定义、外设地址映射、位域定义等内容。ST官方提供STM32Cube_FW_F4_V1.26.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include startup_stm32f407xx.s汇编语言启动文件主要进行初始化堆栈定义中断向量表以及跳转到主程序main()。ST官方提供STM32Cube_FW_F4_V1.26.0\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 3.2 标准库版工程 标准外设库 是对 STM32 芯片的一个完整的封装包括所有标准器件外设的器件驱动器是 ST 最早推出的针对 STM 系列主控的库函数。标准外设库仍然接近于寄存器操作主要就是将一些基本的寄存器操作封装成了 C 函数。开发者仍需要关注所使用的外设是在哪个总线之上具体寄存器的配置等底层信息。   ST 为各系列提供的标准外设库稍微有些区别。例如STM32F1x 的库和 STM32F4x 的库在文件结构上就有些不同此外在内部的实现上也稍微有些区别这个在具体使用移植时需要注意一下但是不同系列之间的差别并不是很大而且在设计上是相同的。   STM32 的标准外设库涵盖以下 3 个抽象级别 包含位位域和寄存器在内的完整的寄存器地址映射涵盖所有外围功能具有公共 API 的驱动器的例程和数据结构的集合。一组包含所有可用外设的示例其中包含最常用的开发工具的模板项目。     上图黄色部分为新建工程所必须的内容接下来介绍这些文件的作用 文件名作用类别是否必须stm32f4xx_conf.h1.用户配置文件启用或禁用外设驱动 通过条件编译控制是否包含特定外设的头文件 用户层 是stm32f4xx_it.c stm32f4xx_it.h1.用户定义和处理与内核及外设相关的中断事件不一定放到这个文件可删除 用户层 否stm32f4xx.h1.定义所有外设寄存器及其位于 寄存器定义 2.使用结构体组织相关寄存器 外设结构体 3.定义外设寄存器的基地址和偏移量 地址映射 4.定义中断向量号和中断处理 中断定义 5.定义一些常用宏用于位操作、寄存器配置等 常用宏 6.定义标准数据类型如 uinit32_t 类型定义 7.包含外设的配置选项和默认设置 外设配置 CMSIS核心层 是system_stm32f4xx.c system_stm32f4xx.h1.实现SystemInit()函数负责在系统启动时初始化关键硬件模块 系统初始化 2.实现SystemCoreClockUpdate()函数用于更新全局变量SystemCoreClock的值 系统时钟更新 3.定义全局变量SystemCoreClock用于存储系统核心时钟频率 全局变量定义 4.定义默认的时钟配置确保系统以正确的频率运行 默认时钟配置 5.在启动文件中SystemInit()函数会在 main() 函数执行之前被调用确保系统在进入用户代码之前完成初始化 与启动文件配合 CMSIS核心层 是startup_stm32f40xx.s1.定义中断向量表 2.初始化堆栈指针 3.在复位后初始化 .data 和 .bss 段 4.调用系统初始化函数SystemInit() 5.跳转到用户的主程序main() 6.提供默认的中断处理函数 CMSIS核心层 是core_cm4.h1.定义内核的寄存器结构体和地址映射包括NVIC、SCB、SysTick、MPU、FPU 定义内核寄存器 2.提供一系列内联函数用于方便地访问内核的功能 提供内联函数 3.定义特殊功能寄存器如xPSR、CONTROL、PRIMASK 等用于控制处理器的运行状态 定义特殊功能寄存器 4.定义FPU相关的寄存器和函数用于配置和控制 FPU 支持 FPU 5.提供 CMSIS 标准接口 6.与标准外设库stm32f4xx.h配合使用提供对内核功能的访问 与标准外设库配合 CMSIS核心层 是core_cmFunc.h1.提供内联函数访问内核的特殊功能寄存器如xPSR、CONTROL、PRIMASK 等 2.支持特权和非特权模式的切换 3.提供中断控制函数如全局中断的使能和禁用 4.支持浮点单元FPU操作如果可用 CMSIS核心层 是core_cmInstr.h1.定义内联函数用于封装内核的汇编指令如WFI、WFE、SEV、NOP 等 2.提供同步指令如 ISB、DSB、DMB 3.支持低功耗模式指令如WFI 和 WFE CMSIS核心层 是core_cmSimd.h1.定义 SIMD 指令的访问函数 2.提供对 DSP 扩展指令的支持 CMSIS核心层 是stm32f4xx_ppp.c stm32f4xx_ppp.h1.提供操作外设的 API 函数 2.定义外设的寄存器结构体、函数声明和宏定义 设备驱动层 是   标准外设库各文件间的关系: 3.3 HAL/LL库版工程 LL 库Low Layer目前与 HAL 库捆绑发布它设计为比 HAL 库更接近于硬件底层的操作代码更轻量级代码执行效率更高的库函数组件可以完全独立于 HAL 库来使用但 LL库不匹配复杂的外设如 USB 等。所以 LL 库并不是每个外设都有对应的完整驱动配置程序。使用 LL 库需要对芯片的功能有一定的认知和了解,它可以 独立使用该库完全独立实现可以完全抛开 HAL 库只用 LL 库编程完成。混合使用和 HAL 库结合使用。    HAL 库和 LL 库设计为彼此独立的分支但又同属于 HAL 库体系。标准库和 HAL 库、LL 库完全相互独立HAL 库更倾向于外设通用化扩展组件中解决芯片差异操作部分LL倾向于最简单的寄存器操作ST 在未来还将重点维护和建设 HAL 库标准库已经部分停止更新。HAL 库和 LL 库的应用将是未来的一个趋势。 HAL 即硬件抽象层。HAL 库是 ST 公司提供的外设驱动代码的驱动库用户只需要调用库的 API 函数便可间接配置寄存器。我们要写程序控制 STM32 芯片其实最终就是控制它的寄存器使之工作在我们需要得模式下HAL 库将大部分寄存器的操作封装成了函数我们只需要学习和掌握 HAL 库函数的结构和用法就能方便地驱动 STM32 工作以节省开发时间。   HAL 库开发指的是利用 HAL 库里面封装好的 C 语言编写的驱动文件来实现对 STM32 内部和外部电器元件的控制过程。但只有 HAL 库还不能直接驱动一个 STM32 的芯片其他的组件已经由 ARM 与众多芯片硬件、软件厂商指定的通用的软件开发标准 CMSIS 实现了。   STM32Cube 是 ST 提供的一套性能强大的免费开发工具和嵌入式软件模块它包含两个关键部分 允许用户通过图形配置工具STM32CubeMX来生成 C 语言工程。可以通过 STM32CubeMX 实现方便地下载各种软件或开发固件包。嵌入式软件包STM32Cube 库包含完整的 HAL 库硬件抽象层 API配套的中间件包括 RTOS、USB、FAT文件系统、图形、TCP/IP 、以太网以及一系列完整的例程。 上图黄色部分为新建工程所必须的内容接下来介绍这些文件的作用 文件名作用类别是否必须stm32f4xx_it.c stm32f4xx_it.h同标准外设库一样 用户层 否stm32f4xx_hal_conf.h同标准外设库中 stm32f4xx_conf.h 作用一样 用户层 是stm32f4xx_hal_msp.c回调函数存放文件已删除 用户层 否stm32f407xx.h同标准外设库中 stm32f4xx.h 作用一样 CMSIS核心层 是system_stm32f4xx.c system_stm32f4xx.h同标准外设库一样 CMSIS核心层 是startup_stm32f407xx.s同标准外设库一样 CMSIS核心层 是stm32f4xx.h是所有 STM32F4 系列的顶层头文件并且可以选择性包含某一特定的STM32F4 系列芯片的头文件比如包含F407头文件 stm32f407xx.h CMSIS核心层 是core_cm4.h同标准外设库一样 CMSIS核心层 是cmsis_armcc.h cmsis_armclang.h cmsis_compiler.h cmsis_version.h mpu_armv7.h内核头文件一般都不需要去了解 CMSIS核心层 是sm32f4xx_hal.c stm32f4xx_hal.hHAL 库的初始化、系统滴答HAL 库延时函数等功能 设备驱动层 是stm32f4xx_hal_def.h通用 HAL 库资源定义 设备驱动层 是stm32f4xx_hal_ppp.c stm32f4xx_hal_ppp.h外设的操作 API 函数文件 设备驱动层 是stm32f4xx_hal_ppp_ex.c stm32f4xx_hal_ppp_ex.h拓展外设特性的 API 函数文件 设备驱动层 是stm32f4xx_II_ppp.c stm32f4xx_II_ppp.hLL 库文件在一些复杂外设中实现底层功能 设备驱动层 是   HAL库各文件间的关系: 3.4 HAL库、LL库、标准库和寄存器对比 HAL库标准库LL库寄存器使用频率最高逐渐减少逐渐增加较低优点开发效率高代码简洁,代码效率较高代码效率高高于标准库代码效率最高缺点代码体积大,执行效率低已停止维护开发效率略低于HAL库开发难度大,可移植性差使用场景快速开发、跨平台移植老项目、简单应用性能与开发效率平衡的场景高性能需求、底层开发开发效率最高较高中等最低代码性能较低中等较高最高 3.5 库开发和寄存器的关系 寄存器Register是单片机内部一种特殊的内存它可以实现对单片机各个功能的控制简单的来说可以把寄存器当成一些控制开关控制包括内核及外设的各种状态。所以无论是 51单片机还是 STM32都需要用寄存器来实现各种控制以完成不同的功能。   由于寄存器资源非常宝贵一般都是一个位或者几个位控制一个功能对于 STM32 来说其寄存器是 32 位的一个 32 位的寄存器可能会有 32 个控制功能相当于 32 个开关由于STM32 的复杂性它内部有几百个寄存器所以整体来说 STM32 的寄存器还是比较复杂的。不过我们不要被其吓到了实际上 STM32 是由于内部有很多外设所以导致寄存器很多实际上我们把它分好类每个外设也就那么几个或者几十个寄存器学起来就不难了。   从大方向来区分STM32 寄存器分为两类如表所示 其中内核寄存器我们一般只需要关心中断控制寄存器和 SysTick 寄存器即可其他三大类我们一般很少直接接触。   对于STM32 来说以 GPIOB 的 ODR 寄存器为例其寄存器地址为0X40010C0C我们对其赋值 0XFFFF表示 GPIOB 所有 IO 口16 个 IO 口都输出高电平 (*(unsigned int *))(0X40010C0C) 0XFFFF;虽然上面的代码实现了我们需要的功能但是从实用的角度来说这么写肯定是不好的可读性极差可维护性也很差所以一般我们使用结构体来访问比如改写成这样 GPIOB-ODR 0XFFFF;这种方法当然可以但是这种方法的劣势是你需要去掌握每个寄存器的用法你才能正确使用STM32而对于 STM32 这种级别的 MCU数百个寄存器记起来又是谈何容易。于是 ST(意法半导体)推出了官方固件库固件库将这些寄存器底层操作都封装起来提供一整套接口API供开发者调用大多数场合下你不需要去知道操作的是哪个寄存器你只需要知道调用哪些函数即可。 比如控制 BSRRL 寄存器实现电平控制官方 HAL 库封装了一个函数 void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) {assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if(PinState ! GPIO_PIN_RESET){GPIOx-BSRR GPIO_Pin;}else{GPIOx-BSRR (uint32_t)GPIO_Pin 16;} }这个时候你不需要再直接去操作BSRRL寄存器了你只需要知道怎么使用HAL_GPIO_WritePin这个函数就可以了。在你对外设的工作原理有一定的了解之后你再去看固件库函数基本上函数名字能告诉你这个函数的功能是什么该怎么使用这样开发起来会方便很多。   任何处理器不管它有多么的高级归根结底都是要对处理器的寄存器进行操作。但是固件库不是万能的如果想要把 STM32 学透光读 STM32 固件库是远远不够的。你还是要了解一下 STM32 的原理了解 STM32 各个外设的运行机制。只有了解了这些原理你在进行固件库开发过程中才可能得心应手游刃有余。只有了解了原理才能做到“知其然知其所以然”所以在学习库函数的同时别忘了要了解一下寄存器大致配置过程。   标准库函数是对寄存器简单的进行了一次封装。将每个功能都独立的封装成一个函数。每个函数的功能比较单一。而HAL库相当于对寄存器进行了二次或者三次的封装它将能合并的功能都合并在了一起。减小了写代码的难度。但是库函数本身阅读起来要比标准库要费劲一些。这样就导致如果程序出错的话调试起来要比标准库难一点。但是HAL写程序却比较简单函数的名字也更容易理解。更接近于面向对象的思想。没有哪种方式更好每种都有自己的优缺点根据实际情况自己喜欢用哪种就用那种。通过对官方的这两种库的对比可以看出在产品开发中代码永远都有优化和改进的空间。以后自己在开发项目的时候也可以用这两种不同的方式对自己的代码进行优化升级。   描述标准外设库HAL / LL库内核寄存器封装文件core_cm4.hcore_cm4.h内核寄存器操作文件1.core_cm4.h 2.misc.c / misc.h 封装NVIC、SysTick等操作 3.system_stm32f4xx.c 系统初始化和时钟配置函数涉及对内核寄存器的操作 4.startup_stm32f40xx.s 底层汇编代码涉及内核寄存器初始化1. core_cm4.h 2.stm32f4xx_hal_cortex.c 封装对内核寄存器的操作 3.system_stm32f4xx.c 系统初始化和时钟配置函数涉及对内核寄存器的操作 4.startup_stm32f40xx.s 底层汇编代码涉及内核寄存器初始化 5.stm32f4xx_hal.c 间接操作内核寄存器外设寄存器封装文件stm32f4xx.hstm32f4xx.h外设寄存器操作文件stm32f4xx_ppp.c stm32f4xx_ppp.hstm32f4xx_hal_ppp.c stm32f4xx_hal_ppp.hstm32f4xx_hal_ppp_ex.cstm32f4xx_hal_ppp_ex.hstm32f4xx_II_ppp.cstm32f4xx_II_ppp.h 4. STM32CubeMX工具的作用 STM32CubeMX是一款图形化配置工具主要用于STM32微控制器的初始化和代码生成。 其主要作用包括 引脚配置 可视化配置引脚功能如GPIO、外设接口等避免冲突。时钟树配置 通过图形界面配置系统时钟、外设时钟等确保时钟设置正确。外设配置 配置外设参数如UART、SPI、I2C、ADC等生成初始化代码。中间件配置 配置FreeRTOS、FATFS、USB库等中间件简化开发。功耗配置 配置低功耗模式优化功耗管理。代码生成 生成初始化代码支持多种IDE如Keil、IAR、STM32CubeIDE等并提供HAL库和LL库选项。项目管理 创建和管理项目支持多种开发环境和工具链。固件更新 集成STM32固件更新功能方便升级。   通过STM32CubeMX工具自动生成驱动代码让开发者只需专注实现 应用逻辑。
http://www.hkea.cn/news/14337712/

相关文章:

  • 网站的运营和维护网站建设工作怎么样
  • 学校部门网站建设总结淘宝客网站的建设
  • 网站规划项目与设计实例可编辑wordpress主题
  • 怎样提高网站的排名网络营销定价的特点有
  • 低多边形生成网站wordpress去掉标签前缀
  • 一个专门做特产的网站微信营销管理软件
  • 个人网站开发的感想东莞市招标网
  • 一般网站要多大的空间商城网站建设公司爱问
  • 大学网站栏目建设安徽省建设工程
  • 网站信息资源建设包括哪些哪个网站是vue做的
  • 央企做的好的网站公司画册设计模板
  • 做任务网站有哪些佛山提供网站设计方案公司
  • 站长工具免费网站后台网址忘记了 php
  • 阿里云服务器做电影网站wordpress手机菜单分行
  • 营销型网站开发指的是什么千图网官网免费图
  • 手机网站建设做竞价推广的技巧短链接在线生成器
  • 活泼风格的网站科技公司的网站
  • 辽宁住房和建设厅网站wordpress crm分销插件
  • 网站模板搭建百姓网二手车个人
  • c 网站开发人员工具seo外包团队
  • 网站建设承揽合同常州营销网站建设
  • 天河网站建设优化天津网站搜索引擎优化
  • 客户对网站设计的要求如何做网站策划案
  • 网页特效源码网站品味雅虎 wordpress主题
  • 网站 扩展做网站公司怎么做
  • 360提交网站深圳vi设计有哪些
  • 网站支付功能建设单页网站排名没有
  • 百度网盘做存储网站室内设计公司排名前50
  • 莱芜新站优化wordpress页面显示分类文章列表
  • 人才微网站开发国家建设部建筑业网站