[STM32H7] STM32H743 的强大功能:从基本配置到高级应用

[复制链接]
 楼主| Wordsworth 发表于 2024-12-8 07:49 | 显示全部楼层 |阅读模式
在嵌入式开发中,ST 的 STM32 系列微控制器(MCU)以其高性能和丰富的外设功能赢得了广泛的青睐。今天,我们将以 STM32H743 为例,探讨其基本配置和部分高级功能的实现,帮助大家快速上手这款强大的 MCU。

STM32H743 的核心特点STM32H743 基于 ARM Cortex-M7 核心,运行频率高达 480 MHz,拥有 2 MB Flash 和 1 MB RAM,同时支持高达 35 个通信接口(包括 I2C、SPI、UART 和 CAN FD)。此外,它支持图形处理、音频接口和双模 CAN 等高级功能,特别适合需要高计算能力的嵌入式应用。

项目:通过 UART 与 PC 通信为了展示 STM32H743 的强大,我们以 UART 通信为例,编写一个简单的程序,将 MCU 接收的数据通过串口返回给 PC。

硬件准备
  • STM32H743 开发板
  • USB 转 UART 模块
  • PC 和串口调试软件(如 Tera Term 或 Serial Monitor)

软件配置我们将使用 STM32CubeMX 配置 MCU 的时钟和外设,并通过 HAL 库编写代码。

核心代码以下代码实现了 UART 的初始化和数据收发:
  1. #include "main.h"
  2. #include "usart.h"
  3. #include "gpio.h"

  4. void SystemClock_Config(void);

  5. int main(void) {
  6.     HAL_Init();
  7.     SystemClock_Config();
  8.     MX_GPIO_Init();
  9.     MX_USART3_UART_Init();
  10.    
  11.     uint8_t received_data[10];
  12.    
  13.     while (1) {
  14.         // 接收数据
  15.         if (HAL_UART_Receive(&huart3, received_data, sizeof(received_data), HAL_MAX_DELAY) == HAL_OK) {
  16.             // 将接收到的数据回传
  17.             HAL_UART_Transmit(&huart3, received_data, sizeof(received_data), HAL_MAX_DELAY);
  18.         }
  19.     }
  20. }

  21. // 时钟配置函数
  22. void SystemClock_Config(void) {
  23.     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  24.     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  25.     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  26.     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  27.     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  28.     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  29.     RCC_OscInitStruct.PLL.PLLM = 4;
  30.     RCC_OscInitStruct.PLL.PLLN = 240;
  31.     RCC_OscInitStruct.PLL.PLLP = 2;
  32.     RCC_OscInitStruct.PLL.PLLQ = 4;
  33.     RCC_OscInitStruct.PLL.PLLR = 2;
  34.     HAL_RCC_OscConfig(&RCC_OscInitStruct);

  35.     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
  36.                                   RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  37.     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  38.     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  39.     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  40.     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  41.     HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
  42. }
以上代码主要完成以下功能:
  • 初始化系统时钟(SystemClock_Config)。
  • 配置 UART 外设并实现数据的接收与发送。
  • 主循环中持续接收和回传数据,实现简单的回环测试。

代码解释
  • 使用 HAL 库中的 HAL_UART_Receive 和 HAL_UART_Transmit 进行数据传输。
  • 设置超时时间为 HAL_MAX_DELAY,以便在未接收到数据时保持阻塞。
  • 时钟配置确保 STM32H743 能在高频率下稳定运行。

运行效果在 PC 上通过串口调试软件发送任意字符串,STM32H743 会将该字符串回传,验证 UART 通信功能。

拓展思路基于此项目,您可以进一步实现更多高级功能:
  • 增加 DMA 支持,提升数据传输效率。
  • 配合 FreeRTOS 实现多任务管理。
  • 使用 USB CDC 模拟串口,增强系统扩展性。

结语STM32H743 是一款性能极为强大的 MCU,其丰富的功能能够满足多种复杂应用需求。从本例中,我们看到了它在通信方面的简单应用,希望这能为您的项目提供一些启发。

公羊子丹 发表于 2024-12-8 07:49 | 显示全部楼层
哇,这个 STM32H743 真心强大,回头我也试试!
周半梅 发表于 2024-12-8 07:50 | 显示全部楼层
看完帖子受益匪浅,尤其是时钟配置那部分,讲得很清楚!
帛灿灿 发表于 2024-12-8 07:50 | 显示全部楼层
感觉这款 MCU 非常适合用在工业控制上,不知道楼主怎么看?
童雨竹 发表于 2024-12-8 07:50 | 显示全部楼层
回环测试思路不错,简单直观,我用在项目里试试!
万图 发表于 2024-12-8 07:50 | 显示全部楼层
能不能加个 FreeRTOS 的例子?我对多任务很感兴趣。
Bblythe 发表于 2024-12-8 07:51 | 显示全部楼层
我之前用的是 F 系列的,H 系列的性能真的高一个级别。
Pulitzer 发表于 2024-12-8 07:51 | 显示全部楼层
请问 STM32CubeMX 的详细配置步骤能不能再补充一下?
Uriah 发表于 2024-12-8 07:51 | 显示全部楼层
不知道能不能整合一下 DMA,用于更大批量的数据传输?
Clyde011 发表于 2024-12-8 07:52 | 显示全部楼层
我刚刚跑了一遍代码,运行起来没问题,感谢楼主分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

5753

帖子

1

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