在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32的USART發送數據時如何使用TXE和TC標志呢?

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2023-10-26 11:31 ? 次閱讀

STM32的USART發送數據時如何使用TXE和TC標志呢?

USART 是 STM32 中非常重要的外設之一,用于串行通信,其中包括串口通信(RS232RS485)、SPI 和 I2C 等多種串行通信協議。USART 在 STM32 中有多個實例,包括 USART1、USART2 等,其特性和功能也不完全相同。

在發送數據時,USART 需要使用 TXE 和 TC 標志位。TXE 表示數據寄存器空,表示 USART 數據發送寄存器中的數據已被全部發送出去,可以直接寫入新的數據。TC 標志表示傳輸完成,表示 USART 發送完全部數據,且寄存器都為空。

下面我們來看一下 STM32 的 USART 發送數據時如何使用 TXE 和 TC 標志位。

1.USART 數據寄存器有兩種模式:8 位模式和 9 位模式。如果使用 8 位模式發送數據,則每次發送數據將用一個 8 位的數據寄存器。

2.如果使用 9 位模式發送數據,每次發送的數據將使用兩個寄存器:數據寄存器和控制寄存器。數據寄存器用于存儲 8 位的數據,而控制寄存器的最高位(第9 位)用于存儲數據的第 9 位。

3.在發送數據之前需要配置 USART 的一些參數,例如波特率、數據位數、停止位等。在配置完成后,可以使用 USART_SendData 函數向數據寄存器寫入數據。函數原型如下:

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)

其中,USARTx 為 USART 模塊的實例,Data 為要發送的數據。由于 STM32 采用的是 Little-Endian 模式,因此在 9 位模式下,Data 的后 8 位會被寫入到數據寄存器中,而前一位則會被寫入到控制寄存器的最高位中。

4.當數據寄存器中的數據已被全部發送出去時,TXE 標志位會被置為 1,此時可以直接寫入新的數據。因此,可以使用 while 循環來判斷 TXE 標志位是否被置為 1,一旦被置為 1,就可以調用 USART_SendData 函數發送下一組數據。代碼如下:

while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);

USART_SendData(USARTx, Data);

其中,USARTx 為 USART 模塊的實例,Data 為要發送的數據。

5.在發送完全部數據后,TC 標志位會被置為 1,此時表示數據全部發送完成。可以使用 while 循環來等待 TC 標志位被置位為 1,以便確認數據發送是否成功。代碼如下:

while (USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);

6.串口發送數據時還需要注意的是,如果發送的數據過于頻繁,會導致 USART TX 緩沖區溢出。因此,在每次發送之前需要判斷 USART 的 TX 緩沖區是否為空,只有當 TX 緩沖區為空時才能進行下一次發送。可以使用 USART_GetFlagStatus 函數來判斷 TXE 標志位是否被置位為 1。

以上就是 STM32 的 USART 發送數據時如何使用 TXE 和 TC 標志位的詳細介紹。在實際開發中,需要根據具體的硬件和應用環境進行針對性設置和調整,才能保證 USART 的正常工作和數據傳輸的穩定性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RS485
    +關注

    關注

    39

    文章

    1163

    瀏覽量

    82416
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356588
  • 數據寄存器
    +關注

    關注

    0

    文章

    33

    瀏覽量

    7775
  • USART
    +關注

    關注

    1

    文章

    195

    瀏覽量

    30898
