一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的USART發(fā)送數(shù)據(jù)時如何使用TXE和TC標(biāo)志呢?

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2023-10-26 11:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

STM32的USART發(fā)送數(shù)據(jù)時如何使用TXE和TC標(biāo)志呢?

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

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

下面我們來看一下 STM32 的 USART 發(fā)送數(shù)據(jù)時如何使用 TXE 和 TC 標(biāo)志位。

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

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

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

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)

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

4.當(dāng)數(shù)據(jù)寄存器中的數(shù)據(jù)已被全部發(fā)送出去時,TXE 標(biāo)志位會被置為 1,此時可以直接寫入新的數(shù)據(jù)。因此,可以使用 while 循環(huán)來判斷 TXE 標(biāo)志位是否被置為 1,一旦被置為 1,就可以調(diào)用 USART_SendData 函數(shù)發(fā)送下一組數(shù)據(jù)。代碼如下:

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

USART_SendData(USARTx, Data);

其中,USARTx 為 USART 模塊的實(shí)例,Data 為要發(fā)送的數(shù)據(jù)。

5.在發(fā)送完全部數(shù)據(jù)后,TC 標(biāo)志位會被置為 1,此時表示數(shù)據(jù)全部發(fā)送完成??梢允褂?while 循環(huán)來等待 TC 標(biāo)志位被置位為 1,以便確認(rèn)數(shù)據(jù)發(fā)送是否成功。代碼如下:

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

6.串口發(fā)送數(shù)據(jù)時還需要注意的是,如果發(fā)送的數(shù)據(jù)過于頻繁,會導(dǎo)致 USART TX 緩沖區(qū)溢出。因此,在每次發(fā)送之前需要判斷 USART 的 TX 緩沖區(qū)是否為空,只有當(dāng) TX 緩沖區(qū)為空時才能進(jìn)行下一次發(fā)送??梢允褂?USART_GetFlagStatus 函數(shù)來判斷 TXE 標(biāo)志位是否被置位為 1。

