[STM32H7] 探索ST STM32H743 MCU的高性能与开发实践

[复制链接]
3852|9
 楼主| Wordsworth 发表于 2024-10-16 07:51 | 显示全部楼层 |阅读模式
在嵌入式开发领域,STMicroelectronics(意法半导体)的STM32系列MCU以其丰富的外设、强大的性能和开发友好性广受欢迎。本文将详细介绍STM32H743这款高性能MCU的特点,并通过一个GPIO控制LED灯闪烁的代码示例展示如何快速上手,帮助开发者更好地理解和使用该芯片。

一、STM32H743的核心特点
  • 强大的性能
    STM32H743基于ARM Cortex-M7内核,主频高达480 MHz,支持DSP指令和浮点运算(FPU),适合图像处理、音频处理等高运算需求的应用。
  • 大容量存储

    • 内置1 MB的SRAM2 MB的Flash存储,支持大数据量处理。
    • 支持SDRAMQSPI Flash扩展,满足更多存储需求。
  • 丰富的外设

    • 多个USART、I2C、SPI、CAN等通信接口,满足复杂系统的通信要求。
    • 支持USB OTG、以太网、TFT LCD接口等高阶外设。
  • 安全与可靠性
    STM32H743集成了CRC校验、Watchdog、硬件随机数生成器等模块,确保系统长期稳定运行。


二、开发环境搭建
  • IDE选择:STM32H743支持STM32CubeIDE、Keil、IAR等主流开发环境。
  • 固件库:ST官方提供了HAL库LL库,开发者可以根据需求选择使用。
  • 烧录器:使用ST-Link V2进行程序烧录和调试,支持SWD和JTAG接口。

三、GPIO控制LED闪烁的代码示例以下代码展示如何使用STM32H743的GPIO控制板载LED灯的闪烁。
  1. #include "stm32h7xx.h"

  2. void SystemClock_Config(void);
  3. void GPIO_Init(void);

  4. int main(void) {
  5.     HAL_Init();              // 初始化HAL库
  6.     SystemClock_Config();     // 配置系统时钟
  7.     GPIO_Init();              // 初始化GPIO

  8.     while (1) {
  9.         HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);  // 切换LED状态
  10.         HAL_Delay(500);  // 延时500毫秒
  11.     }
  12. }

  13. void GPIO_Init(void) {
  14.     __HAL_RCC_GPIOB_CLK_ENABLE();  // 使能GPIOB时钟

  15.     GPIO_InitTypeDef GPIO_InitStruct = {0};
  16.     GPIO_InitStruct.Pin = GPIO_PIN_0;          // 使用PB0引脚
  17.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
  18.     GPIO_InitStruct.Pull = GPIO_NOPULL;         // 无上下拉
  19.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速

  20.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);  // 初始化GPIOB0
  21. }

  22. void SystemClock_Config(void) {
  23.     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  24.     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  25.     // 配置时钟为HSE模式
  26.     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  27.     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  28.     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  29.     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  30.     RCC_OscInitStruct.PLL.PLLM = 1;
  31.     RCC_OscInitStruct.PLL.PLLN = 480;
  32.     RCC_OscInitStruct.PLL.PLLP = 2;
  33.     RCC_OscInitStruct.PLL.PLLQ = 2;
  34.     RCC_OscInitStruct.PLL.PLLR = 2;
  35.     HAL_RCC_OscConfig(&RCC_OscInitStruct);

  36.     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK |
  37.                                   RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  38.     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  39.     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  40.     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  41.     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  42.     HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
  43. }
四、代码解析
  • 系统初始化

    • 通过HAL_Init()初始化HAL库,为系统运行做准备。
    • SystemClock_Config()函数设置主频为480 MHz,确保MCU在高性能状态下运行。
  • GPIO配置

    • 使用GPIOB的PB0引脚控制LED,设置为推挽输出模式。
    • 调用HAL_GPIO_TogglePin()实现LED灯状态切换。
  • 延时与循环

    • 在main()函数的主循环中,每隔500毫秒切换一次LED状态,使灯闪烁。

五、总结STM32H743凭借其超高的运算能力和丰富的外设,在工业控制、图像处理、通信系统等领域有广泛应用。通过本篇文章的代码示例,开发者可以快速掌握GPIO的基本使用方法,并为后续的复杂开发奠定基础。STM32H743是一款非常值得深入研究和探索的芯片,希望本文能为你在实际项目中的应用带来帮助。

公羊子丹 发表于 2024-10-16 07:52 来自手机 | 显示全部楼层
哇,我终于找到STM32H743的基础教程了,这篇文章帮大忙了。
周半梅 发表于 2024-10-16 07:52 来自手机 | 显示全部楼层
感觉这颗芯片性能太强了,480 MHz的主频太香了!
帛灿灿 发表于 2024-10-16 07:52 来自手机 | 显示全部楼层
正好在做一个嵌入式项目,这个LED控制的例子超实用。
童雨竹 发表于 2024-10-16 07:52 来自手机 | 显示全部楼层
有没有人试过用H743跑FreeRTOS?我打算下一步搞一下这个。
万图 发表于 2024-10-16 07:53 来自手机 | 显示全部楼层
这个时钟配置部分解释得好清楚,新手也能看懂,棒棒哒!
Bblythe 发表于 2024-10-16 07:53 来自手机 | 显示全部楼层
STM32的HAL库用起来确实方便,学习成本低,很推荐。
Pulitzer 发表于 2024-10-16 07:53 来自手机 | 显示全部楼层
我之前还纠结是不是上H743,看完这篇文章觉得非它不可了。
Uriah 发表于 2024-10-16 07:54 来自手机 | 显示全部楼层
有没有朋友尝试过H743的以太网功能?想了解一下开发难度。
Clyde011 发表于 2024-10-16 07:54 来自手机 | 显示全部楼层
能把这么复杂的芯片讲得这么清楚,作者一定是大牛。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

164

主题

6152

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部