DR寄存器中寫入數(shù)據(jù)來實(shí)" />

RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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的串口通信模塊有三個(gè),分別是USART(通用同步異步收發(fā)器)、USART1、USART2。USART是通用串行同步/異步收發(fā)器,除TX和RX引腳外,還包含了同步引腳SCLK和從機(jī)選擇引腳NSS,可以用于SPI通信。

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

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

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120230
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

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

    關(guān)注

    0

    文章

    36

    瀏覽量

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

    關(guān)注

    0

    文章

    32

    瀏覽量

    6818
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    做lora通訊用到usart,配置時(shí)遇到的usart奇偶校驗(yàn)問題求解

    今天做lora通訊,用到usart,配置時(shí)發(fā)現(xiàn)usart奇偶校驗(yàn)困惑。假如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寄存器無法寫入,手動(dòng)寫寄存器也寫不進(jìn)去,會(huì)提示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置位,但此時(shí)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()中會(huì)接收到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一個(gè)命令,發(fā)送數(shù)據(jù)會(huì)引起接收中斷嗎?

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

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

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

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

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

    如何在sdk的軟件開發(fā)中寄存器賦值?

    請問,在hbird-e-sdk軟件開發(fā)平臺(tái)中,怎么在c文件中寄存器賦值,用指針會(huì)賦值失敗
    發(fā)表于 01-10 07:51
    RM新时代网站-首页