[STM32H5] 【STM32 Nucleo-64测评】1、GPIO&UART测试

[复制链接]
 楼主| sujingliang 发表于 2024-7-20 09:44 | 显示全部楼层 |阅读模式
<
本帖最后由 sujingliang 于 2024-7-20 13:51 编辑

一、STM32 Nucleo-64NUCLEO-H533RE)基本信息


首先感谢21IC和意法半导体提供这次评测计划。本次评测的开发板是NUCLEO-H533RE。板载STM32H533RET6 MCU。
STM32H533RETx 是STM32H5 Series产品,核心Cortex-M33, 240 MHz;flash:512kb;SRAM1_2:208KB;SRAM3:64KB。
花了一些时间安装了STM32CubeMX、Keil.STM32H5xx_DFP.1.3.0.pack,下载了STM32Cube_FW_H5_V1.3.0。
1. STM32CubeMX下载地址
https://www.st.com.cn/content/ccc/resource/technical/software/sw_development_suite/group1/ad/c5/eb/69/7e/2c/43/3d/stm32cubemx-win-v6-12-0/files/stm32cubemx-win-v6-12-0.zip/jcr:content/translations/en.stm32cubemx-win-v6-12-0.zip
2.Keil.STM32H5xx_DFP.1.3.0.pack下载地址:
https://www.keil.com/pack/Keil.STM32H5xx_DFP.1.3.0.pack
3.STM32Cube_FW_H5_V1.3.0下载地址:

https://www.st.com/en/embedded-software/stm32cubeh5.html
https://github.com/STMicroelectronics/STM32CubeH5
https://www.st.com.cn/content/ccc/resource/technical/software/firmware/group2/e6/6a/ac/95/1f/33/46/5b/stm32cubeh5-v1-3-0/files/stm32cubeh5-v1-3-0.zip/jcr:content/translations/en.stm32cubeh5-v1-3-0.zip


board.jpg board.gif
开发板特性:
· 提供1个用户GREEN LED(PA5)
· 1个用户按钮(PC13)和1个复位按钮
· MCU所有IO口引出、并提供ARDUINO® Uno V3扩展连接器
· 可以选择的5种供电方式:ST-LINK、USB VBUS或外部电源等。
· 板载ST-LINK调试器/编程器:ST-LINK主控STM32F723(有点奢侈)。

二、STM32CubeMX配置工程
NUCLEO-H533RE提供的扩展外设并不多,可直接利用板上的资源:UART2PA5(LED)PC13(USER KEY)
无标题.gif


三、通过串口通信指令控制 【点灯实验&按钮切换】

