[STM32H7] 高性能与灵活性的结合:STM32H743ZI开发指南

[复制链接]
 楼主| 万图 发表于 2024-11-27 07:57 | 显示全部楼层 |阅读模式
STM32H743ZI是一款基于Arm Cortex-M7的高性能微控制器,具有480 MHz的主频、丰富的外设和高达1 MB的RAM,特别适合对计算能力和响应速度有较高要求的嵌入式应用场景,如工业控制、音频处理和物联网设备开发。
本文将以一个简单的LED闪烁和UART通信项目为例,帮助大家熟悉STM32H743ZI的开发流程及代码实现。

准备工作在开始之前,您需要以下硬件和软件工具:
  • STM32H743ZI开发板(Nucleo-H743ZI2或类似开发板)
  • ST-Link调试器(集成于Nucleo开发板中)
  • STM32CubeIDE或Keil MDK等开发环境
  • 一个LED和对应的限流电阻(如果需要外部连接LED)

项目目标我们的项目目标是:
  • 配置一个GPIO引脚控制LED闪烁。
  • 配置UART以9600 baud的速率发送数据。
  • 使用中断实现UART数据的接收并回显到终端。

硬件连接在Nucleo-H743ZI2开发板上:
  • LED引脚连接到PB0(板载LED也可使用)。
  • UART使用USART3,TX引脚为PB10,RX引脚为PB11。
  • 使用USB转TTL模块连接USART3以便观察数据(根据需求)。

代码实现下面是项目的主要代码,基于STM32Cube HAL库:
  1. #include "main.h"

  2. UART_HandleTypeDef huart3;
  3. uint8_t rx_buffer[1]; // 用于接收数据的缓冲区

  4. void SystemClock_Config(void);
  5. static void MX_GPIO_Init(void);
  6. static void MX_USART3_UART_Init(void);

  7. int main(void)
  8. {
  9.     HAL_Init();
  10.     SystemClock_Config();
  11.     MX_GPIO_Init();
  12.     MX_USART3_UART_Init();

  13.     // 开启UART接收中断
  14.     HAL_UART_Receive_IT(&huart3, rx_buffer, 1);

  15.     while (1)
  16.     {
  17.         // LED闪烁
  18.         HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
  19.         HAL_Delay(500); // 500ms延时
  20.     }
  21. }

  22. // 中断回调函数
  23. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  24. {
  25.     if (huart->Instance == USART3)
  26.     {
  27.         // 回显接收到的数据
  28.         HAL_UART_Transmit(&huart3, rx_buffer, 1, HAL_MAX_DELAY);
  29.         // 重新开启接收中断
  30.         HAL_UART_Receive_IT(&huart3, rx_buffer, 1);
  31.     }
  32. }

  33. // 系统时钟配置
  34. void SystemClock_Config(void)
  35. {
  36.     // 此处为时钟配置代码,由STM32CubeMX生成
  37. }

  38. // GPIO初始化
  39. static void MX_GPIO_Init(void)
  40. {
  41.     GPIO_InitTypeDef GPIO_InitStruct = {0};

  42.     __HAL_RCC_GPIOB_CLK_ENABLE();

  43.     // 配置PB0为输出模式(LED)
  44.     GPIO_InitStruct.Pin = GPIO_PIN_0;
  45.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  46.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  47.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  48.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  49. }

  50. // USART3初始化
  51. static void MX_USART3_UART_Init(void)
  52. {
  53.     huart3.Instance = USART3;
  54.     huart3.Init.BaudRate = 9600;
  55.     huart3.Init.WordLength = UART_WORDLENGTH_8B;
  56.     huart3.Init.StopBits = UART_STOPBITS_1;
  57.     huart3.Init.Parity = UART_PARITY_NONE;
  58.     huart3.Init.Mode = UART_MODE_TX_RX;
  59.     huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  60.     huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  61.     if (HAL_UART_Init(&huart3) != HAL_OK)
  62.     {
  63.         Error_Handler();
  64.     }
  65. }

  66. // 错误处理函数
  67. void Error_Handler(void)
  68. {
  69.     while (1)
  70.     {
  71.         // 错误指示:LED快速闪烁
  72.         HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
  73.         HAL_Delay(100);
  74.     }
  75. }
代码分析
  • 主函数逻辑

    • 初始化系统时钟、GPIO和UART。
    • 在主循环中定时闪烁LED,表明程序运行正常。
  • UART中断

    • 使用HAL_UART_Receive_IT启动中断接收。
    • 在中断回调函数中实现回显功能,并重新开启接收中断。
  • 模块化设计

    • 时钟配置、GPIO和UART初始化均分模块处理,方便代码维护和功能扩展。

项目验证编译代码并烧录到STM32H743ZI开发板,打开串口终端软件(如PuTTY或串口助手),设置波特率为9600。
  • 您会看到LED以0.5秒的周期闪烁。
  • 在串口终端中发送任意字符,MCU将会回显接收到的数据。

扩展应用
  • 使用DMA优化UART数据传输,减少CPU占用。
  • 增加按键输入,控制LED的闪烁速度。
  • 利用FreeRTOS实现多任务管理,如分离UART通信和LED控制任务。

总结STM32H743ZI的高性能处理能力为开发复杂嵌入式系统提供了强大的支持。通过本文的简单实例,您可以快速上手并进一步探索更多功能。未来,我们将分享更多基于STM32系列的高级应用。

公羊子丹 发表于 2024-11-27 07:57 来自手机 | 显示全部楼层
好详细的教程,刚好我的板子是H743ZI,立刻试试!
周半梅 发表于 2024-11-27 07:58 来自手机 | 显示全部楼层
如果加上FreeRTOS的代码实现就更完美了!
帛灿灿 发表于 2024-11-27 07:58 来自手机 | 显示全部楼层
这个例子太棒了,我刚入门就可以跟着做!
童雨竹 发表于 2024-11-27 07:58 来自手机 | 显示全部楼层
之前一直没搞懂中断回调,看了这篇终于明白了!
Wordsworth 发表于 2024-11-27 07:59 来自手机 | 显示全部楼层
能不能讲一下如何用DMA实现UART优化啊?很感兴趣!
Pulitzer 发表于 2024-11-27 07:59 来自手机 | 显示全部楼层
这板子性能很强啊,可以做AI边缘计算吗?
Bblythe 发表于 2024-11-27 08:00 来自手机 | 显示全部楼层
还没用过STM32H7系列,看起来很诱人,得买块板子玩玩!
Uriah 发表于 2024-11-27 08:00 来自手机 | 显示全部楼层
如果用CubeMX生成代码,是不是更方便一些?
Clyde011 发表于 2024-11-27 08:00 来自手机 | 显示全部楼层
串口回显很实用,建议加上接收多字节的例子!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

152

主题

5815

帖子

1

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

152

主题

5815

帖子

1

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