STM32之CubeMX学习笔记(1)什么是CubeMX 什么是HAL库

本文介绍了STM32的CubeMX软件及其HAL库,详细解析了CubeMX的便捷功能,如图形化配置、自动识别引脚冲突、时钟树设置等。HAL库简化了硬件操作,提高了代码移植性,但牺牲了一定的运行效率。文章还分享了使用CubeMX和HAL库的初步感受,指出其在项目创建和STM32学习方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32之CubeMX学习笔记(1)CubeMX&HAL库介绍

CubeMX介绍

STM32用的CubeMX是ST公司出品的一款C代码生成器软件,它的图形化工具界面可以让使用者可视化地选择所需的芯片,并设置选用任一引脚、任一外设。另外的,CubeMX还提供了自动识别引脚冲突、设置时钟树、功耗预测等功能。使用CubeMX能减轻底层开发工作量,节约时间。
CubeMX开发界面

HAL库介绍

CubeMX生成的代码使用的并不是32单片机的标准库,而是使用的HAL库HAL,是英文Hardware Abstraction Layer的缩写,翻译是硬件抽象层。它是内核与芯片内硬件设备的关联层,我们可以容易地在硬件抽象层中编程来操作内核,硬件抽象层的易于移植性也让在不同内核下的编程不再复杂。其实在很多嵌入式平台开发中都诞生了自己的HAL,比如,安卓和微软的内核都有它们自己的HAL,意法半导体也不能落后,它拥有如此多种类的芯片,也有很多的市场份额,为了提高自己在市场中的话语权,牢牢抓住使用ST芯片的老用户,它也开发出了属于自己的HAL库。首先是多点开发的花样,让开发更容易上手,更加专业,吸引更多新用户;其次也是为了提高库的可移植性,代替标准库。下面我就自己初次接触CubeMX和HAL库,谈谈自己的使用感受。
KEIL环境的开发

初步使用感受

当我第一次学习STM32单片机的时候,使用的是学长同款的某子的开发板,通过观看其配套的光盘教学视频,聆听我的未来不是梦,来对32单片机进行一步一步的学习。但是教学视频中介绍的32丰富的寄存器以及库函数的使用让调外设也成为了一件复杂工作。我当时在学的时候,看着各种外设的结构体变量名,就在想:这种类似菜单的参数选择做成一个软件不就行了。就在我对32单片机和它的背景更加了解的时候,得知了CubeMX软件的存在。

原来ST的先人早就在几年前就帮我们准备好了知识的财富。据了解前期的CubeMX的Bug简直不忍直视,明明是一个简化开发的工具,然而在学会使用它的过程中,付出的代价远远超过了它能带来的便捷,当然早期的HAL要背最大的锅。在2017年,能在网上查到很多关于CubeMXHAL库的吐槽。但是如今的CubeMX逐渐完善,截止今天我写稿的时候CubeMX已经更新到了5.6.1版本。我相信以后的CubeMX一定会越来越完善的。

回归小标题,谈谈我的初步使用感受。(本人最近就使用HAL库做了一个二轮平衡车项目,所以只是初步感受了)

  • 创建工程的简化:一般情况下,在我没学CubeMX的时候要制作一个项目,首先要复制某子的空的工程文件,然后去各个库函数例程中,搬运自己所需要的Hardware,然后改引脚,再根据自己的需求,改变参数。(u1s1,某子有些程序是真的难搬运,全搅和在一起)还有一些情况的基本上都是老程序手了,自己都写过相应的Hardware,有属于自己的代码风格,那么这样他只要搬运自己以前项目中的程序部分就行了,再按需求修改。当你使用CubeMX,你只需要在图形化的操作界面中,选择好芯片,改好ST下载,设置好外部晶振,改好时钟,定义好引脚,定义好外设,设置代码输出路径(特别注意,必须是全英文路径),改好IDE(本人使用MDK),生成代码即可。个人觉得比某子的工程创建要方便很多,很适合掌握了32基础知识,但手上没有很多项目代码的新手。软件学习还是相对比较简单的,在之后的博客中我会逐步更新。

  • 助你学习STM32:在CubeMX中配置芯片的时候,你可以清楚的看到该芯片的引脚和外设功能,也就是说,在使用CubeMX配置的过程中,我们就可以学习一遍STM32外设的功能,和该芯片的时钟频率、引脚功能分配等等,可以说这就是一个很好的学习工具。

  • HAL库的优劣:比起标准库,CubeMX使用的HAL库集成度会更加高,很多原本在标准库中要自己手动配置,组合的代码,在HAL库中可能就直接是封装好的函数,非常方便。但同时这样也带来了一些弊端,首先因为要考虑移植性和代码稳定性,HAL库中封装的函数不避免的有很多判断,这样的确影响了代码的效率,但是这仅局限于高速场合,一般情况下,使用HAL库和使用标准库的代码速度差别可以忽略不计。有那么多时间,还不如优化一下自己的算法代码,再想快一点,还可以使用LL库。这里具体就不谈了。

  • 添加操作系统FreeRTOS:在CubeMX上是可以直接移植FreeRTOS的,这样就避免了在移植FreeRTOS时出现接口错误。关于操作系统这方面,我还不是很了解,还需要努力。

