首页 > 开发板频道 > 试用报告

Nucleo-F767ZI接口和运行速度测试

2019-09-23

作者:龙智

 

STM32F767ZI的接口非常丰富,外部接口资源有3个CAN,一个ETH接口,4个I2C,六个SPI接口和8个串口以及一个USB口等等。又因为此单片机最主要的功能是把运行速度提高到了216MHZ,所以本次测试主要选择在设计中最常用的USB接口和串口,再加上一个定时点灯的实验来测试系统运行速度。

 

外观赏析

 

外观与STM32F303 NUCLEO-144是一致的,电路大部分部分完全延续了之前的设计,主要应该是为了统一设计让厂家省力,让学者不至于陌生吧。不过之前没有好好用过STM32F303 NUCLEO-144,现在来使用STM32F767ZI-Nucleo还是费了一番精力来看电路原理图的。

 

Nucleo-F767ZI接口和运行速度测试

图1

 

亮点功能

 

与其他大部分版本的STM32来说,此版本的主要特点就一个字“快”,官方给出的工作频率可以做到216MHZ,是比之前主流的M0、M3、M4会快了不少。并且用内部晶振就可以做到如此之高的运行速度,这是一个很大的进步。如下图是通过STM32CubeMX设置的内部时钟。

 

通过实际点灯测试时间,21600分频+10000计时产生的中断的就是1s。

 

Nucleo-F767ZI接口和运行速度测试

图2

 

开发测试

 

一USB测试:

 

这次打算开发USB方面的功能,但是通过原理图如图3得知,此板最好只做Host功能,要是做device功能的话就得改板上的几点,先焊接SB186,并且要外界电源,不外接电源的话此USB不能向板内单独供电。

 

Nucleo-F767ZI接口和运行速度测试

图3

 

既然做Host功能,就得有USB转接线,所以特意在网上买了一根USB线,接了个鼠标来测试如图所示

 

Nucleo-F767ZI接口和运行速度测试

 

万事俱备,只欠程序。不过就在使用STM32CubeMX配置程序的是,悲剧上演,没有外部高频晶振,所以不能分频出48MHZ给USB使用,之前的努力全都白费。并且这个晶振的封装还是2PIN贴片的,我们公司都要4PIN贴片的或者2PIN插件的晶振,所以无法使用外部晶振。无法使用外部晶振不是说,就无法分频出48M给USB提供时钟,也就无法使用USB功能,对我来说就是一个比较大的遗憾。

 

Nucleo-F767ZI接口和运行速度测试

图4

 

二、串口测试:

 

通过原理图可知,串口3是与ST-Link/V2的串口接通的,如下图所示:

 

Nucleo-F767ZI接口和运行速度测试

图5

 

通过配置STM32CubeMX配置,生成代码之后,定义了几个串口指针数组,进行如下初始化:

 

void uUART_Init(void)

{

uint16_t uart_NUM;

huart_all[u_UART1]=&huart1;

huart_all[u_UART2]=&huart2;

huart_all[u_UART3]=&huart3;

udma_usart_Tx[u_UART1]=&hdma_usart1_tx;

udma_usart_Tx[u_UART2]=&hdma_usart2_tx;

udma_usart_Tx[u_UART3]=&hdma_usart3_tx;

 

for(uart_NUM=u_UART1;uart_NUM<u_UARTmax;uart_NUM++)

{

user_USART_var[uart_NUM].RX_STA=0;//数据状态位清零

if(NeedInitUart[uart_NUM]==1)

{

HAL_UART_Receive_IT(huart_all[uart_NUM], (u8 *)user_USART_var[uart_NUM].aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量

}

}

}

 

定时1s从串口3发送数据,驱动好ST-Link/V2的串口就可以接收到了数据。这点不用任何外部设备,就可以完成串口测试的设计还是比较方便的。

 

三、两种定时方式电灯

 

本次主要还测试了定时器的方式和系统时钟方式对比,看看两种方式定时是否准确。采用的所以定时器3一秒闪一次, SYSTICK回调函数HAL_SYSTICK_Callback产生的1ms定时0.5s对比看是否会产生时钟差异。函数如下

 

void LED_task(void)

{

static uint16_t temp_T1,temp_T2;

if(check_delay_ms(temp_T1))

{

temp_T1=set_delay_ms(500);

HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);

}

if(User_T_Var.Time3_IT!=temp_T2)

{

temp_T2=User_T_Var.Time3_IT;

HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin);

}

}

电灯的结果还是比较正常的。如下图

 

Nucleo-F767ZI接口和运行速度测试

图6

 

测试总结

 

一、STM32F767ZI使用的内核是M7,频率上直接达到了216MHZ,对目前一般的单片机来说已经是一个非常高的速度了。

 

二、建议厂家在生成这个板子的时候,把外部高频晶振给焊接上,要不USB都不能使用,要使用得自己买晶振来焊接,对于很多人来说是非常不便的。

 

三、因为STM32F767ZI是比较新的单片机,所以目前跟新的库也是最新的才能用,所以Keil软件也需要比较高的版本才能使用,之前使用的5.17都用不了,目前更新到了5.28是可以用了,但是不知道到底哪个版本之后才可以用目前没有具体测试。希望后面使用的同行先把Keil跟新,要不遇到错误了,还得在网上找半天不知道什么错误。