我正在使用 STM32F4 及其 SPI 与 74HC595 进行通信,如本教程中所示。不同之处在于,对于初学者来说,为了简单起见,我使用非 DMA 版本。我使用STMCubeMX来配置SPI和GPIO
问题是:我没有获得锁存 PIN,我将其设置为 PA8 以在传输过程中足够快地切换。
我正在使用的代码:
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);
我尝试过的事情:
如何才能更快地切换?当 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/