STM32F1 - 在裸机上使用主SPI

时间:2017-02-10 19:59:22

标签: arm stm32 spi

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

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

我查看了reference manual中的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引脚。我试图从数据表中了解我能做什么,但我没有得到任何结论。在它工作之前还有什么需要做的吗?

1 个答案:

答案 0 :(得分:5)

我几乎可以肯定你没有在SSM寄存器中设置SSISPIx->CR1位。这些芯片中的SPI非常简单,对于轮询传输,您需要设置SSMSSISPEMSTR,格式正确(LSBFIRST,{ {1}},CPOL)以及CPHA中的正确波特率(BR),您很高兴。