news 2026/9/4 6:53:18

STM32HAL库(Free RTOS) 01 实现第一颗灯泡的点亮

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32HAL库(Free RTOS) 01 实现第一颗灯泡的点亮

本次学习与开发基于CubeMX与HAL库,故我们可以一起学习到CucMX的使用,现在让我们开始点亮灯泡。
一、CubMX的基础配置

首先是SYS的配置,一定要选Serial Wire串行线调试,否则烧录一次之后STM32开发板会锁住,我就犯过这个错误。
然后是时间基准是系统滴答默认即可,但如果是用FreeRTOS系统就不能用这个SysTick,因为FreeRTOS也需要SysTick作为时间基准,最好用TIM4高级定时器作为时间基准。

然后是HSE高速外部时钟打开为外部晶振,这样子精度高一点。

HCLK设置为72MHZ,然后按两下回车自动帮你配置好时钟设置。

给工程取名字和文件的存放位置,然后是IDE选择为MKD-ARM,就是用的Keil,然后选择版本

最后推荐为每个外设单独设置文件,这样子可以直观的看到每个文件的参数。
以上就是创建工程的流程
二、点亮LED

点一下PA1,将其设置为output模式,CubMX会自动将其配置为输出模式,当然可以选择上下拉和输出模式。然后就可以生成代码。

三、代码块

/* USER CODE BEGIN Header *//** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2026 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** *//* USER CODE END Header *//* Includes ------------------------------------------------------------------*/#include"main.h"#include"gpio.h"/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/voidSystemClock_Config(void);/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 *//* USER CODE END 0 *//** * @brief The application entry point. * @retval int */intmain(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);HAL_Delay(500);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}/** * @brief System Clock Configuration * @retval None */voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct={0};RCC_ClkInitTypeDef RCC_ClkInitStruct={0};/** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState=RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks */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;if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2)!=HAL_OK){Error_Handler();}}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//** * @brief This function is executed in case of error occurrence. * @retval None */voidError_Handler(void){/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while(1){}/* USER CODE END Error_Handler_Debug */}#ifdefUSE_FULL_ASSERT/** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */voidassert_failed(uint8_t*file,uint32_tline){/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */}#endif/* USE_FULL_ASSERT */

四、总结
学习了几个常见的HAL库函数
HAL_GPIO_WritePin:指定电平为高电平或者低电平
HAL_Delay:延时函数,单位是毫秒

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 17:34:11

从零搭建Arduino无线机械臂:硬件选型、代码解析与自动化实现

1. 先搞清楚这个项目到底能做什么,以及你需要准备什么 看到“复刻Arduino无线控制机械臂”这个标题,很多人第一反应可能是“听起来很酷,但会不会很难?”。这个开源项目的核心价值,就是让你能用一个相对清晰的路径&…

作者头像 李华
网站建设 2026/9/4 8:41:32

真实场景灭火器检测数据集:1618张图像VOC转YOLO训练全流程

简介:面向消防设备识别、智能巡检与安全监控场景的开发者,这份真实拍摄的灭火器图像数据集是训练目标检测模型的开箱即用素材。1618张图片覆盖不同角度、光照、背景及摆放状态,每张均配有标准VOC格式的XML标注,包含边界框与类别信…

作者头像 李华
网站建设 2026/9/2 13:50:15

MATLAB纹理特征提取实战:GLCM、LBP、Gabor等六种方法详解

简介:本资源是一套面向图像处理初学者与科研人员的MATLAB纹理特征提取工具集,聚焦于计算机视觉中的纹理分析核心任务,涵盖GLCM、GLDS、LBP、GMRF、FD和Gabor六类主流方法,适用于遥感图像分类、医学影像识别、工业缺陷检测等实际场…

作者头像 李华
网站建设 2026/9/3 19:42:03

Cesium全球动态光照体积云渲染:Ray Marching实战与性能优化

简介:一套基于体渲染的Cesium全球体积云实现代码,面向需要在大范围三维地球场景中模拟连续云层效果的前端GIS、WebGL开发者。方案结合shadertoy与three.js社区思路,使用Perlin噪声与Worley噪声叠加生成云形,并通过分形布朗运动增强…

作者头像 李华
网站建设 2026/9/4 8:20:36

基于微信小程序的青少年街舞培训中心系统设计与实现源码+文档

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/4 7:14:11

AI编程时代:用确定性工具链约束智能体,守护代码质量与架构

如果你是一位经验丰富的开发者,最近可能被各种 AI 编程助手(如 Cursor、GitHub Copilot)的“魔法”所震撼。它们能生成代码、修复 Bug,甚至重构整个模块,效率的提升肉眼可见。但兴奋之余,你是否也隐隐感到一…

作者头像 李华