以上就是 STM32 的 USART 發(fā)送數(shù)據(jù)時如何使用 TXE 和 TC 標(biāo)志位的詳細(xì)介紹。在實(shí)際開發(fā)中,需要根據(jù)具體的硬件和應(yīng)用環(huán)境進(jìn)行針對性設(shè)置和調(diào)整,才能保證 USART 的正常工作和數(shù)據(jù)傳輸?shù)姆€(wěn)定性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • RS485
    +關(guān)注

    關(guān)注

    39

    文章

    1229

    瀏覽量

    83852
  • STM32
    +關(guān)注

    關(guān)注

    2291

    文章

    11022

    瀏覽量

    363413
  • 數(shù)據(jù)寄存器

    關(guān)注

    0

    文章

    33

    瀏覽量

    7994
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    201

    瀏覽量

    31767
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32f103,直接操作寄存器,實(shí)現(xiàn)IIC的發(fā)送

    命令字節(jié) I2C_WaitEvent(I2C_SR1_TXE);// 等待DR寄存器空 I2C2->DR = cmd;// 寫入命令字節(jié) // 4. 連續(xù)發(fā)送數(shù)據(jù)數(shù)組 for (uint16_t i = 0
    發(fā)表于 06-25 10:18

    stm32N657配置USART2,可以發(fā)送,但是為什么無法進(jìn)入接收中斷

    https://gitee.com/liu-qingchang/code/tree/master/stm32n6 main函數(shù)和usart代碼 使用stm32N657這塊評估板,使用cubeMX配置
    發(fā)表于 06-18 07:13

    STM32學(xué)習(xí)USART之基礎(chǔ)篇(可下載)

    今天分享 USART 設(shè)計(jì)前的基礎(chǔ)知識我們先來了解一下有關(guān)通信的基本概念:通信:兩個設(shè)備之間進(jìn)行數(shù)據(jù)交換時,稱這個過程為兩個設(shè)備間的通信并行通信:設(shè)備之間的數(shù)據(jù)是以一位一位的二進(jìn)制數(shù)進(jìn)行傳輸?shù)?,并?/div>
    發(fā)表于 03-31 15:07 ?4次下載

    STM32F107的USART2為什么進(jìn)不了中斷?

    剛開始學(xué)STM32,手里有一塊公司的板子,板子上的USB接到FT232R,再從FT232R接到MCU的PD5(USART2TX)和PD6(USART2RX)。 我嘗試了公司的代碼,應(yīng)該是用標(biāo)準(zhǔn)庫寫
    發(fā)表于 03-14 16:57

    STM32F427串口接收和發(fā)送中斷同時使能,為什么會出現(xiàn)接收中斷丟數(shù)的情況?

    STM32F427芯片,針對UART7開啟串口接收緩存區(qū)非空中斷RXNE和串口傳輸完成中斷TC. 1.單測試收發(fā)都沒有任何問題。 2.將串口與PC機(jī)連接,PC端通過串口助手發(fā)送數(shù)據(jù)給測
    發(fā)表于 03-11 07:05

    STM32L451CEU6發(fā)送0x80會收到0x00的數(shù)據(jù),發(fā)送0x01會收到0x7F的數(shù)據(jù),為什么?

    使用STM32L451CEU6型號的芯片,在用usart(PA9、PA10)進(jìn)行串口通信時,發(fā)送0x55在PC端可以收到正確的數(shù)據(jù),但是發(fā)送
    發(fā)表于 03-07 08:44

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是空的,為什么?

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是空的,參考其他代碼做了初始化操作,可以通過HAL_USART_Transmit接口
    發(fā)表于 03-07 07:48

    串口數(shù)據(jù)錯亂?從標(biāo)志位設(shè)置入手

    導(dǎo)讀在串口通信開發(fā)中,數(shù)據(jù)錯亂是常見問題。本文將快速介紹串口標(biāo)志位的作用及配置方法,幫助解決數(shù)據(jù)傳輸錯誤。有用戶反饋“串口應(yīng)用層數(shù)據(jù)錯亂、與發(fā)送
    的頭像 發(fā)表于 02-11 11:35 ?782次閱讀
    串口<b class='flag-5'>數(shù)據(jù)</b>錯亂?從<b class='flag-5'>標(biāo)志</b>位設(shè)置入手

    AT32F407在USART2 DMA發(fā)送數(shù)據(jù)時,接包接到了要發(fā)送數(shù)據(jù),程序還是處于等待傳輸完成的標(biāo)識判斷中,為什么?

    型號AT32F407,在USART2DMA發(fā)送數(shù)據(jù)時,接包已經(jīng)接到了要發(fā)送數(shù)據(jù),但是程序還是處于等待傳輸完成的標(biāo)識判斷中,卡死了。請教一下
    發(fā)表于 12-19 06:48

    記錄我的stm32開發(fā)學(xué)習(xí)過程

    STM32F103程序開發(fā)——串口UART篇(HAL庫) 本次實(shí)驗(yàn)?zāi)繕?biāo)內(nèi)容: 從零編寫UART庫函數(shù),分別為UART.c和UART.h文件; 實(shí)現(xiàn)stm32單片機(jī)串口數(shù)據(jù)發(fā)送功能
    發(fā)表于 11-19 14:37

    STM32CUBEMX(8)--USART通過定時器中斷方式接收不定長數(shù)據(jù)

    =0;//接受到數(shù)據(jù)標(biāo)志 /* USER CODE END PV */ 定義printf的重定向函數(shù)fputc。 /* USER CODE BEGIN 0 */ void printf_usart
    發(fā)表于 09-06 16:48

    STM32CUBEMX(6)--移植雅特力AT32F403AVGT7,雙串口通過DMA方式接收不定長數(shù)據(jù)

    ReceiveBuff_usart2=0;//置0 Rx_len_usart2=0;//接收數(shù)據(jù)長度清零 recv_end_flag_usart2=0;//接收
    發(fā)表于 09-06 16:37

    STM32CUBEMX(2)--USART通過DMA方式接收不定長數(shù)據(jù)

    ) { if(recv_end_flag ==1)//接收完成標(biāo)志 { printf(\"數(shù)據(jù)長度=%d\\\\r\\\\n\",Rx_len);//打印接收到的數(shù)據(jù)長度 printf
    發(fā)表于 09-04 11:48

    rs485通信沒接收到數(shù)據(jù)發(fā)送了00

    ] = USART1->RDR & 0x1ff;//讀取一次數(shù)據(jù)清除標(biāo)志 USART_flag = 0xff; DMA1_Channel3->CCR &
    發(fā)表于 08-24 16:42

    STM32F030C8T6串口初始化,卡在中斷里面是怎么回事?

    ,ENABLE); } if(RESET != USART_GetITStatus(USART2, USART_IT_TXE))//發(fā)送完成 {
    發(fā)表于 07-03 06:58