STM32CubeMX与HAL库开发实践

基于STM32CubeMX与HAL库的嵌入式系统快速开发实践

在现代嵌入式开发中,时间就是竞争力。面对日趋复杂的外设配置和日益紧迫的产品上市周期,传统的“寄存器+手册”开发模式已难以满足高效迭代的需求。尤其是在工业控制、智能仪表、消费电子等广泛使用STM32系列MCU的领域,开发者迫切需要一种既能保证底层可控性,又能大幅提升编码效率的开发方式。

正是在这样的背景下,ST意法半导体推出的 STM32CubeMX 配合 HAL(Hardware Abstraction Layer)库 ,逐渐成为主流的开发范式。它不仅改变了我们初始化芯片的方式,更重塑了从项目启动到功能验证的整体流程。

但这套工具链真的只是“图形化点点鼠标”那么简单吗?如果只把它当作一个自动生成初始化代码的“快捷键”,那可能错失了其真正的价值所在。相反,理解其背后的设计逻辑、掌握关键配置技巧、并能结合实际工程进行灵活调整,才是发挥其最大效能的关键。


一、为什么我们需要STM32CubeMX?

回想一下,在没有CubeMX的时代,一个典型的STM32项目启动往往意味着:

  • 打开参考手册,逐行查找RCC、GPIO、USART等模块的寄存器定义;
  • 手动计算时钟分频系数,反复核对APB总线是否超频;
  • 编写大量重复性的初始化函数;
  • 调试阶段花费大量时间排查因引脚复用或时钟未使能导致的“低级错误”。

这些工作不仅繁琐,而且极易出错。而STM32CubeMX的核心使命,正是将这些高度标准化、易出错的底层配置过程 可视化、自动化、可追溯化 。

它通过一个直观的图形界面,允许开发者完成以下核心任务:

  • 引脚分配与复用功能配置(Pinout & Configuration)
  • 时钟树的可视化设置(Clock Configuration)
  • 中断优先级管理(NVIC Settings)
  • 外设参数配置(如波特率、DMA通道、定时器模式等)
  • 功耗模式分析与低功耗设计辅助
  • 最终生成带HAL或LL库支持的C工程框架

更重要的是,CubeMX生成的代码是符合ST官方规范的,具备良好的可维护性和跨平台兼容性,为团队协作和后续升级提供了坚实基础。


二、HAL库:抽象层背后的权衡

很多人初学时会对HAL库产生误解——“封装太多,性能差”、“不如直接操作寄存器快”。这种观点有一定道理,但忽略了现代嵌入式开发的真实需求。

HAL库的本质是一套 硬件抽象层 ,它的设计目标不是极致性能,而是:

  • 提供统一接口,降低不同STM32系列间的迁移成本;
  • 封装复杂操作流程(如ADC校准、I2C状态机),减少人为失误;
  • 支持阻塞、中断、DMA等多种运行模式;
  • 便于与RTOS集成,实现任务调度与资源管理。

以最常用的串口发送为例:

// 使用HAL库发送字符串
HAL_UART_Transmit(&huart1, (uint8_t*)"Hello STM32!\r\n", 14, HAL_MAX_DELAY);

这行代码背后,HAL已经帮你处理了:
- 检查TXE标志位
- 循环写入数据寄存器
- 等待TC(传输完成)标志
- 超时机制防止死循环

相比之下,裸寄存器操作虽然更“轻量”,但在多任务环境中容易引发竞态条件,且缺乏统一的错误反馈机制。

当然,HAL也有代价:函数调用开销、额外的参数检查、内存占用略高。因此,在对实时性要求极高的场景(如高速PWM生成、高频采样),可以考虑结合LL库(Low-Layer API)进行优化。LL库提供宏级别的访问,接近寄存器操作的速度,同时仍保持一定的可读性。

例如:

LL_USART_TransmitData8(USART1, 'A');
while (!LL_USART_IsActiveFlag_TXE(USART1));

最佳实践建议 :主控逻辑用HAL,关键路径用LL,二者完全可以共存于同一项目中。


三、实战案例:构建一个带串口调试与LED控制的最小系统

让我们通过一个具体例子来体验完整的开发流程。

场景描述:

