关于 STM32F103R8T6 硬件SPI2 的 单工模式通信问题

2019-10-15 06:52发布

最近在用A7139无线模块,该模块是SPI通信,不过数据口是双向的,即SIMO/SOMI公用一个SDIO口。

软件SPI一切OK,所以尝试用硬件SPI驱动。

关于STM32的SPI有这么个功能,见下图:


当我启用接收数据的模式时,就出问题了,一直是数据接收溢出,即 ( SPI2->SR == 0x43) 

各种尝试均无果,请求各位指点,在此谢过!

以下为配置SPI的部分代码:

[mw_shl_code=c,true]void A7139_Ports_Init(Uint8 bdr) { Uint16 tmp = 0; //------------------------------单工硬件SPI RCC->APB2ENR |= 1<<3;//使能GPIOB时钟 RCC->APB1ENR |= 1<<14;//使能SPI2时钟 GPIOB->CRH &= 0x0F00FFFF;//PB15,PB13推挽复用输出,PB12 GPIOB->CRH |= 0xB0B30000; GPIOB->ODR |= (1<<15)|(1<<13)|(1<<12); // SPI2->CR1 = 0; tmp |= (1<<2);//主设备 tmp |= (1<<15);//BIDIMODE=1 tmp |= (1<<14);//BIDIOE=1 // tmp |= (0<<11);//8Bit tmp |= (1<<9);//软件NSS tmp |= (1<<8); // SPI2->CR1 |= (0<<7);//MSB tmp |= (bdr<<3);//设置SPI2波特率 // SPI2->CR1 |= (0<<1);//空闲SCK保存低电平 // SPI2->CR1 |= (0<<0);//第一个时钟边沿采样 tmp |= (1<<6);//使能SPI SPI2->CR1 = tmp; SPI2->CR2 |= (1<<5);//使能 错误中断 SPI2->CR2 |= (1<<6);//RXNE 接收中断使能 MY_NVIC_Init(1, 1, SPI2_IRQChannel, 3); // SPI2->DR = 0xFE; }[/mw_shl_code]
不知道  SPI 读  部分的代码怎么写,自己各种尝试都不行...

另外有个需要注意的地方是:SPI2->CR1 |= (1<<2);//设置SPI为主设备,如果这个不置位,单工模式下的数据无法发送,手册说的不是很清楚
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。