总而言之,对于新手来说,CubeMX配合HAL库是一个很好的入门学习工具,这种开发方式对于传统开发肯定是更加Fashion;对于老手来说,这也提供了一种更快速更简便的开发方式,在开发一些简单项目上肯定能提高工作效率的。

### Jeston 设备上配置 YOLOv11 的详细视频教程 目前,针对 Jetson 系列设备上的深度学习模型部署,尤其是 YOLO 系列的目标检测框架,社区中有许多高质量的教学资源。然而需要注意的是,YOLOv11 是一个假设性的版本号,在当前的时间节点下并未实际发布。因此以下内容将以通用的 YOLO 部署流程为基础,并结合已知的 YOLO 版本(如 YOLOv5 或其他主流版本)来提供指导。 #### 一、Jetson Nano 上部署 YOLO 的基本步骤概述 对于 Jetson Nano 这样的嵌入式硬件平台,部署 YOLO 模型通常涉及以下几个方面的工作: 1. **系统准备** 安装适合 Jetson Nano 的操作系统镜像文件。推荐使用官方发布的 L4T (Linux for Tegra) 系统[^2]。如果存储空间有限(例如仅 32GB),则应优先选择纯净版系统并手动完成必要的软件包安装;而对于更大容量的存储介质,则可以考虑直接加载预配置好的开发环境。 2. **依赖安装** - CUDA 和 cuDNN:这些工具提供了 GPU 加速支持,是运行基于 PyTorch 或 TensorFlow 构建的神经网络所必需的基础组件。 - Python 及其科学计算生态链(NumPy, SciPy 等) - Conda 虚拟环境管理器用于隔离不同项目间的依赖冲突 3. **深度学习框架设置** 根据具体使用的 YOLO 实现形式决定是否需要额外编译 TensorRT 插件以实现推理性能优化[^1]。 4. **模型转换与测试验证** 将训练完毕后的权重文件导出为 ONNX 格式或其他兼容格式后通过 TensorRT SDK 加载执行预测操作。 #### 二、B站相关保姆级教学视频推荐 虽然无法确切指出某一部专门讲解如何在 Jetson 设备上部署尚未存在的 YOLOv11 的视频,但以下是几类值得参考的学习材料方向: - “Jetson Nano 初学者指南系列”这类入门课程会详细介绍整个软硬件搭建过程; - 关于特定版本比如 v5/v7 的实战案例分享往往也能举一反三适用于未来更新迭代的产品线成员身上; - 如果关注点在于提升效率而非最新特性的话,那么有关 TensorRT 整合方面的专项解析同样非常有价值。 #### 示例代码片段展示 下面给出一段简单的 python 脚本来演示利用 tensorrt 接口加载 onnx 文件的过程: ```python import tensorrt as trt from PIL import Image import numpy as np def get_engine(onnx_file_path): TRT_LOGGER = trt.Logger(trt.Logger.WARNING) with open(onnx_file_path,'rb')as f ,trt.Builder(TRT_LOGGER).create_network()as network,trt.OnnxParser(network,TRT_LOGGER)as parser: if not parser.parse(f.read()): print('Failed to parse the ONNX') exit() config=builder.create_builder_config() engine=builder.build_serialized_network(network,config) return engine ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值