搭建一个基于STM32F407VG的最小系统,实现:
- PC13按键输入(外部中断)
- PA5连接LED(推挽输出)
- USART2用于日志输出(115200bps)
- 系统主频设定为84MHz

步骤1:创建新项目并选择芯片

打开STM32CubeMX,新建Project,选择MCU型号为STM32F407VGT6。进入Pinout视图后,我们可以看到芯片所有引脚的状态。

点击PC13,将其配置为GPIO_EXTI13;PA5设为GPIO_OUTPUT;PA2和PA3分别设为USART2_TX和USART2_RX(自动启用AF7复用)。此时,软件会自动提示哪些引脚已被占用,并防止冲突配置。

步骤2:配置时钟树

切换到“Clock Configuration”标签页。F4系列使用PLL倍频,我们的目标是让SYSCLK达到84MHz。

  • HSE主频设为8MHz(外接晶振)
  • PLL M = 8, N = 336, P = 4 → 主频 = 8 * 336 / 8 / 2 = 84MHz
  • APB1(低速外设)分频为2 → TIMx时钟 = 84MHz * 2 = 168MHz(注意:这是常见陷阱!TIM挂载在APB1上时会自动倍频)

CubeMX会在下方实时显示各总线频率,并用颜色标识是否合规(绿色正常,红色超限)。

步骤3:外设参数设置

进入“Configuration”面板,双击USART2打开配置窗口。

  • Mode: Asynchronous
  • Baud Rate: 115200
  • Data Width: 8 bits
  • Parity: None
  • Stop Bits: 1

同时开启NVIC中断,勾选“USART2 interrupt”,设置抢占优先级为2。

对于PC13的外部中断,进入SYSCFG设置,确保EXTI Line 13映射到GPIOC。然后在NVIC中启用EXTI15_10中断。

步骤4:生成代码

最后一步,前往“Project Manager”页面:

  • 设置工程名称和路径
  • 工具链选择MDK-ARM(Keil)、SW4STM32(Eclipse)、IAR或Makefile
  • 代码生成选项选择“Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”
  • 勾选“Copy all used libraries into the project folder”以便离线编译

点击“Generate Code”,几秒钟后即可在指定目录得到完整的工程结构。


四、生成代码解析与二次开发

生成后的 main.c 中包含了标准的初始化流程:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART2_UART_Init();

  while (1)
  {
    /* 用户应用代码 */
  }
}

其中 SystemClock_Config() 和各个 MX_xxx_Init() 函数均由CubeMX生成,位于独立的 .c 文件中,结构清晰。

接下来,我们在 main.c 中添加应用逻辑:

// 全局变量
volatile uint8_t button_pressed = 0;

// 在main函数前声明回调函数
void EXTI15_10_IRQHandlerCallback(void);

// 在main函数中注册回调(需在对应中断处理函数中调用)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if (GPIO_Pin == GPIO_PIN_13)
  {
    button_pressed = 1;
    HAL_UART_Transmit(&huart2, (uint8_t*)"Button Pressed!\r\n", 17, 100);
  }
}

// 主循环
while (1)
{
  if (button_pressed)
  {
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    button_pressed = 0;
    HAL_Delay(50); // 消抖延时
  }
  HAL_Delay(100);
}

注意:HAL_Delay依赖SysTick中断,由 HAL_Init() 自动启用。若需更高精度延时,可配合定时器使用。


五、进阶技巧与常见陷阱

✅ 技巧1:合理使用“User Label”避免代码覆盖

在生成的初始化函数中,CubeMX会保留两个特殊注释块之间的代码:

/* USER CODE BEGIN 2 */
// 这里的代码不会被重新生成覆盖
/* USER CODE END 2 */

务必把自定义逻辑放在这里,否则下次修改配置并重新生成代码时会被清除。

✅ 技巧2:启用FreeRTOS后自动整合任务调度

CubeMX内置对FreeRTOS的支持。只需在Middleware中添加FreeRTOS组件,选择任务调度方式(Preemptive或Cooperative),然后添加Task,设置堆栈大小和优先级。

生成后, main() 中会自动调用 osKernelStart() ,无需手动编写任务创建代码。

❌ 陷阱1:忽略时钟使能

尽管CubeMX会自动为所用外设开启RCC时钟,但如果后续在代码中动态启用某个未在GUI中配置的模块(如SPI3),必须手动补上调用:

