Stm32 HAL_SPI_传输比直接寄存器操作更快,为什么?

Stm32 HAL_SPI_传输比直接寄存器操作更快,为什么?,stm32,microcontroller,spi,hal,Stm32,Microcontroller,Spi,Hal,所以知道HAL被认为是“慢”的事实后,我决定在我的程序中使用直接寄存器访问重写一个小例程。我决定看看我赢了什么。令人惊讶的是,我居然输了 所以代码是 this->chip_select(); HAL_SPI_Transmit(hspi, spi_array, 3, HAL_MAX_DELAY); this->chip_deselect(); this->chip_select(); SPI1->DR = spi_array[0]; while (!(SPI1->S

所以知道HAL被认为是“慢”的事实后,我决定在我的程序中使用直接寄存器访问重写一个小例程。我决定看看我赢了什么。令人惊讶的是,我居然输了

所以代码是

this->chip_select();
HAL_SPI_Transmit(hspi, spi_array, 3, HAL_MAX_DELAY);
this->chip_deselect();

this->chip_select();
SPI1->DR = spi_array[0];
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = spi_array[1];
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = spi_array[2];
while(SPI1->SR & SPI_SR_BSY);
this->chip_deselect();
因此,首先我使用HAL发送3个字节,然后使用寄存器和相同的SPI发送相同的3个字节

使用HAL,“字节间”暂停为0848ms。

并使用寄存器-1.192ms

为什么?使用寄存器不是应该更快吗


另外,stm32是l071,32 Mhz,SPI是16Mhz。

好的,所以我的错误是-这是在调试版本上进行的,优化为0。通过优化,寄存器方法更快。问题是如何在Eclipse中查看汇编代码。

您检查过汇编代码吗?你在使用什么优化?我现在正在做,我看到虽然需要更多的装配线,但我不知道如何修复它。我正在调试构建,因此没有优化。我认为您必须启动调试会话。然后显示装配代码。如果您有Segger调试器,也可以尝试Ozone。