首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPI: SPI: TXE在传输数据时未被清除

SPI: SPI: TXE在传输数据时未被清除
EN

Stack Overflow用户
提问于 2022-11-07 11:29:36
回答 1查看 30关注 0票数 1
代码语言:javascript
复制
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--;
    }
}

我认为,清除TXE位是通过写入SPI_DR寄存器来执行的。TXE标志未被清除,但当我将数据写入SPI_DR寄存器时,将打开RXEN标志。为什么要打开RXEN旗子?为什么TXE旗帜不被清除?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 12:07:18

(uint16_t*) pTxBuffer++;,这是错误的

pSPIx->DR = *pTxBuffer;是错误的,因为它传输32位而不是8位。如果你的微型有SPI FIFO -你将发送4个字节。

清除TXE位是通过写入SPI_DR寄存器来执行的。

是的,但是当数据被移动到shift寄存器时,将设置此标志,指示您可以放置更多的数据。因此,它将在很短的时间内被清除。

为什么要打开RXEN标志?

你可能是说RXNE吧。当它发送时,它被设置为主接收数据(BTW,它是接收任何东西的唯一方式--您需要发送虚拟数据)。这是百分之百正确的行为

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74345877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档