1、UART2配置:
  1. static void MX_USART2_UART_Init(void)
  2. {

  3.   /* USER CODE BEGIN USART2_Init 0 */

  4.   /* USER CODE END USART2_Init 0 */

  5.   /* USER CODE BEGIN USART2_Init 1 */

  6.   /* USER CODE END USART2_Init 1 */
  7.   huart2.Instance = USART2;
  8.   huart2.Init.BaudRate = 115200;
  9.   huart2.Init.WordLength = UART_WORDLENGTH_8B;
  10.   huart2.Init.StopBits = UART_STOPBITS_1;
  11.   huart2.Init.Parity = UART_PARITY_NONE;        //UART_PARITY_NONE;        //UART_PARITY_ODD
  12.   huart2.Init.Mode = UART_MODE_TX_RX;
  13.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  14.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  15.   huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  16.   huart2.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  17.   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  18.   if (HAL_UART_Init(&huart2) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }
  22.   if (HAL_UARTEx_SetTxFifoThreshold(&huart2, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }
  26.   if (HAL_UARTEx_SetRxFifoThreshold(&huart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  27.   {
  28.     Error_Handler();
  29.   }
  30.   if (HAL_UARTEx_DisableFifoMode(&huart2) != HAL_OK)
  31.   {
  32.     Error_Handler();
  33.   }
  34.   /* USER CODE BEGIN USART2_Init 2 */

  35.   /* USER CODE END USART2_Init 2 */

  36. }


2、
printf、scanf重定向:(为支持printfkeil中需勾选Use MicroLIB否则不起作用)
  1. int fputc(int ch, FILE *f)
  2. {
  3.   /* Place your implementation of fputc here */
  4.   /* e.g. write a character to the USART3 and Loop until the end of transmission */
  5.   HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);

  6.   return ch;
  7. }

  8. int fgetc(FILE *f)
  9. {
  10.         int ch;
  11.         /* 等待串口输入数据 */
  12.         while (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) == RESET);
  13.         HAL_UART_Receive(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
  14.         return (ch);
  15. }



3、
通过UART打印信息:

  1. static void Show_Message(void)
  2. {
  3.         printf("板子名称:%s\r\n",BSP_GetBoardName());
  4.         printf("版本:%d\r\n",BSP_GetVersion());
  5.         printf("板子ID:%s\r\n",BSP_GetBoardID());
  6.         printf("【STM32 Nucleo-64测评】1、GPIO&USART\r\n");
  7.         
  8.         printf("\r\n通过串口通信指令控制 【点灯实验&按钮切换】 \n");
  9.         printf("\r\n按USER key 切换灯状态 \n");
  10.         printf("使用 USART 参数为:%d \n",115200);
  11.         printf(" 0 ------ 灭 \n");
  12.         printf(" 1 ------ 亮 \n");
  13.         printf(" 2 ------ 获得状态 \n");
  14. }
无标题1.gif


4、main()函数片段:
UART接收到0:熄灭灯,1:点灯。
  1. while (1)
  2.   {
  3.                 ch=getchar();
  4.                 printf("接收到字符:%c\n",ch);
  5.                
  6.                 switch (ch) {
  7.                                 case '0':
  8.                                         BSP_LED_Off(LED2);
  9.                                        
  10.                                 break;
  11.                                 case '1':
  12.                                         BSP_LED_On(LED2);
  13.                                 break;
  14.                                 case '2':
  15.                                         printf("LED2状态【%d】 \r\n",BSP_LED_GetState(LED2));
  16.                                         break;
  17.                         }
  18.   }
5、user key切换点灯
通过PC13中断方式控制灯亮灭
  1. void BSP_PB_Callback(Button_TypeDef Button)
  2. {
  3.         if(BUTTON_USER==Button){
  4.                 BSP_LED_Toggle(LED2);
  5.         }
  6. }


四、总结

1、NUCLEO-H533RE是STM32H5系列的产品,SDK中提供的例子并不多。但是同一系列中还有NUCLEO-H503RB、NUCLEO-H563ZI等几个产品,因为采用HAL库,例程应该是可以通用吧。
2、如果用keil编译,MDK可能至少要5.37以上版本,我用的是MDK5.40。
3、M33是比M4性能高,比M7性能低,总体来说是比较高端。
4、板子的信息可以从官方上下载:《um3121-stm32h5-nucleo64-board-mb1814-stmicroelectronics》
5、如何确认ST-LINK虚拟串口是USART2?
STLINK1.gif
um3121-stm32h5-nucleo64-board-mb1814-stmicroelectronics》中有上面的描述,
查看下板子:SB1、SB2、SB19、SB33是用0欧电阻短接,所以用的USART2

STLINK2.gif
STM32CubeMX配置中也可以看到:
STLINK3.gif

源码:
TEST.rar (354.16 KB, 下载次数: 4)





评论

非常不错的资料  发表于 2024-7-20 09:54
tpgf 发表于 2024-7-20 09:54 | 显示全部楼层
可以通过什么途径查询到开发板的详细信息呢
尹小舟 发表于 2024-7-20 19:53 | 显示全部楼层
tpgf 发表于 2024-7-20 09:54
可以通过什么途径查询到开发板的详细信息呢

ST的官网
kqh11a 发表于 2024-7-29 14:30 | 显示全部楼层
STM32H533RET6 主要规格
核心: Cortex-M33
主频: 240 MHz
Flash: 512 KB
SRAM1: 208 KB
SRAM3: 64 KB
申小林一号 发表于 2024-7-29 22:54 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

146

帖子

3

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