STM32串口工作原理

? ? ? ? STM32的串口是相當豐富的,功能也很強勁。最多可提供5 路串口,有分數波特率發生器、支持單線光通信和半雙工單線通訊、支持LIN、智能卡協議和IrDA SIRENDEC 規范(僅串口3支持)、具有DMA等。

? ? ? ? 串口最基本的設置,就是波特率的設置。STM32的串口使用起來還是蠻簡單的,只要你開啟了串口時鐘,并設置相應IO口的模式,然后配置一下波特率,數據位長度,奇偶校驗位等信息,就可以使用了。下面,我們就簡單介紹下這幾個與串口基本配置直接相關的寄存器。

1,串口時鐘使能。串口作為STM32的一個外設,其時鐘由外設始終使能寄存器控制,這里我們使用的串口1是在APB2ENR寄存器的第14位。除了串口1的時鐘使能在APB2ENR寄存器,其他串口的時鐘使能位都在APB1ENR。

2,串口復位。當外設出現異常的時候可以通過復位寄存器里面的對應位設置,實現該外設的復位,然后重新配置這個外設達到讓其重新工作的目的。一般在系統剛開始配置外設的時候,都會先
執行復位該外設的操作。串口1的復位是通過配置APB2RSTR 寄存器的第14位來實現的。

?3,串口波特率設置。每個串口都有一個自己獨立的波特率寄存器USART BRR,通過設置該寄存器達到配置不同波特率的目的。該寄存器的各位描述如下:

?

4.串口控制。STM32 的每個串口都有3個控制寄存器USART CR1~3 ,串口的很多配置 都是通過這 3個寄存器來設置的。

5,數據發送與接收。STM32的發送與接收是通過數據寄存器USART _DR來實現的,這是一個雙寄存器,包含了TDR和RDR當向該寄存器寫數據的時候,串口就會自動發送,當收到數據的時
候,也是存在該寄存器內。

可以看出,雖然是一個32 位寄存器,但是只用了低9位(DR[8:0]),其他都是保留。 DR[8:0]為串口數據,包含了發送或接收的數據。由于它是由兩個寄存器組成的,一個給發送用(TDR),一個給接收用(RDR),該寄存器兼具讀和寫的功能。TDR寄存器提供了內部總線和輸出移位寄存器之間的并行接口。RDR寄存器提供了輸入移位寄存器和內部總線之間的并行接口。

當使能校驗位(USART CR1 種PCE 位被置位)進行發送時,寫到MSB的值(根據數據的長度不同,MSB是第7位或者第8位)會被后來的校驗位該取代。當使能校驗位進行接收時,讀到的MSB位是接收到的校驗位。

6. 串口的狀態可以通過狀態寄存器 USART SR 讀取串口狀態。

這里我們關注一下兩個位,第5、6 位RXNE 和TC。
RXNE(讀數據寄存器非空),當該位被置1的時候,就是提示已經有數據被接收到了,并且可以讀出來了。這時候我們要做的就是盡快去讀取USART DR,通過讀USART DR可以將該位清零,也可以向該位寫0,直接清除。
TC(發送完成),當該位被職位的時候,表示USARTDR內的數據已經被發送完成了。如果設置了這個位的中斷,則會產生中斷。該位也有兩種清零方式:1:讀USART SR,寫USARTDR。2:直接向該位寫0。

void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissar
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp;//得到整數部分
fraction=(temp-mantissa)*16://得到小數部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENRI=1<<2;//使能PORTA口時鐘
RCC->APB2ENRI=1<<14;//使能串口時鐘
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO狀態設置
RCC->APB2RSTRI=1<<14;//復位串口1
RCC->APB2RSTR&=~(1<<14)://停止復位
//波特率設置
USART1->BRR=mantissa;//波特率設置
USART1->CR1|=0X200C;//1位停止,無校驗位,USART1->CR1|=1<<8;//PE中斷使能
USART1->CR11=1<<5;//接收緩沖區非空中斷使能
MY_NVIC_Init(3,3,USART1 IRQChannel,2);//組2,最低優先級
}

初始化串口硬件設備,啟用中斷:

配置步驟:

