收到了ST非常不错的双核MCU开发板“STM32H745I-DISCO”双核为M7+M4的组合,其芯片内置2MB的flash、板载NORflash、128Mb的SDRAM和4Gb的emmc、4.3寸RGB触摸显示屏、Poe网络、还有SAI音频编解码、和一个MEMS数字麦克风、板载还带有STLINKV3方便用户可以快速调试,可以看出,该评估板主打就是音视频的应用。话不多说,先看看这个开发板的电路设计吧。
从图1至图3来看,板载真的是非常丰富,而且电路设计是按照模块化设计的。
接下来上电,这里注意板载有3个microUSB,建议接入在中间的microUSB上,该USB支持STlink调试仿真并且支持供电,非常方便。
上电可以看到,板载是有demo的,demo运行起来是有3个功能,第一是信号发生器,第二个是跑的coremark,第三个是开发板和芯片的信息介绍。
接下来就可以编写自己的程序了,首先ST的新款MCU基本都可以使用cubemx来开发了,也就是说,底层部分基本不需要自己来移植了,直接可以用cubemx来生成使用。
在cubemx中选择好开发板,然后选择创建工程即可。
由于第一次使用H7系列的芯片,所以创建工程的时候需要在线安装相应的支持包
安装好支持包之后,就可以正常的创建工程了,也就是可以可视化配置IO、时钟和外设等等功能了。
本次创建就先驱动个LED吧,LED在原理图上看到是M7内核使用的是GPIOJ-2,因此配置好之后,就可以生成工程了。
生成工程的时候需要注意,看你使用哪款编辑器,我这里使用的是keil MDK,所以我选择MDK-ARM,这里如果你选择其他的编辑器,这里需要对应选择才可以。
这里就生成好了关于keil-MDK的工程了,这个工程看起来是支持M4和M7两个内核的工程,但是我没有调试好如何联动,这里先就针对于M7内核来实现个点灯吧。
代码如下:
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
- /* USER CODE BEGIN Boot_Mode_Sequence_0 */
- int32_t timeout;
- /* USER CODE END Boot_Mode_Sequence_0 */
- /* USER CODE BEGIN Boot_Mode_Sequence_1 */
- /* Wait until CPU2 boots and enters in stop mode or timeout*/
- timeout = 0xFFFF;
- while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
- if ( timeout < 0 )
- {
- Error_Handler();
- }
- /* USER CODE END Boot_Mode_Sequence_1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN Boot_Mode_Sequence_2 */
- /* When system initialization is finished, Cortex-M7 will release Cortex-M4 by means of
- HSEM notification */
- /*HW semaphore Clock enable*/
- __HAL_RCC_HSEM_CLK_ENABLE();
- /*Take HSEM */
- HAL_HSEM_FastTake(HSEM_ID_0);
- /*Release HSEM in order to notify the CPU2(CM4)*/
- HAL_HSEM_Release(HSEM_ID_0,0);
- /* wait until CPU2 wakes up from stop mode */
- timeout = 0xFFFF;
- while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) == RESET) && (timeout-- > 0));
- if ( timeout < 0 )
- {
- Error_Handler();
- }
- /* USER CODE END Boot_Mode_Sequence_2 */
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- /* USER CODE BEGIN 2 */
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- HAL_GPIO_TogglePin(GPIOJ, GPIO_PIN_2);
- HAL_Delay(500);
- }
- /* USER CODE END 3 */
- }
其实重要且实现功能的代码就2句话,
HAL_GPIO_TogglePin(GPIOJ, GPIO_PIN_2);
HAL_Delay(500);
最后的效果如下:
可以看到LD7可以正常的闪烁,说明程序运行是正常的。
总结:其实从我这次使用来看,使用cubemx来配置工程并且使用keil进行自己的业务逻辑增加是比较方便的,而且开发起来也是非常的快速,只要是熟悉关于cubemx的话,是事半功倍的。接下来聊聊关于STM32H745,这款芯片性能强大,非常适合做HMI或者是简单一些的工控机,消费机这种产品,不过双核之间的通信还是比较麻烦一些,估计选型我可能会选择单核或者MPU,单核操作较为简单,MPU跑linux确实是不错的选择,不过H745的双核操作确实可以比MPU成本低,比单核MCU的性能高,我认为是属于一个过渡吧,不过看到ST的这么强悍的MCU真的是很开心,学无止境,又可以玩起来了。最后,感谢ST与21ic的活动,真的受益匪浅~
|