新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2014-12-10
- 在线时间
- 0 小时
|
5金钱
现象:我要实现两个stm32f103主从通信,主机mosi能够稳定发送 0xb0 0xff 0xff .... 0xff 从机能够读取到主机发来的数据并miso原样发送出来(示波器观察),说明spi通道没有问题。但是在中断处理函数中我加了一个if判断语句后输出变化的值,结果输出10来秒后卡住,数据不变化,各位大神,求解啊,拜谢啊
从机程序:
void SPI1_WriteByte(u8 TxData)
{
u8 retry=0;
while((SPI1->SR&1<<1)==0){
retry++;
if(retry>200)return;
}
SPI1->DR=TxData; //
}
u8 SPI1_ReadByte(void)
{
u8 retry=0;
while((SPI1->SR&1<<0)==0) {
retry++;
if(retry>200)return 0;
}
return SPI1->DR; //
}
void SPI1_IRQHandler(void)
{
if((SPI1->SR&1<<0)==1)
{
Slave_Temp[num] = SPI1_ReadByte(); //num初始值为0,以后每进入中断函数一次增加1
if(Slave_Temp[0]==0xb0) SPI1_WriteByte(kk++);
if(kk>=240)kk=0;num++;
}
}
一开始是正常的输出kk++数据,过段时间后示波器显示停在一个数值上面一直不变化。
本人怀疑if条件不成立,即SPI1_ReadByte()有可能读错数据(确信主机没发错),但是我把if条件去掉
后,即:
Slave_Temp[0] = SPI1_ReadByte();
SPI1_WriteByte(kk++);
if(kk>=240)kk=0;
可以一直正常输出。 为什么加了那个if判读语句,一开始正常输出,后来又卡住了呢?期望哥解答。
|
|