(1)打開GPI0和USART1的時鐘
(2)設置USART1兩個管腳GPI0模式
(3)配置USART1數據格式、波特率等參數
(4)使能USART1接收中斷功能
(5)最后使能USART1功能

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43841.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

移動應用穩定性測試

移動應用穩定性測試 使用Monkey等工具進行移動應用穩定性測試是一種常見的自動化測試方法。Monkey工具可以自動生成各種隨機事件來模擬用戶操作&#xff0c;從而測試應用在不同情況下的表現。在執行monkey命令后&#xff0c;主要觀察以下的結果信息來評估移動應用的穩定性。 崩…

前后端通信 —— HTTP/HTTPS

目錄 一、HTTP/HTTPS 簡介 1、HTTP 2、HTTPS 二、HTTP 工作過程 三、HTTP 消息 1、HTTP消息結構 2、HTTP消息示例 四、HTTP 方法&#xff08;常用&#xff09; 1、GET 2、POST 3、PUT 4、DELETE 5、GET與POST對比 五、HTTP 狀態碼&#xff08;常用&#xff09; …

常用的簡單的ps快捷鍵

常用快捷鍵&#xff1a; V移動工具 M矩形選框工具 W快速選擇工具 C裁剪工具 P鋼筆工具 T文字工具 U矩形工具 Z放大/縮放 altshiftctrls儲存為web格式的快捷鍵 altVE新建參考線 ctrlj 復制當前圖層 d 快速把前景色背景色變為黑白 x 切換前景色和背景色 ctrldelete 填充顏色 ct…

關于windows下編譯xLua插件的流程記錄

1.工程準備 1.xLua工程&#xff1a;GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 2.build_xlua_with_libs工程&#xff1a;GitHub - chexiongsheng/build_xlua_with_libs…

Onnx 1-深度學習-Operators

自動化測試-芯片神經網絡-模型ONNX-Operators 概念綜述一: Operators1> Conv2> MaxPool1. 參數2. shape 計算demo3> roipooling1. Roi-pooling 概念2. ROI pooling步驟3. demo4. R-CNN & Fast R-CNN二:維度變換1> Reshape-改變形狀1. 參數2. shape 計算demo3.…

實用調試技巧(Visual Studio)

目錄 Debug 和 Release 的區別 F10 --- 逐過程調試 & F11 --- 逐語句調試 F9 --- 新建/切換斷點 & F5 --- 開始調試 shift F5 & ctrl F5 Debug 和 Release 的區別 Debug&#xff1a;通常為調試版本&#xff0c;它包含調試信息&#xff0c;并且不作任何優化…

亞信科技基于 Apache SeaTunnel 的二次開發應用實踐

亞信科技在Apache SeaTunnel的實踐分享 自我介紹 各位同學好&#xff0c;很榮幸通過Apache SeaTunnel社區和大家進行分享交流。我是來自亞信科技的潘志宏&#xff0c;主要負責公司內部數據中臺產品的開發。 本次分享的主題是Apache SeaTunnel在亞信科技的集成實踐&#xff0c…

商品分類左右聯動

1、先看效果 2、以hooks方法處理&#xff0c;方便復制使用&#xff0c;見代碼 Good.vue文件 <script setup lang"ts" name"goods">import {onMounted, ref, nextTick} from "vue";import useProductScroll from "/utils/hooks/useP…

el-table 鼠標移入更改懸停背景顏色

鼠標懸停時需要更改當前行背景顏色&#xff0c;一開始寫的顏色會改變&#xff0c;但是一閃而過就沒了 這是因為移入移出的動畫效果導致的 .el-table__body {.el-table__row:hover {background-color: pink !important;}} 更改為后面的代碼&#xff0c;就可以了 .el-table__…

Milvus核心設計(2)-----TSO機制詳解

目錄 背景 動機 Timestamp種類及使用場景 Guarantee timestamp Service timestamp Graceful time Timestamp同步機制 主流程 時間戳同步流程 背景 Milvus 在設計上突出了分布式的設計,雖然Chroma 也支持分布式的store 與 query。但是相對Milvus來說,不算非常突出。…

Windows 32 匯編筆記(一):基礎知識

