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

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

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

STM32請問串口要發(fā)送數(shù)據(jù)“1”該怎么賦值給USART->DR寄存器?

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

STM32請問串口要發(fā)送數(shù)據(jù)“1”該怎么賦值給USART->DR寄存器?

首先,我們需要了解一下STM32的串口通信模塊。

STM32的串口通信模塊有三個,分別是USART(通用同步異步收發(fā)器)、USART1、USART2。USART是通用串行同步/異步收發(fā)器,除TX和RX引腳外,還包含了同步引腳SCLK和從機選擇引腳NSS,可以用于SPI通信。

今天,我們主要介紹的是USART。USART支持全雙工收發(fā),可以實現(xiàn)異步通信和同步通信。

在STM32的串口通信中,發(fā)送數(shù)據(jù)可以通過往USART->DR寄存器中寫入數(shù)據(jù)來實現(xiàn)。接下來我們來詳細介紹一下USART->DR寄存器。

USART->DR是USART數(shù)據(jù)寄存器,它是一個16位的寄存器,用于發(fā)送和接收數(shù)據(jù)。在發(fā)送數(shù)據(jù)時,將要發(fā)送的數(shù)據(jù)寫入USART->DR寄存器即可。在接收數(shù)據(jù)時,USART->DR寄存器是只讀的,需要通過讀取USART的狀態(tài)寄存器SR來獲取接收到的數(shù)據(jù)。

接下來,本文將詳細介紹如何通過USART->DR寄存器發(fā)送數(shù)據(jù)“1”。

1. 首先,要開啟USART的發(fā)送功能,可以通過設(shè)置USART的控制寄存器USART_CR1實現(xiàn)。在控制寄存器中,有一個叫做USART_CR1.TE的位值表示要不要啟用發(fā)送功能,使能該位可以使USART啟動發(fā)送數(shù)據(jù)的功能。

2. 設(shè)置波特率。波特率是串口通信的重要參數(shù),用于定義串口數(shù)據(jù)傳輸速率。波特率設(shè)置可以通過設(shè)置USART的控制寄存器USART_CR1中的USART_CR1.BRR位進行,該位表示波特率的預(yù)分頻值。

3. 準備發(fā)送的數(shù)據(jù)。在本例中,需要發(fā)送字符“1”,字符在計算機中是以ASCII碼的形式來表示的。因此,我們需要將字符“1”的ASCII碼賦值給USART->DR寄存器。

4. 判斷數(shù)據(jù)是否發(fā)送成功??梢酝ㄟ^判斷USART_SR寄存器中的TXE(傳輸寄存器空標志位)和TC(發(fā)送完成標志位)位值來判斷發(fā)送是否成功。當TXE為1時,表示USART->DR寄存器已經(jīng)空了,可以繼續(xù)向其中寫入數(shù)據(jù)。當TC為1時,表示USART已經(jīng)發(fā)送完畢最后一個數(shù)據(jù),可以進行下一步操作。

5. 清除標志位。在發(fā)送完數(shù)據(jù)之后,需要清除USART_SR寄存器中的TC標志位,以便下一次使用USART進行數(shù)據(jù)發(fā)送。

以上就是發(fā)送數(shù)據(jù)“1”的詳細過程。在實際應(yīng)用中,為了使串口通信更加可靠,需要對發(fā)送的數(shù)據(jù)進行校驗和處理。比如,在發(fā)送的數(shù)據(jù)前面加上一個起始位,以及在數(shù)據(jù)末尾添加一個校驗位等等。當接收方收到數(shù)據(jù)后,需要對數(shù)據(jù)進行校驗,確保數(shù)據(jù)的準確性。

