STM32F446NUCLEO-144评测 21ic-forgot 一、前言 意法半导体的Nucleo系列向来以低价、简洁、实用闻名,在此之前大部分工程师用过的Nucleo开发板都是64PIN的。这次是第一次拿到Nucleo 144系列的板子,MCU型号STM32F466。 二、外观 感觉从外观上来看,整个板子的面积大了近一倍,不过一眼就能看出,旁边的ST-link部分是与原来的64系列几乎是一模一样,不过晶振给换成了贴片的小封装形式。 144pin的STM32F466主控制器在板上看起来相当的大。板子整体还是继承了以往的风格,毕竟都是Nucleo家族的成员。仔细看了一下板子包装后面的日期,应该是2015年9月推出的产品。 官方图片: 实物图片: 三、功能描述 外观不多说了,首先下载了用户手册查了一下意法半导体官方给出的板子搭载的资源和此款STM32F466的性能描述: 核心MCU使用STM32-F446ZE,LQFP144封装,最高频率达180MHZ 两种类型扩展接口:ZIO及MORPHO 支持ARM的MBED开发平台 板载ST-LINK/V2-1 灵活的供电机制 USBOTG支持 ETH接口(部分板不支持) 3个用户LED 2个按钮:RESET及USEB 板载32.768K LSE晶振 总的来说,功能非常强大的同时,ST为用户提供的调试接口也是非常的方便,用户可以有多种选择。 四:试用 因为之前试用Nucleo 64的时候一直用的都是STM32CubeMX进行开发,所以这次也不例外,通过help下面的check for updates,可以升级到最新的4.13.0版本,下载速度极其的慢,这是个难熬的过程。 只可惜,在升级完之后的CubeMX中,我并没有在board selector下面找到我手上拿到的这块板子,可能是ST的更新还没有跟上,那只有自己新建一个对应MCU的project。
选择好STM32F446ZETX LQFP144之后可以看到图形界面上显示出了此款芯片的图片,在pinout左侧面板中有对MCU的系统和外设模式配置,包括TIM,UART,WWDG,SPI.I2C,I2S,RCT,RCC等等。 针对于ST官方提供的原理图,可以看出PB7和PB14是连接到了板子上的测试LED灯的,我们可以拿这两个灯做个测试程序。 在cubeMX中对于pin,clock,GPIOconfiguration进行配置,这里拿PB7为例: PB7选择 GPIO_OUTPUT Clock选择内部的16M hz的高速时钟 GPIO mode选择 ouput push pull 全部配置好之后,在project下面进行generate code,将输出配置好: 这里选择的是 MDK-ARM V5: 代码生成中: 完成好之后,我们用 MDK-ARM V5打开工程,可以看到USER目录下的 main.C文件中有我们配置后的代码,并编译通过,可以看出,代码中调用的的是ST最新的HAL库。
在此代码的main.c中可以添加自己的代码来实现LED的闪烁测试,这里只是以IO操作为例,实际上对所有的外设配置操作都是如此。由于时间的问题,本人不再进行代码的添加了。这种开发模式缩短了工程师大量的配置芯片的工作,我们可以花更多的时间放在应用代码的编写上。 生成的代码: #include "stm32f4xx_hal.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); /*Configure the system clock */ SystemClock_Config(); /*Initialize all configured peripherals */ MX_GPIO_Init(); while (1) { } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; __PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; HAL_RCC_OscConfig(&RCC_OscInitStruct); HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /*SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; /*GPIO Ports Clock Enable */ __GPIOB_CLK_ENABLE(); /*Configure GPIO pin : PB7 */ GPIO_InitStruct.Pin = GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } 当然,STM32F446ZE来做这些是有点大材小用了,根据他的存储空间,速度,和F4集成的DSP及FPU功能,完全可以胜任很多高端的应用。 五:总结 对我本人目前而言,Nucleo 144也就是当做原来的Nucleo 64一样的使用,只是可以让我接触到更加强大的MCU,进一步熟悉STM32CubeMX和HAL库的开发模式,在以后的一些高端应用场合考虑使用类似于STM32F446ZE这样的强大芯片。也可以看得出ST在中低端市场继续推广的同时,也加大了STM32对高端应用场合的推广重视程度,这是可喜可贺的。 在本人开发过程中也更愿意去选择我试用过的芯片来进行产品的开发,现在的cubeMX和HAL库的开发方式我个人还是比较喜欢的,感谢意法半导体对用户试用平台做出的这些技术上的支持。 六、参考资源 官方NUCLEO F446ZE官方页面:
|