[STM32H7] 【STM32H745I-DISCO试用】首次体验双核MCU

[复制链接]
2122|2
 楼主| yangjiaxu 发表于 2025-5-18 12:56 | 显示全部楼层 |阅读模式
收到了ST非常不错的双核MCU开发板“STM32H745I-DISCO”双核为M7+M4的组合,其芯片内置2MB的flash、板载NORflash、128Mb的SDRAM和4Gb的emmc、4.3寸RGB触摸显示屏、Poe网络、还有SAI音频编解码、和一个MEMS数字麦克风、板载还带有STLINKV3方便用户可以快速调试,可以看出,该评估板主打就是音视频的应用。话不多说,先看看这个开发板的电路设计吧。
6becb303e466466d2c4337ff161a3e64
fe47900504fc65f9d3043c5af1e7869d
cc904b5033fb6c1d6847b4df766ad1c0
从图1至图3来看,板载真的是非常丰富,而且电路设计是按照模块化设计的。
接下来上电,这里注意板载有3个microUSB,建议接入在中间的microUSB上,该USB支持STlink调试仿真并且支持供电,非常方便。
31e19ae2503a45c397d2674da3fd30e9
5760d0c5f2bcdd8a6daeac4200955c47
c62da4b7f00751d91c57c4aac7f5ca43
上电可以看到,板载是有demo的,demo运行起来是有3个功能,第一是信号发生器,第二个是跑的coremark,第三个是开发板和芯片的信息介绍。
接下来就可以编写自己的程序了,首先ST的新款MCU基本都可以使用cubemx来开发了,也就是说,底层部分基本不需要自己来移植了,直接可以用cubemx来生成使用。
d5557d2cdd5fe14316608c6afab36974
461ce7d0fe112f5ec98769ec3048f65a
在cubemx中选择好开发板,然后选择创建工程即可。
47f846bbf5230b0b582ca6131f13286c
由于第一次使用H7系列的芯片,所以创建工程的时候需要在线安装相应的支持包
安装好支持包之后,就可以正常的创建工程了,也就是可以可视化配置IO、时钟和外设等等功能了。
09cca47339ac66756f3c4047480f1f1b
本次创建就先驱动个LED吧,LED在原理图上看到是M7内核使用的是GPIOJ-2,因此配置好之后,就可以生成工程了。
046c0ae28606fc9260396a71e1f70d15
生成工程的时候需要注意,看你使用哪款编辑器,我这里使用的是keil MDK,所以我选择MDK-ARM,这里如果你选择其他的编辑器,这里需要对应选择才可以。
72a58669ef331fab443ee367f6562158
这里就生成好了关于keil-MDK的工程了,这个工程看起来是支持M4和M7两个内核的工程,但是我没有调试好如何联动,这里先就针对于M7内核来实现个点灯吧。
代码如下:
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */
  5. /* USER CODE BEGIN Boot_Mode_Sequence_0 */
  6.   int32_t timeout;
  7. /* USER CODE END Boot_Mode_Sequence_0 */

  8. /* USER CODE BEGIN Boot_Mode_Sequence_1 */
  9.   /* Wait until CPU2 boots and enters in stop mode or timeout*/
  10.   timeout = 0xFFFF;
  11.   while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
  12.   if ( timeout < 0 )
  13.   {
  14.   Error_Handler();
  15.   }
  16. /* USER CODE END Boot_Mode_Sequence_1 */
  17.   /* MCU Configuration--------------------------------------------------------*/

  18.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  19.   HAL_Init();

  20.   /* USER CODE BEGIN Init */

  21.   /* USER CODE END Init */

  22.   /* Configure the system clock */
  23.   SystemClock_Config();
  24. /* USER CODE BEGIN Boot_Mode_Sequence_2 */
  25. /* When system initialization is finished, Cortex-M7 will release Cortex-M4 by means of
  26. HSEM notification */
  27. /*HW semaphore Clock enable*/
  28. __HAL_RCC_HSEM_CLK_ENABLE();
  29. /*Take HSEM */
  30. HAL_HSEM_FastTake(HSEM_ID_0);
  31. /*Release HSEM in order to notify the CPU2(CM4)*/
  32. HAL_HSEM_Release(HSEM_ID_0,0);
  33. /* wait until CPU2 wakes up from stop mode */
  34. timeout = 0xFFFF;
  35. while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) == RESET) && (timeout-- > 0));
  36. if ( timeout < 0 )
  37. {
  38. Error_Handler();
  39. }
  40. /* USER CODE END Boot_Mode_Sequence_2 */

  41.   /* USER CODE BEGIN SysInit */

  42.   /* USER CODE END SysInit */

  43.   /* Initialize all configured peripherals */
  44.   MX_GPIO_Init();
  45.   /* USER CODE BEGIN 2 */

  46.   /* USER CODE END 2 */

  47.   /* Infinite loop */
  48.   /* USER CODE BEGIN WHILE */
  49.   while (1)
  50.   {
  51.     /* USER CODE END WHILE */

  52.     /* USER CODE BEGIN 3 */
  53.                  HAL_GPIO_TogglePin(GPIOJ, GPIO_PIN_2);
  54.      HAL_Delay(500);

  55.   }
  56.   /* USER CODE END 3 */
  57. }
其实重要且实现功能的代码就2句话,
     HAL_GPIO_TogglePin(GPIOJ, GPIO_PIN_2);
     HAL_Delay(500);

最后的效果如下:
ad7a81a613785b34bb4c6d1e3f33da6c
可以看到LD7可以正常的闪烁,说明程序运行是正常的。
总结:其实从我这次使用来看,使用cubemx来配置工程并且使用keil进行自己的业务逻辑增加是比较方便的,而且开发起来也是非常的快速,只要是熟悉关于cubemx的话,是事半功倍的。接下来聊聊关于STM32H745,这款芯片性能强大,非常适合做HMI或者是简单一些的工控机,消费机这种产品,不过双核之间的通信还是比较麻烦一些,估计选型我可能会选择单核或者MPU,单核操作较为简单,MPU跑linux确实是不错的选择,不过H745的双核操作确实可以比MPU成本低,比单核MCU的性能高,我认为是属于一个过渡吧,不过看到ST的这么强悍的MCU真的是很开心,学无止境,又可以玩起来了。最后,感谢ST与21ic的活动,真的受益匪浅~

flycamelaaa 发表于 2025-6-5 17:15 | 显示全部楼层
恭喜你们这些得到开发板的
AdaMaYun 发表于 2025-6-8 22:10 | 显示全部楼层
双核MCU性能非常不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:擅长电路设计、物联网产品开发、射频产品开发,喜欢打篮球,技术交流,欢迎各位来聊~

805

主题

3383

帖子

10

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