gpt4 book ai didi

embedded - STM32 SPI 慢速计算

转载 作者:行者123 更新时间:2023-12-02 01:20:05 30 4
gpt4 key购买 nike

我正在使用 STM32F4 及其 SPI 与 74HC595 进行通信,如本教程中所示。不同之处在于,对于初学者来说,为了简单起见,我使用非 DMA 版本。我使用STMCubeMX来配置SPI和GPIO

问题是:我没有获得锁存 PIN,我将其设置为 PA8 以在传输过程中足够快地切换。

enter image description here

我正在使用的代码:

        spiTxBuf[0] = 0b00000010;

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);


HAL_SPI_Transmit(&hspi1, spiTxBuf, 1, HAL_MAX_DELAY);
// while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);

HAL_Delay(1);

我尝试过的事情:

  1. 将引脚 PA8 的最大输出速度设置为非常快 enter image description here

  2. 等待 SPI 完成(参见上面的注释行)

  3. 对 SPI 使用 DMA(如此处所示),这实际上使其速度变慢。

如何才能更快地切换?当 SPI 完成时我应该创建并中断并在那里设置锁存器吗?

最佳答案

How do i get that to toggle faster?

如果可能,请使用硬件 NSS 引脚

一些 STM32 Controller 可以自动切换其 NSS 引脚,并在传输后具有可配置的延迟。检查引用手册,如果您是其中之一,请将移位器的锁存引脚重新连接到 MCU 上的 SPIx_NSS 引脚。

不要使用 HAL

对于任何具有严格时序要求的事物来说,HAL 都相当缓慢且过于复杂。不要使用它。

只需实现引用手册中的SPI发送程序即可。

SPI->CR1 |= SPI_CR1_SPE; // this is required only once
GPIOA->BSRR = 1 << (8 + 16);
*(volatile uint8_t *)&SPI->DR = 0b00000010;
while((SPI->SR & (SPI_SR_TXE | SPI_SR_BSY)) != SPI_SR_TXE)
;
GPIOA->BSRR = 1 << 8;

关于embedded - STM32 SPI 慢速计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440516/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com