STM32H743点亮LED灯

本文介绍如何使用MDK-Keil配置STM32H743的开发环境,并通过HAL库实现LED灯的循环点亮。主要内容包括安装调试软件、配置开发环境、编写控制代码等。

①按网上教程下载并安装好MDK-Keil,全程只需这一个调试软件;

②按网上教程配置好STM32H743的开发环境;

③准备好开发板STM32H743,准备好下载器ST-link,并将其连接好,配置好驱动;

④从官网下载好HAL标准库,新建工程,将所有的HAL库文件添加进工程,注意要添加头文件路径;

⑤编写main.c文件,点击编译、下载,STM32H743即可循环点亮LED灯。
通过ST-link下载器,将代码下载进STM32H743的Flash中

附上main.c代码:
#include “main.h”
#include “gpio.h”

void SystemClock_Config(void);

int main(void)
{
HAL_Init(); //重置所有外围设备,初始化闪存接口和Systick
SystemClock_Config(); //配置系统时钟
MX_GPIO_Init(); //初始化所有配置的外围设备
while (1)
{
/* 操作寄存器实现 */
#if 0
GPIOB->ODR |= 0x0040;
HAL_Delay(500);
GPIOB->ODR &= ~0x0040;
HAL_Delay(500);
#endif

/* 调用库函数实现 */
#if 1
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET); //LED4 OFF
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); //LED1 ON
HAL_Delay(500);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); //LED1 OFF
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); //LED2 ON
HAL_Delay(500);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); //LED2 OFF
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET); //LED3 ON
HAL_Delay(500);
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); //LED3 OFF
HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET); //LED4 ON
HAL_Delay(500);
#endif
}
}

void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
MODIFY_REG(PWR->CR3, PWR_CR3_SCUEN, 0); //Supply configuration update enable
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); //Configure the main internal regulator output voltage

while ((PWR->D3CR & (PWR_D3CR_VOSRDY)) != PWR_D3CR_VOSRDY)
{

}

/* 初始化CPU、AHB和APB总线时钟 */

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.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = 400;
RCC_OscInitStruct.PLL.PLLP = 2;
RCC_OscInitStruct.PLL.PLLQ = 2;
RCC_OscInitStruct.PLL.PLLR = 2;
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_1;
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
RCC_OscInitStruct.PLL.PLLFRACN = 0;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
|RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}

void Error_Handler(void)
{

}

<think>好的,我需要帮助用户找到STM32H743ZIT6微控制器点亮LED的示例代码。首先,我得确认用户的需求,他们可能刚接触这个微控制器,需要基础的代码指导。用户提到的引用中有几个例子,比如引用[1]和[3]是关于STM32F4和HAL库的代码,虽然型号不同,但HAL库的使用方法类似。这可能是一个线索,说明用户可能在使用HAL库。STM32H743ZIT6属于H7系列,和F4系列在GPIO配置上可能有差异,比如时钟使能部分,需要确认正确的GPIO端口和引脚。 接下来,我需要确定LED的连接引脚。通常开发板会有用户LED,比如在STM32H743ZI开发板上,LED可能连接到某个GPIO,比如PG13或者PB0。用户需要知道具体引脚,所以代码中应该包含配置该引脚的步骤,比如启用时钟,设置推挽输出模式。然后,代码结构方面,使用HAL库的话,需要初始化系统时钟、GPIO,然后在主循环中切换引脚状态并添加延时。引用[3]中的主函数结构是一个参考,包括HAL_Init、SystemClock_Config、MX_GPIO_Init等初始化步骤。还需要考虑喂狗的问题,如果用户启用了独立看门狗(IWDG),但示例代码可能不需要这个,除非特别说明。所以暂时可以忽略喂狗的部分,保持代码简洁。 最后,确保代码的准确性和可移植性,比如正确的GPIO端口和引脚定义,以及延时函数的正确使用。可能还需要提醒用户根据实际硬件调整引脚配置,并检查时钟配置是否正确。总结步骤:初始化HAL库和系统时钟,配置GPIO引脚为输出,在主循环中切换引脚状态并延时。需要提供具体的代码示例,并解释关键部分,比如GPIO配置和主循环逻辑。同时,生成相关问题,帮助用户深入理解,比如性能优化、不同实现方法比较等。</think>### STM32H743ZIT6点亮LED示例代码 #### 硬件配置 假设LED连接在**PB0**引脚(需根据实际硬件修改),电路为低电平有效(即输出0时点亮LED)。 #### 代码实现(基于HAL库) ```c #include "main.h" // 定义LED引脚 #define LED_PIN GPIO_PIN_0 #define LED_PORT GPIOB // 系统时钟配置函数(由CubeMX生成) void SystemClock_Config(void); // GPIO初始化函数 void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟[^1] GPIO_InitStruct.Pin = LED_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct); } int main(void) { HAL_Init(); // 初始化HAL库 SystemClock_Config(); // 配置系统时钟 MX_GPIO_Init(); // 初始化GPIO while (1) { HAL_GPIO_TogglePin(LED_PORT, LED_PIN); // 切换LED状态[^3] HAL_Delay(500); // 延时500ms } } ``` #### 关键步骤说明 1. **时钟使能**:H7系列需通过`__HAL_RCC_GPIOx_CLK_ENABLE()`显式启用GPIO时钟[^1] 2. **输出模式**:`GPIO_MODE_OUTPUT_PP`表示推挽输出模式 3. **延时控制**:`HAL_Delay()`依赖SysTick定时器,需确保系统时钟正确配置 #### 硬件适配建议 - 若LED连接其他引脚(如PG13),需修改`LED_PIN`和`LED_PORT` - 高电平有效电路需将初始状态设为`HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET)`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值