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

2.2 STM32F103C8T6最小系统板的四种有关固件的开发方式

2.2.1  四种有关固件的开发方式

       四种有关于固件的开发方式从时间线由远及近分别是:寄存器开发、标准外设驱动库开发、硬件抽象层库开发、底层库开发。

       四种开发方式各有优缺点,可以参考ST官方的测试与说明。

       1.寄存器开发

       寄存器编程对于从51等等芯片过渡过来的小伙伴并不陌生,不管你是什么库,最终操作的还是寄存器,所以对于标准库、HAL库、LL库都是在寄存器上的编程,所以可以直接在各种库中直接操作寄存器。 但寄存器开发方法到了STM32就变得不太容易行得通了,因为STM32的寄存器数量是51单片机的十数倍,如此多的寄存器根本无法全部记忆,开发时需要经常的翻查芯片的数据手册,此时直接操作寄存器就变得非常的费力了。但还是会有很小一部分人,喜欢去直接操作寄存器,因为这样更接近原理,知其然也知其所以然。

       2.标准外设驱动库开发

       也叫标准库,标准库所做的事情就是对寄存器进行了封装,形成了一套API函数供用户使用 因为STM32有非常多的寄存器,而导致了开发困难,所以为此ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx.c和stm32F1xx.h之类的。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。用户不用去管寄存器到底是如何操作的,直接调用接口函数进行开发即可。 标准库在早期版本也叫固件函数库或简称固件库,不同人有不同的说法,知道这是同一个东西就行了。       

       3.硬件抽象层库开发

       也叫LL库,它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。 并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。 而且使用ST公司研发的 STM32CubeMx 软件,可以通过图形化的配置功能,直接生成整个使用HAL库的工程文件,可以说是方便至极,但是方便的同时也造成了它执行效率的低下。 

       4.底层库开发

       也叫LL库,是与HAL库打包发布的一部分库文件,它也是对寄存器进行了封装,与标准库其实差别并不是很大。

2.2.2  固件开发方式选择

       推荐先学习标准外设驱动库开发,然后再转入硬件抽象层库开发。

       

       

 

http://www.lryc.cn/news/542213.html

相关文章:

  • 【C++】 stack和queue以及模拟实现
  • python与C系列语言的差异总结(2)
  • Linux之文件系统
  • LeetCode刷题 -- 23. 合并 K 个升序链表
  • DeepSeek在MATLAB上的部署与应用
  • mapbox基础,使用geojson加载fill-extrusion三维填充图层
  • 基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现
  • 单片机裸机编程-时机管理
  • Flutter系列教程之(2)——Dart语言快速入门
  • pyecharts介绍
  • 前缀和相关题目记录(未完待续...)
  • Https解决了Http的哪些问题
  • OpenCV给图像添加噪声
  • 湖北中医药大学谱度众合(武汉)生命科技有限公司研究生工作站揭牌
  • 欢乐力扣:快乐数
  • 【聊天室后端服务器开发】功能设计-框架与微服务
  • 国标28181协议在智联视频超融合平台中的接入方法
  • 让网页“浪“起来:打造会呼吸的波浪背景
  • linux-多进程基础(1) 程序、进程、多道程序、并发与并行、进程相关命令,fork
  • 美颜相机1.0
  • Docker内存芭蕾:优雅调整容器内存的极限艺术
  • gitlab初次登录为什么登不上去
  • 单链表相关操作(基于C语言)
  • SPRING10_SPRING的生命周期流程图
  • 从零到一学习c++(基础篇--筑基期十一-类)
  • Java String 类
  • P8665 [蓝桥杯 2018 省 A] 航班时间
  • Vue3项目与pnpm使用教程
  • C++初阶——简单实现list
  • C/C++后端开发面经