打印
[STM32H7]

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

[复制链接]
924|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 的初始化和数据收发:
#include "main.h"
#include "usart.h"
#include "gpio.h"

void SystemClock_Config(void);

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART3_UART_Init();
   
    uint8_t received_data[10];
   
    while (1) {
        // 接收数据
        if (HAL_UART_Receive(&huart3, received_data, sizeof(received_data), HAL_MAX_DELAY) == HAL_OK) {
            // 将接收到的数据回传
            HAL_UART_Transmit(&huart3, received_data, sizeof(received_data), HAL_MAX_DELAY);
        }
    }
}

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

    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 = 240;
    RCC_OscInitStruct.PLL.PLLP = 2;
    RCC_OscInitStruct.PLL.PLLQ = 4;
    RCC_OscInitStruct.PLL.PLLR = 2;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);

    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_DIV4;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
}
以上代码主要完成以下功能:
  • 初始化系统时钟(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 非常适合用在工业控制上,不知道楼主怎么看?

使用特权

评论回复
5
童雨竹| | 2024-12-8 07:50 | 只看该作者
回环测试思路不错,简单直观,我用在项目里试试!

使用特权

评论回复
6
万图| | 2024-12-8 07:50 | 只看该作者
能不能加个 FreeRTOS 的例子?我对多任务很感兴趣。

使用特权

评论回复
7
Bblythe| | 2024-12-8 07:51 | 只看该作者
我之前用的是 F 系列的,H 系列的性能真的高一个级别。

使用特权

评论回复
8
Pulitzer| | 2024-12-8 07:51 | 只看该作者
请问 STM32CubeMX 的详细配置步骤能不能再补充一下?

使用特权

评论回复
9
Uriah| | 2024-12-8 07:51 | 只看该作者
不知道能不能整合一下 DMA,用于更大批量的数据传输?

使用特权

评论回复
10
Clyde011| | 2024-12-8 07:52 | 只看该作者
我刚刚跑了一遍代码,运行起来没问题,感谢楼主分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

3890

帖子

1

粉丝