__HAL_RCC_SPI3_CLK_ENABLE();

否则将无法工作。

❌ 陷阱2:中断优先级分组冲突

ARM Cortex-M4支持4位优先级分级,默认使用 NVIC_PriorityGroup_4 (0~15抢占优先级)。若多个中断设置相同抢占优先级,可能造成响应混乱。建议根据系统复杂度预先规划优先级策略。


六、工程化思考:CubeMX如何融入CI/CD流程?

有人质疑:“图形化工具不适合自动化构建。”其实不然。

STM32CubeMX支持命令行模式(通过 stm32cubemx --project 等方式),可以集成到Jenkins、GitLab CI等持续集成系统中,实现:

  • 自动化生成工程模板
  • 统一团队配置标准
  • 版本控制 .ioc 文件(本质是XML),追踪引脚变更历史
  • 结合脚本批量生成多型号适配工程

此外, .ioc 文件文本可比对,便于Code Review时审查硬件资源配置是否合理。


七、结语:工具的价值在于解放创造力

STM32CubeMX + HAL库的组合,绝非简单的“懒人工具”。它代表了一种现代化嵌入式开发理念: 将重复劳动交给机器,把工程师解放出来专注于业务逻辑与系统架构 。

当你不再为一个IO口反复查手册时,当你能在半小时内跑通第一个UART通信时,你就已经开始享受这套生态带来的红利。

当然,掌握底层原理永远是根本——知道CubeMX为你做了什么,比单纯会点击按钮重要得多。只有当“知其然”与“用其便”兼备时,才能真正驾驭这一强大工具链,在激烈的市场竞争中赢得先机。

【星汇极客】STM32 HAL库+CubeMX开发之代码分区与模块化实践指南 本文详细介绍了STM32 HAL库与CubeMX开发中的代码分区与模块化实践,重点解析Advanced工程结构优势、用户代码安全区域规范及模块化设计技巧,帮助开发者避免代码覆盖问题并提升可维护性,特别强调用户代码规范的重要性。 阅读详情

相关推荐

HAL库生态下的STM32G4 ADC开发:从标准库迁移到CubeMX的最佳实践

本文详细介绍了从标准库迁移到STM32CubeMX和HAL库进行STM32G4 ADC开发的最佳实践。重点解析了HAL库的设计哲学、CubeMX图形化配置技巧、多ADC协同工作策略以及性能优化方法,帮助开发者高效实现ADC数据采集,提升嵌入式开发效率。

css33的专栏 884

STM32基于CubeMX的HAL库开发

T = (分频值*重装载值)/独立看门狗时钟频率。这里T = 128*1250 / 40,000 = 4 s。独立看门狗的时钟频率可以通过时钟图查看。

SundayBear的博客 1333

STM32开发环境搭建:JRE8+CubeMX+HAL库工程实践指南

嵌入式开发中,硬件抽象层(HAL库)是实现跨芯片复用与快速原型验证的核心技术范式;而STM32CubeMX作为其官方配套的代码生成器,依赖特定Java运行环境(JRE)才能正确解析芯片外设描述、生成初始化框架。理解HAL库的句柄驱动模型与CubeMX的XML配置机制,是构建可维护、可迁移、可重现嵌入式工程的基础。该技术路径广泛应用于工业控制、汽车电子及IoT终端开发,尤其在STM32F1/F4/H7等主流系列中形成标准化实践。本文聚焦开发环境链路中最易出错的JRE版本兼容性、离线芯片支持包部署与CubeMX

weixin_35750953的博客 457

HAL库与CubeMX系列|Cubemx新建HAL库工程

前言   工欲善其事,必先利其器。HAL库的开发不一定必须使用cubemx,但是使用了cubemx,你绝对不会后悔。基于一些小伙伴对cubemx的使用还有一些疑问,本次小飞哥从新建工程到生成工程,编写应用代码,和大家一起聊一聊到底该如何使用这个神器。本次是建立在已经安装好cubemx的情况下,错误之处还请多多指教。 1、cubemx总体界面介绍   选择控制器MCU/MPU,有4个选项,一般小飞哥最常用的是第一个和第四个,第三个主要是没有对应板卡,可以快速找到自己用的MCU。   通过板子选