收藏 人收藏

    評論

    相關推薦

    TC399 UART能夠接收數據,但無法發送任何數據,為什么?

    傳輸數據。 我能夠接收數據,但無法發送任何數據。 我用示波器監測了 TX 引腳,它始終保持在 VDD 電平。 目前,我使用以下步驟來初始化 ASCLIN 模塊和
    發表于 05-21 06:48

    stm32的modbus.c文件,如何觸發串口發送中斷?

    1, USART_IT_TC, DISABLE);這個函數,使能發送中斷后,會發送個空白幀?從而引發第一次串口發送中斷. 所以說,這個函數應該作為個串口
    發表于 05-10 06:50

    做一個STM8 UART半雙工,測試發現數據發送和回發不穩定,怎么解決?

    各位大俠: 最近做一個STM8 UART半雙工,發送自定義協議控制下位控制器,控制器正常有答復,測試發現數據發送和回發不穩定, 考慮綜合利用TXE
    發表于 04-30 06:45

    stm32F407 USART發送數據TC不能置位是怎么回事?

    )//原因:SR寄存器值為0x80,TXE置位,但此時TC沒有置位,移位寄存器數據沒有發送完成 { bitstatus = SET; } else { bitstatus = RE
    發表于 04-25 06:15

    USART3用DMA發送只能發送一次是什么原因導致的?

    USART, 配置完畢 USART_Cmd(USART3, ENABLE);//使能或失能USART USART_ClearFlag(
    發表于 04-19 08:21

    STM32F103C8T6發送數據正常,但是數據數據之間的間隔太長了,為什么

    ((USART_GetFlagStatus(SC_USART, USART_FLAG_TC) == RESET) ) { Counter++; } 代碼如上,發送
    發表于 04-17 07:35

    STM32F103RCT6的USART1不能接收多字節數據是什么原因導致的?

    用串口助手手動發送和1秒一次的定時發送時,STM32F103RCT6能完整地接收到15個字節的數據。 用串口助循環發送時,與延時有關。500
    發表于 04-17 06:35

    STM32CubeMX用FreeRTOS+DMA操縱usart發送數據為什么失敗?

    不用用FreeRTOS時,DMA操縱usart可以正常發送數據; 用FreeRTOS,不用DMA直接用usart也可以正常發送
    發表于 04-15 08:16

    STM8S105K6使用串口中斷發送,如何清發送完成中斷TXE

    中斷,給出的解決方案是UART2_SendData8() or UART2_SendData9(),寫數據的方式。單帶來的問題是,實際發送數據時,我的最后一個字節發送完了怎么辦,沒發清
    發表于 04-11 08:23

    STM8S串口中斷TXETC有什么區別?

    STM8S單片機和發送相關的中斷有兩個:TXE 發送數據寄存器孔 TC 發送完成 我們編程時,采
    發表于 04-11 06:52

    STM8S105C6T6 UART2串口能接收數據,不能發送數據是為什么?

    (UART2_FLAG_TXE)==RESET)); //待發送寄存器為空 UART2_SendData8(Data); while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET
    發表于 04-10 08:05

    stm32g070怎么可以讓usart3串口可以自動接收自己發出的數據

    usart3:沒有開啟DMA模式,開啟此功能必須使能timer1,而且中斷發送數據時,總是產生idle故障標志。且總是接收到自己發出的數據
    發表于 03-28 06:53

    使用STM32G030接收和發送RS485的數據,接收數據錯誤的原因?

    );//等待串口舊數據發送完成 LL_USART_TransmitData8(USART1,newData);//數據從串口
    發表于 03-26 06:55

    STM32F401使用USART6時不正常,發送HELLO WORLD為亂碼怎么解決?

    各位大神: 我用STM32F401 進行串口通信,UASRT1跟UASRT2使用正常,使用USART6時不正常,發送HELLO WORLD為亂碼怎么破? 代碼如下: main
    發表于 03-22 06:18

    STM32F405 uart DMA收發數據輸出亂碼怎么解決?

    *p_buffer, uint32_t g_len ){while( !LL_USART_IsActiveFlag_TXE( USART2 ) );LL_DMA_ClearFlag_TC6( DMA1
    發表于 03-08 07:38
    主站蜘蛛池模板: ass嫩美女胴体| 永久免费在线观看| 日本高清视频在线www色| 青草精品视频| 久久亚洲精品玖玖玖玖| 国产色婷婷免费视频| 日韩亚射吧| 国产黄色片网站| 亚洲卡一卡2卡三卡4卡国色| 日本一卡二卡3卡四卡网站精品| 国产aaaaa一级毛片| 亚洲小视频在线播放| h在线观看免费| 亚洲一区在线播放| 黄视频免费在线看| 在线视频毛片| 久久精品re| 四虎在线影院| 亚洲 欧美 另类 综合 日韩| 天堂在线中文网| 亚洲电影av| 亚洲国产成人久久三区| 四虎影视永久在线精品免费播放| 欧美日韩一级视频| 国产伦理一区二区三区| 天天摸天天躁天天添天天爽| 成人在线黄色| 哪个网站可以看av| 女人的逼毛片| 男男gay高h文| 五月婷婷六月合| 五月婷婷色丁香| 欧美αv日韩αv另类综合| 国产美女在线观看| 欧美成人猛男性色生活| 又黄又湿又爽| 亚洲精品自拍区在线观看| 男人的天堂在线精品视频| 97久久伊人精品影院| 黑人黑粗硬视频| 国产性老妇女做爰在线|