一、80x86 處理器的工作模式 1.1 實模式 實模式概述 實模式&#xff08;Real Mode&#xff09;是80x86處理器最早支持的工作模式&#xff0c;也是最基礎的工作模式。實模式主要用于早期的MS-DOS操作系統和其他簡單的操作環境。在實模式下&#xff0c;處理器能夠直接訪問1MB的…

Python 神器:wxauto 庫——解鎖微信自動化的無限可能

&#x1f4dd;個人主頁&#x1f339;&#xff1a;誓則盟約 ?收錄專欄?&#xff1a;機器學習 &#x1f921;往期回顧&#x1f921;&#xff1a;“探索機器學習的多面世界&#xff1a;從理論到應用與未來展望” &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f…

mysql高并發設計

mysql高并發設計 一、部署方案 https://blog.csdn.net/weixin_37519752/article/details/138728036 方案1&#xff1a;雙主 1、優點 寫入擴展性&#xff1a;兩個節點都可以處理寫入操作&#xff0c;提高了寫入操作的擴展性。 高可用性&#xff1a;在任一節點故障時&#xff…

數據結構復習計劃之復雜度分析(時間、空間)

第二節&#xff1a;算法 時間復雜度和空間復雜度 算法(Algorithm)&#xff1a;是對特定問題求解方法(步驟)的一種描述&#xff0c;是指令的有限序列&#xff0c;其中每一條指令表示一個或多個操作。 算法可以有三種表示形式&#xff1a; 偽代碼 自然語言 流程圖 算法的五…

貓不吃東西還嘔吐是什么原因?可以預防貓咪嘔吐的主食凍干推薦

貓咪突然食欲不振&#xff0c;還出現了嘔吐的癥狀&#xff0c;這究竟是為什么呢&#xff1f;結合我多年養貓的經驗&#xff0c;讓我們一起分析一下可能的原因。 一、 貓不吃東西還嘔吐是什么原因 &#xff08;1&#xff09;首先、排除貓瘟 如果你的貓咪一直家養&#xff0c;…

【Android】基于 LocationManager 原生實現定位打卡

目錄 前言一、實現效果二、定位原理三、具體實現1. 獲取權限2. 頁面繪制3. 獲取經緯度4. 方法調用5. 坐標轉換6. 距離計算7. 完整代碼 前言 最近公司有個新需求&#xff0c;想要用定位進行考勤打卡&#xff0c;在距離打卡地一定范圍內才可以進行打卡。本文將借鑒 RxTool 的 Rx…

php快速入門

前言 php是一門腳本語言&#xff0c;可以訪問服務器&#xff0c;對數據庫增刪查改&#xff08;后臺/后端語言&#xff09; 后臺語言&#xff1a;php&#xff0c;java&#xff0c;c&#xff0c;c&#xff0c;python等等 注意&#xff1a;php是操作服務器&#xff0c;不能直接在…

QUdpSocket 的bind函數詳解

QUdpSocket 是 Qt 框架中用于處理 UDP 網絡通信的類。bind 函數是此類中的一個重要方法&#xff0c;它用于將 QUdpSocket 對象綁定到一個特定的端口上&#xff0c;以便在該端口上接收 UDP 數據包。 函數原型 在 Qt 中&#xff0c;bind 函數的原型通常如下所示&#xff1a; b…

微軟開源項目GraphRAG——基于知識圖譜的RAG簡介

前言 在大型語言模型&#xff08;LLM&#xff09;的前沿研究中&#xff0c;一個核心挑戰與機遇并存的領域是擴展它們的能力&#xff0c;以解決超出其訓練數據范疇的問題。這不僅要求模型在面對全新數據時仍能保持卓越表現&#xff0c;還意味著開辟了全新的數據分析可能性&…

JVM 堆內存分配過程

設置堆內存大小和 OOM Java 堆用于存儲 Java 對象實例&#xff0c;那么堆的大小在 JVM 啟動的時候就確定了&#xff0c;我們可以通過 -Xmx 和 -Xms 來設定 -Xms 用來表示堆的起始內存&#xff0c;等價于 -XX:InitialHeapSize-Xmx 用來表示堆的最大內存&#xff0c;等價于 -XX…