我正在使用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完成后创建并中断并在那里设置锁存器吗?
我如何才能更快地切换?
如果可能,请使用硬件NSS引脚
某些STM32控制器可以NSS
自动切换其引脚,发送后具有可配置的延迟。检查参考手册,如果您是其中之一,则将移位器的锁存器引脚重新连接到SPIx_NSS
MCU上的引脚。
不要使用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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句