微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HAL_SPI_Transmit 的工作速度比直接寄存器操作快,这是怎么回事?

如何解决HAL_SPI_Transmit 的工作速度比直接寄存器操作快,这是怎么回事?

因此知道 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,“字节间”暂停为 0,848 毫秒。

Oscilloscope using HAL

并使用寄存器 - 1.192ms

OSC using registers

怎么会?用寄存器做事不是应该更快吗?

附言stm32是l071,32Mhz,SPI是16Mhz。

解决方法

好的,所以我的错误是 - 这是在 0 优化的调试版本上完成的。通过优化,注册方法更快。问题是如何在Eclipse中查看汇编代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。