總之,STM32的串口通信功能強大,可以實現(xiàn)多種通信方式。在數(shù)據(jù)的發(fā)送和接收過程中,需要注意一些細節(jié)問題,以保證數(shù)據(jù)的正確傳輸。

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

    關(guān)注

    31

    文章

    5359

    瀏覽量

    120803
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

    356761
  • 異步收發(fā)器
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    10865
  • USART串口
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    6874
收藏 人收藏

    評論

    相關(guān)推薦

    寄存器分為基本寄存器和什么兩種

    ,它們用于存儲指令、數(shù)據(jù)和地址等信息?;?b class='flag-5'>寄存器的容量通常較小,但訪問速度非???,因為它們與CPU的執(zhí)行單元緊密相連。 基本寄存器的分類 基本寄存器可以分為以下幾類: (
    的頭像 發(fā)表于 07-12 10:31 ?1527次閱讀

    做lora通訊用到usart,配置時遇到的usart奇偶校驗問題求解

    今天做lora通訊,用到usart,配置時發(fā)現(xiàn)usart奇偶校驗困惑。假如CR1-&;gt;M、CR1-&;
    發(fā)表于 05-20 08:30

    使用STM8中的UART1,debug下發(fā)現(xiàn)UART1-&;gt;DR寄存器里面沒有數(shù)據(jù)是哪里的問題?

    大家好,我想問一下,STM8中的UART1,在使用過程中遇到這樣的問題,配置好了,再循環(huán)里不斷發(fā)送字符,debug下發(fā)現(xiàn)UART1-&;gt;
    發(fā)表于 05-13 07:56

    調(diào)用ad7193芯片單次采樣函數(shù)前后,讀取其配置寄存器值不正確是什么原因?

    寄存器對應(yīng)增益放大的值不對。 執(zhí)行完單次采樣后,讀配置寄存器值,增益位是正確的。 在單次采樣函數(shù)調(diào)用前,讀配置寄存器值,數(shù)就不正確了。 while(1) { if(flag_
    發(fā)表于 05-10 06:17

    STM32串口DMA通訊接收不到數(shù)據(jù)的原因?

    { Clear=USART2-&;gt;SR;//讀SR寄存器 Clear=USART2-&;gt;
    發(fā)表于 05-09 06:40

    stm8l151的usartDR寄存器無法寫入是怎么回事?

    在線調(diào)試stm8l151處理是,發(fā)現(xiàn)usartdr寄存器無法寫入,手動寫寄存器也寫不進去,會提示write operation to
    發(fā)表于 05-07 06:28

    STM32F103 UART2通過DMA方式發(fā)送和接收,發(fā)不出去數(shù)據(jù)是怎么回事?

    = (uint32_t)( USART2-&;gt;DR);// 設(shè)置串口發(fā)送數(shù)據(jù)
    發(fā)表于 04-30 06:17

    stm32F407 USART發(fā)送數(shù)據(jù),TC不能置位是怎么回事?

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

    HAL庫STM32串口2發(fā)送數(shù)組串口1異常的原因?

    ,u1buf,21,0xFFFF);//接收到數(shù)據(jù)馬上用串口1發(fā)送 HAL_UART_Receive_DMA( huart
    發(fā)表于 04-25 06:01

    STM32F4初始化USART中調(diào)用HAL_USART_Receive_IT開啟接收中斷,HAL庫中為什么專門發(fā)0XFF?

    0xFF。 然后在HAL_USART_RxCpltCallback()中會接收到0x7F(不知從何而來),調(diào)用HAL_USART_Transmit()發(fā)送,函數(shù)返回HAL_OK,但是串口
    發(fā)表于 04-18 07:43

    stm32F429串口采用DMA方式發(fā)送,數(shù)據(jù)流使能失敗的原因?

    ) (USART1-&;amp;gt;DR);//設(shè)置DMA源:串口數(shù)據(jù)
    發(fā)表于 04-17 07:05

    串口3使用USART_SendData(USART1,mydata2)發(fā)送串口1一個命令,發(fā)送數(shù)據(jù)會引起接收中斷嗎?

    串口3使用USART_SendData(USART1,mydata2)發(fā)送串口1一個命令,傳
    發(fā)表于 04-07 07:01

    STM32函數(shù)地址賦值變量后結(jié)果會自動加1是怎么回事?

    )portSTART_ADDRESS_MASK;/* PC */ 即它特地使用了portSTART_ADDRESS_MASK在任務(wù)地址賦值的時候根據(jù)用戶設(shè)置,決定最低位是否清零。 因此個人推斷: ARM會根據(jù)T標志,在對PC寄存器
    發(fā)表于 04-03 06:04

    STM32F103ZET6 HAL庫使用串口1DMA空閑中斷接收數(shù)據(jù)時CNDTR寄存器問題如何解決?

    .hdmarx))也就是串口1的CNDTR寄存器會首先減16,然后恢復(fù)到給定長度,再次進入中斷減去剩余長度(又或當長度超過16字節(jié)后空閑中斷再次進入)例如限定接收數(shù)據(jù)長度為0xFFF,
    發(fā)表于 03-12 08:35

    STM32F405 DMA+空閑中斷接收,DMA_GetCurrDataCounter(DMA1_Stream1)與實際發(fā)送數(shù)據(jù)不符怎么解決?

    USART,每次可以進中斷,但是DMA不接收數(shù)據(jù),接收寄存器一直為0,DR寄存器里顯示是我發(fā)的一幀數(shù)據(jù)
    發(fā)表于 03-07 08:28