3 发送函数: 当客户在调用下面发送函数的时候,数据跟长度不匹配.
HAL_CEC_Transmit_IT(&hcec,InitiatorAddress ,DestinationAddress, (uint8_t *)&Tab_Tx, TxSize);
- HAL_StatusTypeDef HAL_CEC_Transmit_IT(CEC_HandleTypeDef *hcec, uint8_t InitiatorAddress, uint8_t
- DestinationAddress, uint8_t *pData, uint32_t Size)
- {
- /* if the IP isn't already busy and if there is no previous transmission
- already pending due to arbitration lost */
- if (hcec->gState == HAL_CEC_STATE_READY)
- {
- if((pData == NULL ) && (Size > 0U))
- {
- return HAL_ERROR;
- }
- /* Process Locked */
- __HAL_LOCK(hcec);
- hcec->pTxBuffPtr = pData;
- hcec->gState = HAL_CEC_STATE_BUSY_TX;
- hcec->ErrorCode = HAL_CEC_ERROR_NONE;
- /* initialize the number of bytes to send,
- * 0 means only one header is sent (ping operation) */
- hcec->TxXferCount = Size;
- /* in case of no payload (Size = 0), sender is only pinging the system;
- Set TX End of Message (TXEOM) bit, must be set before writing data to TXDR */
- if (Size == 0U)
- {
- __HAL_CEC_LAST_BYTE_TX_SET(hcec);
- }
- /* send header block */
- hcec->Instance->TXDR = ((uint8_t)(InitiatorAddress << CEC_INITIATOR_LSB_POS) |(uint8_t) DestinationAddress);
- /* Set TX Start of Message (TXSOM) bit */
- __HAL_CEC_FIRST_BYTE_TX_SET(hcec);
- /* Process Unlocked */
- __HAL_UNLOCK(hcec);
- return HAL_OK;
- }
- else
- {
- return HAL_BUSY;
- }
- }
例如 :发送 2 个字节(TxSize=2) 0x44 和 0x43,但是我在后面发觉多出来一个字节(如下图),而如果我们将 TxSize 设为 1,反而
数据发送正确. 从上面的函数来看,并没有什么错误.它仅仅开始发送了 HEADER 和开始发送.
|