感谢ST论坛提供的新品开发板NUCELO-H5E5ZJ的测评机会。
1、开发板资料
官方介绍页面提供开发板和芯片相关的原理图、数据手册、编程手册等文档和资料
https://www.st.com/en/evaluation-tools/nucleo-h5e5zj.html
https://www.st.com/en/microcontrollers-microprocessors/stm32h5e5zj.html
NUCELO-H5E5ZJ开发板主要特性如下:
- 芯片型号为STM32H5E5ZJT6,内核为Cortex-M33,支持TrustZone,最高主频250MHz,芯片内部集成4Mbytes Flash和1.5MbytesSRAM;
- 符合IEEE-802.3-2000标准的Ethertnet接口;
- 高速USB Type C接口;
- 三个用户LED;
- 复位、Boot mode和用户按键;
- 32.768kHz低速晶振和48MHz高速晶振;
- 多种功能接口:百兆以太网、Arduinon接口、M.2存储接口;
2、程序开发
ST开发者社区页面,提供相关的开发工具安装包的说明和下载链接
https://www.st.com.cn/content/st_com/zh/stm32-mcu-developer-zone.html
STM32CubeIDE和Keil都支持开发板的开发,STM32官方提供的示例工程主要在STM32CubeIDE平台,配合CubeMX配置外设和软件组件、生成相应的驱动和组件代码,NUCELO-H5E5ZJ的功能探索很方便。
CubeMX中选择根据开发创建工程

选择NUCELO-H5E5ZJ匹配硬件。

Cortex-M33支持TrustZone,可配置TrustZone的使能状态。

ST的开发板配套有对应的BSP,用于快速生成可用的驱动代码。

创建完成,选择生成的代码使用的工具链类型,保存并生成代码

生成的工程的文件夹目录结构如下,"Drivers->BSP->STM32H5xx_Nucleo"中的代码为开发板的LED、按键和串口的驱动代码。
├─Core
│ ├─Inc
│ ├─Src
│ └─Startup
└─Drivers
├─BSP
│ └─STM32H5xx_Nucleo
├─CMSIS
│ ├─Device
│ │ └─ST
│ │ └─STM32H5xx
│ │ ├─Include
│ │ └─Source
│ │ └─Templates
│ └─Include
└─STM32H5xx_HAL_Driver
├─Inc
│ └─Legacy
└─Src
生成的代码调用BSP驱动函数,初始化LED、串口和按键,实现串口数据输出、LED和外部中断功能的演示。
/* Initialize leds */
BSP_LED_Init(LED_GREEN);
BSP_LED_Init(LED_RED);
BSP_LED_Init(LED_BLUE);
/* Initialize USER push-button, will be used to trigger an interrupt each time it's pressed.*/
BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
/* Initialize COM1 port (115200, 8 bits (7-bit data + 1 stop bit), no parity */
BspCOMInit.BaudRate = 115200;
BspCOMInit.WordLength = COM_WORDLENGTH_8B;
BspCOMInit.StopBits = COM_STOPBITS_1;
BspCOMInit.Parity = COM_PARITY_NONE;
BspCOMInit.HwFlowCtl = COM_HWCONTROL_NONE;
if (BSP_COM_Init(COM1, &BspCOMInit) != BSP_ERROR_NONE)
{
Error_Handler();
}
/* USER CODE BEGIN BSP */
/* -- Sample board code to send message over COM1 port ---- */
printf("Welcome to STM32 world !\n\r");
/* -- Sample board code to switch on leds ---- */
BSP_LED_On(LED_GREEN);
BSP_LED_On(LED_RED);
BSP_LED_On(LED_BLUE);
/* USER CODE END BSP */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* -- Sample board code for User push-button in interrupt mode ---- */
if (BspButtonState == BUTTON_PRESSED)
{
/* Update button state */
BspButtonState = BUTTON_RELEASED;
/* -- Sample board code to toggle leds ---- */
BSP_LED_Toggle(LED_GREEN);
BSP_LED_Toggle(LED_RED);
BSP_LED_Toggle(LED_BLUE);
/* ..... Perform your action ..... */
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
烧录程序到开发板,使用串口工具连接ST-Link的COM端口,查看开发板打印的信息如下。

通过按键中断控制板载LED灯的亮灭。

