void SPI_SendData(SPI_RegDef_t *pSPIx ,uint8_t *pTxBuffer,uint32_t len)
{
while(len > 0)
{
// 1. chờ cờ TXE set (chờ cho thanh txbuffer trống)
while (SPI_GetFlagStatus(pSPIx, SPI_FLAG_TXE) == FLAG_RESET);
//2. kiểm tra DFF
if(((pSPIx->CR1 >> SPI_CR1_DFF) & 1) == SPI_DFF_16BIT)
{
// 16 bit
pSPIx->DR = *((uint16_t*) pTxBuffer);
(uint16_t*) pTxBuffer++;
len--;
}else
{
pSPIx->DR = *pTxBuffer;
pTxBuffer++;
}
len--;
}
}
I think, Clearing the TXE bit is performed by writing to the SPI_DR register. The TXE Flag is not cleared but the RXEN flag is turned on when I write data to the SPI_DR register. Why is the RXEN flag is turned on? why is the TXE Flag not cleared?