收到了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的活动,真的受益匪浅~
|