STM32CubeMX使用--第一讲、点亮led

本文介绍了如何使用STM32CubeMX 4.21.0创建基于STM32F407ZG的工程,配置时钟源、GPIO引脚,并在keil MDK 4.74环境下编译、下载代码,实现LED的交替闪烁。通过这个过程,读者将学习到STM32的基础配置和GPIO端口的设置。

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

STM32CubeMX这款软件ST官方已经推广了有第一段时间了,这款软件可以在图形化界面下直接配置各种片上外设,生成工程。对配置MCU的资源有很大的帮助。

鄙人也不可免俗,从点亮LED灯作为第一讲,给大家演示一下如何使用这款软件。

该讲作为基础,需要了解的知识:
--配置时钟
--配置引脚
--生成工程代码

演示环境
芯片资源配置软件:STM32CubeMX 4.21.0(各版本不能完全通用)
编译环境:keil mdk 4.74
主控芯片:stm32f407ZG
硬件原理图:正点原子 探索者 LED0 PF9 LED1 PF10 外部晶振8M

1、新建工程
新建工程

2、选择时钟源
选择时钟源

3、配置引脚

### 使用STM32CubeMX配置STM32F407以实现LED灯的点亮 #### 准备工作 安装并打开STM32CubeMX软件,准备好所需的硬件设备以及连接线。 #### 创建新项目 启动STM32CubeMX,在初始界面点击“New Project”,选择目标单片机型号为STM32F407VET6。确认所选MCU无误后进入下一步设置页面[^1]。 #### 配置时钟树与时基 在主窗口左侧栏找到“Clock Configuration”选项卡调整系统时钟频率至所需值;接着切换到“RCC”标签页开启HSE外部高速振荡器作为PLL输入源,并适当调节倍频系数使SYSCLK达到期望的工作频率。随后前往“Project Manager -> Middlewares & RTOS”勾选FreeRTOS中间件(如果需要),再回到“Pinout&Configuration”视图准备进行外设初始化操作。 #### GPIO端口分配与参数设定 针对要控制的LED指示灯所在引脚执行如下动作:双击对应编号的I/O管脚图标弹出属性编辑框,将Mode模式更改为“GPIO_Output”,Output type保持默认推挽输出形式不变,“Pull-up/Pull-down”项依据实际电路设计决定是否启用上拉/下拉电阻功能。“Initial I/O level”字段指定开机瞬间该针脚电平状态(高or低)。最后记得保存所做的更改以便稍后生成驱动文件。 #### 中断及DMA资源规划 对于此次仅需简单开关LED的任务而言无需额外配置中断服务函数或直接存储访问控制器(DMA),故此环节可跳过处理。 #### 代码自动生成流程 依次点击菜单栏中的“Project->Generate Code”按钮触发IDE工程模板创建过程。待进度条走完之后会自动调用第三方集成开发环境(如Keil uVision、SW4STM32等)加载刚刚构建好的空白框架供开发者继续完善业务逻辑部分。此时可以参照官方手册编写具体的应用层程序片段来达成预期效果——即周期性改变选定IO口的状态从而让相连的小灯泡按照一定规律明灭交替显示出来。 ```c /* USER CODE BEGIN Includes */ #include "main.h" /* USER CODE END Includes */ /* Private variables --*/ TIM_HandleTypeDef htim2; /* USER CODE BEGIN PV */ #define LED_PIN GPIO_PIN_13 #define LED_GPIO_PORT GPIOD /* USER CODE END PV */ /* Private function prototypes -----------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM2_Init(void); int main(void){ /* Reset of all peripherals, Initializes the Flash interface and Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM2_Init(); while (1){ HAL_Delay(500); // Delay for 500ms HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN); // Toggle LED state } } /** * @brief This function is executed in case of error occurrence. */ void Error_Handler(void){ __disable_irq(); // Disable global interrupts while (1){} // Infinite loop to halt execution when an unrecoverable fault occurs } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值