
while(1)
{
a=0b10101010
SPI_CR2 = 0b00000011//0X03
SPI_CR1 = 0b01001100//0X4C //8MHZ(HSE = 16MHZ)
while(1)
{
//while(!TXE)
for(sendCnt=0sendCnt<8sendCnt++)
{
while((SPI_SR&0b00000010)==0b00000010)
SPI_DR = 0xAA
if((SPI_SR&0b00000001)==0b00000001)
{
b=SPI_DR
}
else
{
//error flag
}
}
SPI_NSS=1
delay(40000)
SPI_NSS=0
while((SPI_SR&0b00000010)==0b00000010)
SPI_DR = 0xAA
}
}
接收罩枝
SPI_CR2 = 0b00000000//0X03
SPI_CR1 = 0b00011000//0X4C //8MHZ(HSE = 16MHZ)
RXIE=1
EI()
SPE=1
sentPoint=sentArray
receivePoint=receiveArray
//a=SPI_DR
//a=0
SPI_DR=*sentPoint
while(!TXE){}//è·±£2??ù·¢?í?D
a=SPI_DR
a=0
sentPoint++
SPI_DR=*sentPoint
while(1)
{
if(PEI_5==1)/物并敏/如果有错误发蔽凳生
{
if(receiveCnt!=0)
{
SPE=1
sentPoint=sentArray
receivePoint=receiveArray
SPI_DR=*sentPoint
while(!TXE){}//è·±£2??ù·¢?í?D
a=SPI_DR
a=0
sentPoint++
SPI_DR=*sentPoint
receiveCnt=0
}
}
I/O口自己设一下
首先说明一点:你这个里面都没有使能时钟,怎么可能会正常运行呢。还有一点:STM32先等待已发送的数据是否发送完成,如果没有发送完成,并且进入循世锋环的话,说明数据发送错误,所以你这个地方顺序也有问题。应该是:
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)//检查指定的SPI标志位设如梁置与否:发送缓存空标志位
SPI_I2S_SendData(SPI1, 0x54)/渣返运/通过外设SPI1发送一个数据
printf("\n\r 数据发送完毕。\n\r")
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)