我一直试图移植一些我的AVR代码,以驱动一个简单的SPI到ARM作为一个学习练习(我是非常新的ARM一般)。为此,我只需要在主模式下使用SPI。
我在数据表中查找我的设备(STM32F103C8),发现我需要的SPI1引脚、SCK和MOSI分别映射为PA5和PA7的替代函数以及其他外围设备(pg.29)。我的理解是,为了在这些引脚上使用SPI函数,我需要确保其他映射到同一个引脚的东西都是禁用的。但是,当查看外围时钟控制寄存器的默认值时,其他功能似乎已经被禁用。
我查看了参考手册中的SPI部分,包括25.3.3节--在主模式下配置SPI。首先,我在SPI1中启用了APB2ENR主时钟,并按照本节中的步骤配置SPI1以满足我的需要。我还更改了PA5/7的设置,将它们的模式设置为“备用函数输出推挽”(9.1.4)。最后,我通过设置SPI1启用了CR1_SPE。
从我的阅读中,我曾经想过,通过像上面一样配置SPI之后将一个值加载到SPI1数据寄存器中,数据将被移出。但是,在写入数据之后,SPI状态寄存器中的TXE标志永远不会被设置,这意味着我写入的数据就在那里。
在这一点上,我假设还有一些东西我没有正确配置。例如,我不能百分之百地确定如何处理PA5/7引脚。我试着从数据表中了解我能做些什么,但是我什么也没有得到。还需要做些什么才能奏效吗?
发布于 2017-02-10 22:23:10
我几乎可以肯定,您没有在SSM寄存器中设置SPIx->CR1和SSI位。这些芯片中的SPI非常简单,您需要设置SSM、SSI、SPE、MSTR、正确的格式(LSBFIRST、CPOL、CPHA)和SPIx->CR1中的适当波特率(BR),这样就可以了。
https://stackoverflow.com/questions/42167712
复制相似问题