qq_16519885的博客 2163

使用STM32CubeMX实现STM32F103C8T6bulepill简单的LED灯点亮

初步学习了STM32CubeMX的使用,了解到其运行方法,这个工具极大地提升了stm32的开发的便捷性。

qq_74234033的博客 1903

STM32开发环境搭建:CubeMX与HAL库工程实践指南

嵌入式开发中,硬件抽象层(HAL)是连接芯片寄存器与高层应用的关键桥梁,其核心价值在于通过标准化API封装外设初始化、中断管理与数据传输逻辑,显著提升代码可移植性与团队协作效率。HAL库依赖于精确的芯片支持包(MCU Package)和稳定的底层工具链,而STM32CubeMX作为图形化配置引擎,将时钟树、引脚复用、中断优先级等硬件约束转化为结构化C代码骨架,实现软硬件协同设计。该方法广泛应用于工业控制、IoT终端与电机驱动等对可靠性与开发周期敏感的场景。本文聚焦CubeMX安装配置、Java运行时环境适配

weixin_42588877的博客 43

【星汇极客】STM32 HAL库+CubeMX开发之代码重构与模块化实践

本文详细解析STM32 HAL库与CubeMX开发中的代码重构与模块化实践,重点介绍如何利用USER CODE保护区域避免代码覆盖,优化Keil工程管理,并遵循用户代码规范设计高内聚低耦合的模块接口,提升嵌入式开发效率与代码复用性。

gaochao的博客 300

STM32Cube开发全栈解析:HAL/LL库、CubeMX配置与工业级工程实践

嵌入式开发中,硬件抽象层(HAL)与低层驱动(LL)是实现跨芯片复用与实时性能平衡的核心技术概念。其原理在于通过统一API封装外设操作,解耦业务逻辑与寄存器细节,并依托CubeMX完成时钟树求解、引脚资源仲裁与初始化代码生成。该技术体系显著提升开发效率与可维护性,支撑工业控制、物联网终端及汽车电子等对可靠性与可移植性要求严苛的应用场景。本文深入剖析STM32Cube生态的演进本质、HAL与LL协同策略,以及基于KW407A开发板的工程落地关键路径。

weixin_35592186的博客 59

基于STM32CubeMX与Keil的HAL库流水灯高效开发实践

本文详细介绍了基于STM32CubeMX与Keil的HAL库开发流水灯的完整实践流程。从环境搭建、工程配置到代码编写与优化,提供了高效的开发方法和常见问题解决方案,帮助开发者快速掌握STM32单片机LED控制技术。

gitlab7runner的博客 885

STM32 HAL库开发环境搭建:CubeMX+Keil MDK完整实践指南

嵌入式开发中,可复现、可维护的开发环境是项目落地的前提。HAL库作为STM32官方抽象层,通过统一API屏蔽硬件差异,其工程化落地高度依赖图形化配置工具(STM32CubeMX)与专业IDE(如Keil MDK)的协同。理解HAL库初始化机制、CubeMX代码生成原理及MDK编译器链集成逻辑,是规避路径错误、头文件缺失、中断配置失效等高频问题的技术基础。该组合广泛应用于工业控制、智能硬件等需长期演进的嵌入式项目,尤其适合初学者建立从配置→编译→下载→调试的完整闭环能力。

weixin_36064575的博客 143

factory机制-重载(一)

这里写自定义目录标题1.SystemVerilog对重载的支持2.对约束的重载3.factory 机制式的重载4.重载的方式和种类5.factory机制的调试 1.SystemVerilog对重载的支持 SystemVerilog是一种面向对象的语言。面向对象语言都有一大特征:重载。当在父类中定义一个函数/任务时,如果将其设置为virtual类型,那么就可以在子类中重载这个函数或任务。 重载的最大优势是使得一个子类的指针以父类的类型传递时,其表现的行为依然是子类的行为。 2.对约束的重载 在测试一个DUT时

sinat_41774721的博客 2961

STM32CubeMX与HAL库开发指南:从图形化配置到高效编程实践

