stm32cubeMX使用HAL库点亮LED流水灯


STM32CubeMX生成代码使用HAL库点亮流水灯

一、安装STM32CubeMX

1、STM32CubeMX 简介

(1) STM32 是Cortex ARM内核架构的芯片,中文名称为意法半导体,是目前市面上应用自广泛的MCU芯片。STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,用于取代前期的函数库,图形化界面向导更容易新手上手,以及初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。

(2)目前开发者初始化STM32芯片的配置时,很多人选择STM32CubeMX直接生成,后期的应用层代码仍然使用KEIL MDK编程软件进行开发。

在这里插入图片描述

2、安装STM32CubeMX必须具备的条件

(1)JRE(Java Runtime Environment):JAVA运行环境。

(2)STM32CubeMX软件:生成初始化代码的地方。

(3)HAL库 PACK包:F0、F1、F3、H7等Cortex内核,都需要对应的PACK包安装。

3、STM32CubeMX安装步骤

3.1 安装JAVA JRE

64位JRE官网下载链接: https://www.java.com/en/download/manual.jsp

3.2 安装STM32CubeMX

(1)官网下载安装包:www.st.com/stm32cubemx,选择“Get Software”。

在这里插入图片描述

(2)这里我选择6.9.1版本的下载(windows下)
在这里插入图片描述

下载安装包:
在这里插入图片描述

(3)打开STM32CubeMX-5.3.0安装包,点击“Next”。
在这里插入图片描述
(4)同意,next
在这里插入图片描述

(5)勾选,next
在这里插入图片描述

(6)选择要安装的目录,点击“Next”。

在这里插入图片描述

(7)弹窗 Warning,点Yes即可。

备注:这句话是安装本软件可能会与文件夹之前文件冲突,导致文件夹之前文件丢失 是否继续 ?点Yes继续即可。
在这里插入图片描述

(8)默认设置,点击“Next”即可
在这里插入图片描述

(9)等待安装完成,点击“Next”。

在这里插入图片描述

(10)安装完成后,点击Done,即可完成安装。
在这里插入图片描述

二、安装HAL库

STM32 HAL固件库是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,为更方便的实现跨STM32产品的最大可移植性。HAL库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。
和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。
并且从16年开始,ST公司就逐渐停止了对标准固件库的更新,转而倾向于HAL固件库和 Low-layer底层库的更新,停止标准库更新,也就表示了以后使用STM32CubeMX配置HAL/LL库是主流配置环境;

(1)打开桌面快捷方式STM32CubeMX 软件,点击右上角“Help”,选择“Manage embedded saftware packages”
在这里插入图片描述

(2)如下所示的选择型界面,勾选所需的HAL库,我使用的开发板是STM32F103C8T6,选择的则为STM32F1 —>STM32Cube MCU Package for STM32F1 Series(Size:161.4MB) 1.8.5版本。
在这里插入图片描述

提示我们需要注册登录,那么我们是新用户,就注册一下
在这里插入图片描述

填写需要的信息注册即可:
在这里插入图片描述
最后提示邮件会发至邮箱,等候一会即可
在这里插入图片描述

重新账号登陆下载,下载后显示小绿框,点击close即可
在这里插入图片描述

三、利用工具实现LED的点亮

1、新建项目

(1)回到STMCubeMX的主界面,创建新项目:
在这里插入图片描述

(2)在part name里选择自己的芯片,点击信息栏中的具体芯片信息选中,点击start project:

在这里插入图片描述

(3)点击system core,进入SYS,在debug下选择serial wire:
在这里插入图片描述

(4)配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里:
在这里插入图片描述

接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上:
在这里插入图片描述

(5)将hse那里设为Crystal/Ceramic Resonator:
在这里插入图片描述

(6)接下来就是点击相应的引脚设置输出寄存器了,就是output那一项,一共选了三个,是PA4,PB14,PC15:
在这里插入图片描述
在这里插入图片描述

(7)点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM:
在这里插入图片描述

(8)进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5了:
在这里插入图片描述
在这里插入图片描述

2、keil仿真调试

打开main.c文件,滚轮滑到主函数那一部分:
在这里插入图片描述

将下面代码放入主函数中(替代里面的内容)

	SystemClock_Config();//系统时钟初始化
  MX_GPIO_Init();//gpio初始化
  while (1)
  {		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);//PB14熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);//PB14亮灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
		HAL_Delay(1000);//延时1s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);//PB14熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
		HAL_Delay(1000);//延时1s
	}


(3)电路连接
根据设计的程序连接电路:
STM32和STILINK的对应关系:

STM32STLINK
3.3V3.3V
SWIOSWDIO
SWCLKSWCLK
GNDGND

总电路:
红——C9
绿——A5
黄——B14

安装完后的样图:
在这里插入图片描述

(4)烧录运行
串口烧录要断电之后把boot0置0才能正常运行:

流水灯(HEL库)

(5)观察GPIO端口的输出波形
(1)Target界面中,选择跟正确的晶振大小,我使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。
在这里插入图片描述

(2)Debug页的设置:

在这里插入图片描述

(3)点击Debug,进入调试界面:
在这里插入图片描述

(4)选择逻辑分析仪:
①点击Setup Logic Analyzer
②添加要观察的引脚

在这里插入图片描述

(8)运行程序,观察波形:
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1s左右。
在这里插入图片描述


总结

STM32中断原理和HAL库函数开发方法总结:

1、STM32中断原理:

STM32内置NVIC模块,管理外设中断请求

每个外设都对应一个中断线

可以通过NVIC配置中断优先级和使能某个中断线

2、HAL库函数开发方法:

使用stm32CubeMX生成代码框架和配置文件

配置需要使用的外设时钟、GPIO引脚等

HAL库提供外设初始化、配置和操作函数

中断服务函数使用HAL_GPIO_EXTI_IRQHandler()处理

主函数初始化外设和开启中断

3、三色LED周期闪烁实现:

配置PA8/9/10为输出模式控制三色LED

在主函数初始化GPIO和定时器

使用HAL_TIM_PeriodElapsedCallback()作为定时中断

在中断服务函数中周期切换三色LED状态

开启定时器中断并进入主循环

总之,通过stm32CubeMX生成配置,利用HAL库函数初始化外设并编写中断服务函数,可以方便高效地实现STM32定时器和GPIO外设应用。本例实现了三色LED周期闪烁,体现了STM32中断和HAL库函数开发流程。

参考

STM32 CubeMx安装教程

stm32cubeMX使用HAL库点亮LED流水灯

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是使用STM32CubeMX点亮LED流水灯的步骤: 1. 打开STM32CubeMX软件,创建一个新的工程。 2. 在"Part Number"中选择STM32F103C8T6。 3. 在"Pinout & Configuration"选项卡中,选择一个可用的GPIO引脚作为LED的控制引脚。例如,选择PC13作为控制引脚。 4. 在"Configuration"选项卡中,将PC13配置为输出模式。 5. 在"Project"选项卡中,选择生成代码的IDE和工程类型。例如,选择MDK-ARM作为IDE,选择STM32Cube HAL作为库。 6. 点击"Project"选项卡下方的"Generate Code"按钮,生成初始化代码工程。 7. 打开生成的工程,在主函数中添加LED流水灯的代码。 以下是一个示例代码,用于点亮LED流水灯: ```c #include "stm32f1xx_hal.h" void SystemClock_Config(void); void GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); GPIO_Init(); while (1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(500); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); } void GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); } ``` 请注意,以上代码仅为示例,具体的代码实现可能会因为使用的库和工具而有所不同。请根据实际情况进行相应的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菲菲QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值