STM8 SPI通讯程序

STM8 SPI通讯程序,第1张

传送

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")


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12318615.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存