STM32F4设备上的SPI读取失败

时间:2018-10-14 15:55:14

标签: arm stm32 spi stm32f4

我正在使用STM32F4尝试通过SPI读取。调试环境是带有VisualGDB插件的Visual Studio。 spi配置如下。使用GPIOA / B传输SPI信号的8位帧,首先是MSB

void spiInit() {

RCC->AHB1ENR |= 3;          //enable gpioA/B clock
RCC->APB2ENR |= 0x1000;     //enable SPI1 clock (bit 12)

// configure A5 for SCLK
GPIOA->MODER &= ~0x00000C00;    //clear pin mode for pin 5
GPIOA->MODER |=  0x00000800;    //alternate function mode for pin 5
GPIOA->AFR[0] &= ~0x00F00000;   //clear alternate mode
GPIOA->AFR[0] |=  0x00500000;   //setup pins 5 for AF5

// configure B4 for MISO
GPIOB->MODER &= ~0x00000300;    //clear pin mode for pin 4
GPIOB->MODER |=  0x00000200;    //alternate function mode for pin 5
GPIOB->AFR[0] &= ~0x000F0000;   //clear alternate mode
GPIOB->AFR[0] |=  0x00050000;   //setup pins 4 for AF5

// configure B5 for MOSI
GPIOB->MODER &= ~0x00000C00;    //clear pin mode for pin 5
GPIOB->MODER |=  0x00000800;    //alternate function mode for pin 5
GPIOB->AFR[0] &= ~0x00F00000;   //clear alternate mode
GPIOB->AFR[0] |=  0x00500000;   //setup pins 5 for AF5

// configure A15 for output SS
GPIOA->MODER &= ~0xC0000000;    //clear PA15 function bits
GPIOA->MODER |=  0x40000000;    //set PA15 (SS) as output

SPI1->CR1 = 0x31E; //8-bit frames
SPI1->CR2 = 0; //mostly read/status/interrupt config
SPI1->CR1 |= 0x40; //enable SPI1
GPIOA->BSRR = 0x00008000;   //deassert SS
}

写入很好,数据已正确加载到从属服务器,并且按预期方式响应,但从属服务器读取却无法正常工作。当我查看波形时,我可以看到MISO在总线上看起来不错,但Master并没有接听。

经过几次尝试查看SPI状态寄存器标志(获得上述结果)后,我使用的是在另一个SO问题(here)上看到的实用程序函数。数据总是读为0,我很困惑,代码等待接收缓冲区填满,但是在读取时似乎什么都没有。

uint8_t SPI_ReadWrite8(SPI_TypeDef *spi, uint8_t data)
{
    while(!(spi -> SR & SPI_SR_TXE));     //Wait for tx buffer to empty
    *(volatile uint8_t *)&spi->DR = data; //Send data 
    while (!(spi -> SR & SPI_SR_RXNE));   //Wait for rx buffer to fill
    return *(volatile uint8_t *)&spi->DR;
}

有什么想法我想念的吗?

0 个答案:

没有答案