基于KL25例程SPI通讯收发不等长的问题

2020-02-19 21:06发布

基于KL系列SPI主机模式和外设通讯,采用PE生成的工程底层库,遇到个问题,期待解答。

参考KL25的SPI通讯例程,主从收发的字符数量都是相同的,如果收发不等长如何处理?
    例如,发送1Byte命令,要收5Byte数据,且是连续的,如下图。

SPI_FIFO.jpg (21.28 KB, 下载次数: 0) 下载附件 收发不等长字符数 2015-3-10 17:30 上传

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
lcptw
2020-02-20 05:03
答以上各位,中断模式,调用CW中PE生成的代码,完全参考help的代码,如下。
例程是收发同数据量的buffer。

#define BLOCK_SIZE 4

uint8_t OutData[BLOCK_SIZE] = "0123";
uint8_t InpData[BLOCK_SIZE];
volatile bool DataReceivedFlag = FALSE;
volatile LDD_SPIMASTER_TError ComError = 0U;
LDD_TError Error;
LDD_TDeviceData *MySPIPtr;

void main(void)
{
  ...
  MySPIPtr = SM1_Init(NULL);                               /* Initialization of SM1 component */
  Error = SM1_ReceiveBlock(MySPIPtr, InpData, BLOCK_SIZE); /* Request data block reception */
  Error = SM1_SendBlock(MySPIPtr, OutData, BLOCK_SIZE);    /* Start transmission/reception */
  while (!DataReceivedFlag) {};                            /* Wait until data block is transmitted/received */
}

如果按照发1byte收4byte,应该改为:
  Error = SM1_ReceiveBlock(MySPIPtr, InpData, 5); /* Request data block reception */
  Error = SM1_SendBlock(MySPIPtr, OutData, 1);    /* Start transmission/reception */

实际在示波器里看,收发的波形都正确,但是 Indata 里首字节会添加一个0xFF并丢失最后一个字节。
这么问题来了,0xFF怎么来的?如何避免?


一周热门 更多>