在嵌入式系统开发中,硬件抽象层(HAL)和图形化配置工具是提升开发效率、增强代码可移植性的关键技术。HAL库通过提供统一的硬件访问接口,屏蔽了底层寄存器差异,其设计遵循状态机模型,确保了驱动程序的可靠性与跨平台兼容性。这种抽象带来的核心价值在于大幅降低多芯片型号间的移植成本,使开发者能聚焦于应用逻辑而非底层硬件细节。在快速原型开发、团队协作及需要跨系列移植的物联网、工业控制等场景中尤为关键。本文以STM32的CubeMX和HAL库为例,深入解析其图形化配置、代码生成机制及三种编程模式(轮询、中断、DMA),

weixin_33908217的博客 374

candence layout快捷键

摁住鼠标左键再框选:选中 摁住鼠标右键再框选:放大 选中之后,滚动鼠标滚轮进行放大缩小。 F:回到全局 shift+V:缩小 键盘的箭头:移动视图 F1:显示帮助文档Candence help F2:保存 点击r,画出矩形时不双击鼠标,点击F3,可以设置尺寸。 Creat-Shape-Path Creat-Wiring-Bus:画多根线。F3设置线宽、间距等。 选中金属后,Shift+G画保护环guard ring。F3可以设置距离金属的间距、保护环的形状。 Path和Rectang

weixin_45861827的博客 2658

【星汇极客】STM32 HAL库+CubeMX开发之高效代码分区实践

本文详细介绍了STM32 HAL库与CubeMX开发中的高效代码分区实践,重点解析Advanced工程结构、用户代码保护区机制及模块化编程技巧。通过实战案例展示如何避免代码覆盖问题,提升代码可维护性和团队协作效率,确保CubeMX重新生成时用户代码安全。

o1p2q3r的博客 211

3.3V-1.8V电平转换测试、以TXS0108E、NPN,NMOS方案为例

上述两个模块都测试过,测试结果相似。信号发生器产生3.3Vpp/10K Hz 方波测试1.8V信号输出结果模块出现顶部失真,原因是因为电平转换芯片需要转换的正电压,转换的方波如果没有设置偏置,会导致信号源的方波电平小于电平转换的所需的触发电平导致波形顶部失真。偏置设置为1.65V输出波形正常。但是模块接上负载后波形又出现顶部失真!!!TXS0108采用弱上拉设计(内部约4 kΩ上拉电阻),其驱动能力类似开漏输出,依赖外部负载完成电平转换。

weixin_56838517的博客 2782

详细教程:如何使用elasticsearch 8.x进行向量搜索

大模型的热度使得向量数据库和embedding也成了ai领域的热门话题,有别于从头开始训练一个大模型或基于基础模型进行微调的方式,embedding检索相关上下文是对大模型进行定制的各种方法中成本最低、技术实现最便捷的方式。从技术实现的角度,

qq_50790981的博客 1万+

STM32 CubeMX高效开发:从HAL库配置到清晰架构的工程实践

在嵌入式系统开发中,硬件抽象层(HAL)通过提供统一的硬件访问接口,显著降低了不同微控制器系列间的移植成本。其核心原理在于封装底层寄存器操作,为开发者构建稳定的驱动基础,这一设计在提升代码健壮性和加速原型开发方面具有重要技术价值。在实际应用场景中,尤其是在STM32生态中,CubeMX工具通过图形化配置自动生成HAL初始化代码,极大简化了硬件初始化流程。然而,如何有效管理这些自动生成的代码、避免项目陷入难以维护的境地,成为嵌入式工程师面临的关键挑战。本文聚焦于**代码架构**与**工程实践**,探讨如何通过

weixin_30681121的博客 449

众灵科技24路舵机控制器二次开发实战(1)-STM32串口指令控制详解

本文详细介绍了如何通过STM32单片机对众灵科技24路舵机控制器进行二次开发,实现串口指令控制。文章从硬件连接、通信协议解析到STM32代码实战,手把手指导开发者打通控制链路,并重点讲解了如何调用预设动作组驱动六足机器人,为后续集成传感器、无线遥控等高级功能奠定基础。

weixin_29188997的博客 486

STM32CubeMX图形化配置工具从入门到实践:点亮LED与HAL库开发指南

