【发布时间】:2017-06-29 07:02:19
【问题描述】:
我一直在尝试移植我的一些 AVR 代码来驱动一个简单的 SPI LCD 到 ARM 作为学习练习(我对 ARM 很陌生)。为此,我只需要在主模式下使用 SPI。
我查看了我的设备 (STM32F103C8) 的 datasheet,发现我需要的 SPI1 引脚、SCK 和 MOSI 分别映射为 PA5 和 PA7 的替代功能,以及其他外围设备 (pg.29)。我的理解是,为了在这些引脚上使用 SPI 功能,我需要确保映射到同一引脚的其他任何东西都被禁用。然而,在查看外设时钟控制寄存器的默认值时,其他功能似乎已被禁用。
我查看了reference manual 中的 SPI 部分,包括部分 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?
-
发布你的代码,否则我们只能猜测......