STM32
直播中

陈龙

7年用户 179经验值
私信 关注
[问答]

如何测试STM32中SPI能不能正常通信?

我按照发烧友案例想要测试下我的SPI能不能正常通信,但是测试出来的数据引脚和时钟引脚电平都没有变化,不知道为何,求大侠指教下?
代码
void SPIx_Init(void)
{  
RCC->APB2ENR|=1<<2;       //PORTA时钟使能   
RCC->APB2ENR|=1<<12;      //SPI1时钟使能
     
//这里只针对SPI口初始化
GPIOA->CRL&=0X000FFFFF;
GPIOA->CRL|=0XBBB00000;//PA5.6.7复用      
GPIOA->ODR|=0X7<<5;    //PA5.6.7上拉
  
SPI1->CR1|=0<<10;//全双工模式
SPI1->CR1|=1<<9; //软件nss管理
SPI1->CR1|=1<<8;  
SPI1->CR1|=1<<2; //SPI主机
SPI1->CR1|=0<<11;//8bit数据格式
SPI1->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1
SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1  
SPI1->CR1|=7<<3; //Fsck=Fcpu/256
SPI1->CR1|=0<<7; //MSBfirst   
SPI1->CR1|=1<<6; //SPI设备使能
SPIx_ReadWriteByte(0xff);//启动传输   
}
u8 SPIx_ReadWriteByte(u8 TxData)
{  
u8 retry=0;     
while((SPI1->SR&1<<1)==0)//等待发送区空
{
  retry++;
  if(retry>200)return 0;
}     
SPI1->DR=TxData;     //发送一个byte
retry=0;
while((SPI1->SR&1<<0)==0) //等待接收完一个byte  
{
  retry++;
  if(retry>200)return 0;
}            
return SPI1->DR;          //返回收到的数据        
}
int main(void)
{
      
   STM32_Clock_Init(9);//系统时钟设置
delay_init(72);  //延时初始化
uart_init(72,9600); //串口1初始化  
SPI_Flash_Init();   //SPI FLASH 初始化
while(1)
{
  SPIx_ReadWriteByte(0x55);
}
}

更多回帖

发帖
×
20
完善资料,
赚取积分