STM32 HAL库 配置基本步骤

本文分享了从标准库转向STM32 HAL库的学习经验,详细介绍了使用STM32CubeMX配置时钟、GPIO及各类外设的过程,如定时器、ADC、SPI等,强调了HAL库在配置上的便捷性。

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

从51到32,感觉自己真是什么也不会,除了配置还是配置,感觉一直处于低水平,也不知道怎么突破,今天写一写HAL库吧,初学32的时候用的是标准库,现在尝试着用HAL库来写感觉刚开始很痛苦,有的你以为配置好了,其实并没有配置好,有的你以为配置了,其实并没有配置,很尴尬,慢慢的熟悉以后感觉还不错,单片机要学的这些概念,中断,定时器,ADC等等,我们只要找到和标准库的区别,需要加什么,配置什么,其实还是比较方便的。

STM32CubeMX 在使用之前需要安装Java

点击新的工程

选吧想用啥都行 基本覆盖了32的所有了吧

选好以后可视化的就体现出来了,配置下是时钟

然后针对各个引脚的不同需求举个例子PA10 双击

定时器1通道3 ,串口1接收端,输入输出等等想要它干嘛直接选,比如作为定时器1通道3吧

当然32干嘛都需要时钟使能,定时器1的时钟使能,通道3pwm输出,输入输出捕获等模式直接配置,英文不好的可看看具体的都是指什么模式然后直接配置

其他的spi,中断,等等想要用的都是配置完引脚在配置左边的时钟或者是基本的模式

然后配置时钟树

最终配置完应该是这样的

然后进入其他具体的配置页面

DMA模式可以用与直接对数据的存取,对CPU的减负起到巨大作用,也不用打扰CPU

这里其实可用可无

然后配置GPIO

举个普通GPIO的例子

基本上就是这些学过标准库的就是按照之前的来配置就行了

基本的配置完成以后进行文件的生成

这里不得不强调其方便之处,之前标准库用到各种文件的配置,现在也不用配置,基本上都是靠直接生成。很快捷方便

完成以后

点击这里

基本上就是这些步骤 你想用的功能需要的配置就都可以在这里实现

接下需要做的就是使用你的配置,你想实现什么,具体的都直接用就行,只需要添加很少的部分东西,不同的外设加的不同

然后基本就是这样,自学了一个周掌握的不太好,后面总结总结不同的外设具体怎么配置,具体加什么函数

硬石YS-F1Pro 开发板开发手册(HAL ) STM32 入门系列教程 STM32 Cube 是一个全面的软件平台,包括 ST 产品的每个系列, ( 如 STM32Cube_F1 是针对 STM32F1 系列)。平台包括了 STM32Cube 硬件抽象层(HAL) 和一套中间组件(RTOS,USB,FS,TCP 等等)。 STM32Cube 是由 ST 公司原创倡议,旨在减少开发负担、时间和费用,为开 发者提供轻松的开发体验。 STMCube 覆盖了 STM32 全系列。 其中 STM32CubeMX 是上位机配置软件,可以根据使用者的选择生成底层初始化代码。 硬件抽象层 (HAL), 便是 CubeMX 配套的HAL 屏蔽了复杂的硬件寄存器操作, 统一了 外设的接口函数( 包含 USB/以太网等复杂外设),代码结构强壮, 已通过 CodeSonar 认证。 同时, HAL 还集成了广泛的例程,可以运行在不同意法半导体 的开发板上。 YS-F1Pro 开发板是硬石团队研发的针对 STM32F103 芯片的综合性实验测试 平台,开发板几乎囊括了芯片所有的外设,这对新手入门是非常好的学习平台, 开发板几乎所有芯片采购来着嘉立创平台,芯片质量有保证, 这与同行还是有很 大区别的。 YS-F1Pro 开发板是一款性价比极高的 STM32 开发板, 接口齐全,我们 特意添加了电机控制部分接口,包括舵机、步进电机、有刷电机、无刷电机控制 接口。 本文档的一个最重要目标是让完全小白都可以轻松愉快的入门学习STM32, 最终掌握 STM32基本编程方法,学会将 STM32CubeMX 应用到自己 DIY 应用 中去
### 使用HAL配置GPIO引脚为输出模式 在嵌入式系统开发中,通过STM32 HAL可以方便地配置GPIO引脚的工作模式。为了将某个引脚设置为输出模式,通常的操作流程如下: #### 配置环境准备 确保已经安装并设置了STM32CubeMX工具以及相应的IDE(如Keil MDK或TrueSTUDIO)。利用STM32CubeMX初始化项目时,可以通过图形界面直观地选择要使用的外设和引脚。 #### 图形化配置GPIO属性 借助STM32CubeMX软件,在GUI界面上指定目标引脚的功能为通用推挽输出或者开漏输出等不同类型的输出方式[^1]。完成这些基本设定之后,该工具会自动生成必要的初始化代码片段供后续编程调用。 #### 编写C语言程序实现具体操作 基于由STM32CubeMX生成的基础框架文件,可以在`main.c`或其他适当位置加入下面所示的关键函数来控制特定的GPIO端口及其对应的位状态: ```c // 假定我们要把PA0配置成推挽输出模式,并拉高电平 __IO uint8_t state; // 初始化部分可放在主循环之前执行一次即可 void GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* PA0配置 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; // 不带上下拉电阻 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 设置速度等级 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 应用上述配置到硬件上 } int main(void){ // 系统初始化... GPIO_Init(); while (1) { state ^= 1; // 切换LED灯的状态 if(state){ // 如果state=1,则点亮LED HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, SET); }else{ // 若state=0,则熄灭LED HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, RESET); } HAL_Delay(500); // 添加延时以便观察效果 } } ``` 这段代码展示了如何定义一个简单的应用程序逻辑,用于周期性改变连接至微控制器PA0管脚上的外部设备(比如LED指示灯)的工作状况。这里采用了高低电平切换的方法实现了闪烁的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值