论坛元老
- 积分
- 3293
- 金钱
- 3293
- 注册时间
- 2016-1-7
- 在线时间
- 541 小时
|
5金钱
本帖最后由 challenger 于 2022-10-10 15:30 编辑
比如说:主机MOSI发:0B 00 00 00 00 ,从机回复:02 7F 00 00 00
若:主机MOSI发数据:01 08 03 09 08 07 。。。 从机一律回复:FF FF FF FF FF FF 。。。
我本来想用一个接收中断处理spi从机数据,然后 对接收到的buf[0]数据进行判断,然后对应回复,如下:
void SPI_SLAVE_IRQHandler(void)
{
HAL_SPI_IRQHandler(&hspiSlave);
HAL_SPI_Receive_IT(&hspiSlave,aRxBuffer2,1000);
if(aRxBuffer2[0]==0x0B)
{
LL_SPI_TransmitData8(hspiSlave.Instance, aTxBuffer[ubTransmitIndex++]); //02 7F 00 00 00
if(ubTransmitIndex==5)
{
ubTransmitIndex=0;
}
}
else
{
LL_SPI_TransmitData8(hspiSlave.Instance, aTxBuffer2[ubTransmitIndex++]); //FF FF FF FF FF FF .................
if(ubTransmitIndex==translenth)
{
ubTransmitIndex=0;
}
}
}
但是发现主机发0B 00 00 00 00,从机接收始终进不了:aRxBuffer2[0]==0x0B等条件。
而我看到有一个spi从机中断的例程是这样的:
void SPI_SLAVE_IRQHandler(void)
{
/* Check RXNE flag value in ISR register */
if(LL_SPI_IsActiveFlag_RXNE(SPI_SLAVE))
{
/* Call function Slave Reception Callback */
SPI_SLAVE_Rx_Callback();
}
/* Check TXE flag value in ISR register */
if(LL_SPI_IsActiveFlag_TXE(SPI_SLAVE))
{
/* Call function Slave Reception Callback */
SPI_SLAVE_Tx_Callback();
}
/* Check STOP flag value in ISR register */
if(LL_SPI_IsActiveFlag_OVR(SPI_SLAVE))
{
/* Call Error function */
SPI_SLAVE_TransferError_Callback();
}
}
但是主机发送:0B 00 00 00 00 ,从机也进入上面红色的发送部份,把数据就发出来啦!从机根本就不进入黄色的中断接收部份,这怎么回事?这个黄色的接收部份,到底什么时候处理数据???
我就是想在主机发完,从机进入上面的黄色字体接收部份,然后从机进行字节buf位的判断,从而对应回复主机内容。。。
哪位大侠搞过两个单片机spi 主机与从机的中断接收处理,特别是从机中断接收数据处理,能否指导一下。。。
|
最佳答案
查看完整内容[请看2#楼]
目前主机与从机工作在模式0, 有五根线:MOSI ,MISO,SCK,CS ,还有一个irq外部中断脚,这个IRQ脚,是主机接从机IRQ外部中断,主机上升沿中断,
|