在嵌入式系统开发中,硬件抽象层(HAL)和图形化配置工具是提升开发效率、降低入门门槛的关键技术。HAL库通过提供统一的硬件访问接口,屏蔽了不同芯片系列的寄存器差异,使开发者能够专注于应用逻辑而非底层细节。其技术价值在于实现了代码的可移植性和快速原型开发,广泛应用于物联网设备、工业控制和消费电子等领域。STM32CubeMX作为ST官方推出的图形化配置工具,将这一理念进一步具象化。它允许开发者通过可视化界面配置芯片引脚、时钟树和外设参数,并自动生成基于HAL库或LL库的初始化代码框架。这极大地简化了STM32

weixin_30162121的博客 245

【电路设计实战】BUCK降压电路:从原理到PCB布局的降噪与效率优化

本文深入剖析了BUCK降压电路的工作原理,并针对其固有的开关噪声问题,提供了从核心元件选型到PCB布局的全面优化方案。文章重点探讨了电感、电容等关键元件的选型要点,强调了低ESR电容和肖特基二极管的重要性,并详细阐述了如何通过最小化功率回路、保护敏感信号线等PCB布局实战技巧,有效抑制噪声、提升效率与稳定性。

weixin_29304021的博客 232

从零开始学 AUTOSAR:深入浅出 SAE J1939 诊断通信管理器(J1939Dcm)深度完整版

SAE J1939 是美国汽车工程师学会制定的重型车辆 CAN 总线通信标准,覆盖卡车、客车、工程机械、农机、船舶等,是商用车领域的 “通用语言”。基于CAN 2.0B 扩展帧(29 位 ID)(车规主流)PGN(参数组号)+ SPN(可疑参数号)核心标准:J1939-21:数据链路层(CAN 帧格式、地址声明)J1939-71:应用层(普通信号、报文)诊断层(核心!J1939Dcm 依据)J1939-81:网络管理(地址管理、节点检测)

getusushu的博客 118

MCU开发学习记录16* - 看门狗学习与实践(HAL库) - IWDG与WWDG -STM32CubeMX

本文将介绍IWDG、WWDG的相关概念以及STM32CubeMX生成IWDG、WWDGI的配置函数,实现用IWDG、WWDG的监控程序。

努力学习ing 1742

【LAMMPS学习】八、基础知识(4.5)TIP5P水模型

​ 五点 TIP5P 刚性水模型通过添加两个通常无质量的附加位点 L 来扩展three-point TIP3P model,其中放置与氧原子相关的电荷。这些位点 L 位于距氧原子固定距离处,形成从 HOH 平面旋转 90 度的四面角。因此,这些位点在某种程度上近似于氧的孤对,从而改善了水结构,与four-point TIP4P model相比变得更加“四面体”。

荷塘阅色 1421

从零到一:用STM32CubeMX和HAL库重构你的嵌入式开发思维

本文介绍如何使用STM32CubeMX和HAL库重构嵌入式开发思维,从传统寄存器操作转向高层次抽象设计。通过图形化配置和统一API,大幅提升开发效率,降低STM32嵌入式系统入门门槛,适用于物联网设备快速开发。

pandas7gardener的博客 237

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

(学习总结)STM32CubeMX HAL库教程 学习笔记撰写心得

在长时间使用STM32CubeMX进行单片机开发后,我深感这款软件在STM32系列微控制器配置和代码生成方面的强大与便捷。为了检验自己的学习成果,并加深对单片机原理及软件使用的理解,我决定借助AI辅助,将我的学习心得与AI的回答相结合,整理成一份全面而系统的学习笔记。这份笔记旨在记录我在使用STM32CubeMX HAL库过程中的学习内容和关键知识点,不仅作为我个人知识储备的一部分,也希望能为其他学习者提供参考。

Wang2869902214的博客 2138

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

学习HAL库LED点灯

实物链接:在keil中生成.Hex文件,再进行烧录,完成点灯。通过本次实验,我不仅掌握了HAL库的基本用法,还提高了对嵌入式系统开发的理解。HAL库极大地简化了硬件控制的编程过程,使我们能够更专注于应用层的开发。在今后的学习和项目中,我会继续深入探索HAL库的其他功能,提升自己的嵌入式系统开发能力。

LYcxxx_9的博客 913

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 基于F28335的光伏双模逆变器设计
下一篇: CS5532高精度ADC驱动解析
普通网友
博客等级 码龄4年 95粉丝 1459原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值