STM32F1 - 在裸机上使用主SPI

Tri*_*cer 2 arm spi stm32

我一直试图移植一些我的AVR代码来驱动一个简单的SPI LCD到ARM作为一个学习练习(我对ARM一般都很新).为此,我只需要在主模式下使用SPI.

我查看了器件的数据表(STM32F103C8),发现我需要的SPI1引脚,SCK和MOSI分别映射为PA5和PA7的替代功能,以及其他外设(第29页).我的理解是,为了在这些引脚上使用SPI功能,我需要确保禁止映射到同一引脚的任何其他内容.但是,在查看外设时钟控制寄存器的默认值时,看起来其他功能已被禁用.

我查看了参考手册中的SPI部分,包括第25.3.3- 在主模式下配置SPI.首先,我在APB2ENR中启用SPI1主时钟,然后按照本节中的步骤将SPI1配置为我的需要.我还更改了PA5/7的设置,将其模式设置为"Alternate Function Output push-pull"(9.1.4).最后,我通过设置CR1_SPE来启用SPI1.

从我的阅读中,我曾想过,如上所述配置SPI后,通过将值加载到SPI1数据寄存器中,数据将被移出.但是,写入数据后,SPI状态寄存器中的TXE标志永远不会置位,表示我写入的数据只是坐在那里.

在这一点上,我假设还有一些我无法正确配置的东西.例如,我不能100%确定如何处理PA5/7引脚.我试图从数据表中了解我能做什么,但我没有得到任何结论.在它工作之前还有什么需要做的吗?

Fre*_*pin 5

我几乎可以肯定你没有设置SSMSSISPIx->CR1注册.SPI在这些芯片是非常简单的,因为你需要设置轮询传输SSM,SSI,SPE,MSTR,正确的格式(LSBFIRST,CPOL,CPHA)和适当的波特率(BR中)SPIx->CR1和你去好.