最近在用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为主设备,如果这个不置位,单工模式下的数据无法发送,手册说的不是很清楚
while((SPI2->SR&0x02)!=0x02);//SPI TX Busy
SPI2->DR = cmd;
SCS=1;
没有明白楼主的意思,您一开始不是这样的吗:可不可以贴出来对比一下。
一周热门 更多>