我一直在试图移植一些AVR代码来驱动一个简单的SPI LCD作为学习练习(我对ARM一般来说很新颖)。为此,我只需要在主模式下使用SPI。我查看了我的器件(STM32F103C8)的datasheet,发现我需要的SPI1引脚,SCK和MOSI分别与其他外设(第29页)一起映射为PA5和PA7的替代功能。我的理解是,为了在这些引脚上使用SPI功能,我需要确保映射到同一引脚的任何其他功能都被禁用。但是,在查看外设时钟控制寄存器的默认值时,看起来其他功能已被禁用。STM32F1 - 在裸机上使用主SPI
我看着SPI部分在reference manual,包括第25.3.3 - 在主模式配置SPI。首先,我在APB2ENR中启用SPI1主时钟,并按照本节中的步骤将SPI1配置为符合我的需要。我还更改了PA5/7的设置,将其模式设置为“备用功能输出推挽”(9.1.4)。最后,我通过设置CR1_SPE来启用SPI1。
从我的阅读中,我曾经想过,在配置SPI之后,通过将值加载到SPI1数据寄存器中,数据将被移出。但是,在写入数据之后,SPI状态寄存器中的TXE标志永远不会置位,表示我写入的数据只是坐在那里。
在这一点上,我假设有其他东西我没有正确配置。例如,我不能100%确定如何处理PA5/7引脚。我试图从数据表中理解我能做些什么,但我没有得到任何地方。还有什么需要完成之前,它会工作?
我不认为引脚配置不正确会阻止SPI尝试传输数据。它不会去任何地方,但外围设备仍然会这样。我会建议外设配置不正确。你是否启用了SPI的时钟?你是否启用了SPI? –
发布你的代码,否则我们所能做的只是猜测...... –