我一直在尝试移植一些我的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引脚。我试图从数据表中了解我能做什么,但我没有得到任何结论。在它工作之前还有什么需要做的吗?
答案 0 :(得分:5)
我几乎可以肯定你没有在SSM
寄存器中设置SSI
和SPIx->CR1
位。这些芯片中的SPI非常简单,对于轮询传输,您需要设置SSM
,SSI
,SPE
,MSTR
,格式正确(LSBFIRST
,{ {1}},CPOL
)以及CPHA
中的正确波特率(BR
),您很高兴。