番外篇:STM32之GPIO口速率配置究竟代表什么
用过STM32的童鞋们都知道,STM32在GPIO配置时都需要选择一个GPIO速率,对于STM32F103系列芯片来说最快的配置应该是50Mhz左右(没记错的话)。那么这个50Mhz究竟代表了什么,我们今天详细探讨。
顺便的话就是测试一些常用硬件接口(硬件SPI为例)与软件模拟(软件SPI为例)的性能差别。(之前有老师说硬件spi和软件spi速度没什么区别,在此实践论证一下)。
先论证的芯片是STM32F103C8T6
首先是GPIO口配置,这里直接测试GPIOA的PA1:
上述配置是用STM32CUBEMX配置的,只能配置GPIO速率为GPIO_SPEED_FREQ_HIGH,其实应该就是和库函数配置的50Mhz差不多。
GPIO配置完成开始测试,先使用HAL库的GPIO操作代码:
毫无疑问,这里会产生一个方波,这个方波的频率就是使用HAL库操作时GPIO的最大速率。但结果强差人意:
可以发现,速率直接快了四五倍,到了8M左右,看来确实优化挺大,但还是和50M差距甚远。
但其实自己也知道,STM32F103的通用IO口能做到这个地步也几乎是极限了,即使使用汇编提升效果也有限。
但突然之前有老师说硬件spi和软件spi速度没什么区别,在此正好实践论证一下,看看硬件SPI的SCK引脚是输出频率最大能到多少。
使用STM32CUBEMX配置硬件spi,因为使用的是STM32F103C8并且系统频率为72M,所以SPI的时钟频率最大只能设置为18M。STM32CUBEMX配置硬件spi的图如下:
大概18M左右,这比只有8M左右的GPIO速率快的多的多。因此硬件SPI的上限速率无疑比软件模拟SPI快不少。但即使这样,大多数传感器类的SPI通信器件支持的SPI时钟也大多在10M以下,只有一些FLASH等芯片(如W25Q128)会支持20M以上的SPI时钟。所以一般情况下软件SPI确实够用,虽然软件SPI用DMA比较麻烦。
再论证的芯片是STM32H743
H743是个极品,我的测试结果居然表明它的性能和F103的性能相差没有我想象的那么大。(没有打开mpu和cache等辅助)
先上时钟配置,时钟我直接拉到最大的480M。
下面放实际的IO口波形图:
下面测试一下这个24M的硬件SPI的SCK,配置如下。
STM32F103C8和STM32H743都测试结束,结果强差人意。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!