STM32 HAL库学习(一) STM32CubeMX和TRUEStudio的使用

本文介绍了STM32 HAL库的基本概念与框架,详细解析了HALDriver文件的作用及固件库的配置流程。通过STM32CubeMX、TRUEStudio和STM32CubeProgrammer三大工具,快速实现了LED灯控制和串口数据发送,适合初学者入门。

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

最近开始学习STM32的HAL库,之前有用过std库函数做STM32开发的基础,因此学习HAL库会更容易上手一些,但对于新的编程、下载工具以及HAL库仍有许多不清晰的地方。经过初步的实验实现点亮LED灯和串口的发送数据之后,对所用到的几个工具以及HAL库进行一个总结。

HAL —— 硬件抽象层(Hardware Abstraction Layer),是STM32最新推出的抽象层嵌入式软件,支持中间件组件(如RTOS,USB,TCP / IP和图形等),便于用户实现移植。

固件库框架:

 HAL Driver文件介绍:

stm32f0xx_hal.h/stm32f0xx_hal.c:HAL模块驱动文件,初始化HAL配置、配置时基为1ms

        —— HAL_Init(void),配置Flash预取、时基源(systick)、NVIC和底层配置

        —— HAL_DeInit(void),复位所有外设(APB1、APB2和AHB)

        —— 几个weak函数 实现延时   HAL_IncTick、HAL_GetTick、HAL_Delay

stm32f0xx_hal_def.h:定义了HAL库所需的一些公用的结构体、枚举变量等

stm32f0xx_hal_conf.h:define了所需要用到的外设使能,例如如果用到ADC,就取消注释“#define                                  HAL_ADC_MODULE_ENABLED”,则编译时会将与ADC定义有关的头文件和源文件加载进来

stm32f0xx_hal_msp.c:实现msp层的init和deinit

 

整个开发过程使用三个工具:STM32CubeMX、TRUEStudio和STM32CubeProgrammer

首先使用STM32CubeMX对选择需要开发的芯片或者开发板,对应的芯片或开发板的管脚信息就会显示出来

可以对管脚进行编辑,选择配置模式 ,比如让PC9配置成输出,以及允许UART1的功能,之后就是生成代码,在project/setting里面设置工程名称、使用的IDE(我这里是TRUEStudio,也可以选择MDK等其他IDE),设置需要加载的库(Code Generator)等,点击生成代码即可生成含HAL库的工程,用TRUEStudio打开进行编辑。

 由于在STM32CubeMX中我们已经编辑了设置,因此生成的代码中已经完成了我们所需外设的初始化工作,具体都在生成的外设.c源文件(例如gpio.c、uart.c)中的init函数(例如MX_GPIO_Init(),MX_USART1_UART_Init())中实现,我们要做的只需要在相应的USER CODE区域中添加自己的代码(其实就是调用HAL外设功能实现函数),如下:

 while (1)
  {

  /* USER CODE END WHILE */
	 HAL_Delay(1000);
	 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);
	 HAL_UART_Transmit(&huart1,pData,12,1000);
	 HAL_Delay(1000);
	 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);
  /* USER CODE BEGIN 3 */

  }

点击编译后会生成.hex文件,TRUEStudio可以调试程序

打开STM32Cube Programmer,连接STLink(STM32F072开发板有板上STLINK,直接连USB就可以进行STLINK调试) ,加载.hex文件烧录到开发板中即可。

 

### 使用STM32CubeMX配置HAL进行项目开发 #### 选择目标微控制器 启动STM32CubeMX并创建新项目,在弹出的选择窗口中挑选适合项目的STM32型号。这步骤至关重要,因为不同的MCU有不同的特性资源[^4]。 #### 初始化设置 旦选择了具体的MCU型号,软件会展示该芯片的所有外设及其默认状态。通过图形化界面调整这些外设的工作模式参数,如时钟频率、工作电压等,并解决可能出现的IO端口冲突问题[^1]。 #### GPIO配置实例 以LED控制为例,假设使用的是PB8作为输出引脚来驱动LED。可以在Pinout & Configuration标签页找到对应的GPIO引脚,将其功能设定为推挽输出(Push-Pull Output),并且可以指定初始电平高低[^5]。 ```cpp // 设置PB8为LED输出引脚的例子 __HAL_RCC_GPIOB_CLK_ENABLE(); // 启用GPIOB时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式 GPIO_InitStruct.Pull = GPIO_NOPULL; // 不上拉不下拉 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 输出速度低 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); ``` #### 中断配置说明 当涉及到外部中断的应用场景时,同样可以通过STM32CubeMX轻松完成配置。只需进入NVIC (Nested Vectored Interrupt Controller)选项卡勾选所需的中断源即可激活相应的中断服务函数(ISR),之后再编写ISR的具体处理逻辑。 #### IIC接口配置指南 对于像IIC这样的串行通信协议,除了基本的硬件连接之外还需要正确初始化相关的寄存器。利用STM32CubeMX自动生成的基础代码框架,只需要关注于调用`HAL_I2C_Master_Transmit()`或类似的API实现数据传输操作[^3]。 #### 工程生成与编译环境准备 最后个重要环节就是让STM32CubeMX为我们准备好整个工程项目结构以及必要的链接脚本等内容。支持多种主流IDE工具链,包括但不限于Keil MDK、SW4STM32(IAR)TrueSTUDIO(Atollic)等等。点击“Project->Generate Code”,按照向导指示保存路径后即完成了全部准备工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值