一、串口通信
(一)串口協(xié)議和RS-232標準
1.串口通信協(xié)議
串口通信是指串口按位(bit)發(fā)送和接收字節(jié)。盡管比特字節(jié)(byte)的串行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。
串口通信協(xié)議是指規(guī)定了數(shù)據(jù)包的內容,內容包含了起始位、主體數(shù)據(jù)、校驗位及停止位,雙方需要約定一致的數(shù)據(jù)包格式才能正常收發(fā)數(shù)據(jù)的有關規(guī)范。在串口通信中,常用的協(xié)議包括RS-232、RS-422和RS-485
STM32的串口通信接口有兩種,分別是:UART(通用異步收發(fā)器)、USART(通用同步異步收發(fā)器)。
引腳連接方式:
TXD <-----> RXD
RXD <-----> TXD
GND <----->GND
注:RXD:數(shù)據(jù)輸入引腳,接受數(shù)據(jù); TXD:數(shù)據(jù)發(fā)送引腳,數(shù)據(jù)發(fā)送;
對于兩個芯片之間的連接,兩個芯片GND共地,同時TXD和RXD交叉連接。這里的交叉連接的意思就是,芯片1的RxD連接芯片2的TXD,芯片2的RXD連接芯片1的TXD。這樣,兩個芯片之間就可以進行TTL電平通信了。
2.RS232串口標準
RS232串口標準,它的全名是“數(shù)據(jù)終端設備(DTE)和數(shù)據(jù)通訊設備(DCE)之間串行二進制數(shù)據(jù)交換接口技術標準”,該標準規(guī)定采用一個25個腳的DB-25連接器,對連接器的每個引腳的信號內容加以規(guī)定,還對各種信號的電平加以規(guī)定。
下面以計算機和調制解調器之間的通信流程來說明RS-232串行通信原理。考慮當調制解調器處于應答方式下,計算機和調制解調器之間的RS-232信號間的交互關系和工作過程。假定調制解調器是全雙工的,并以RS-232標準規(guī)范工作。
(1)初始狀態(tài)時,RTS、CTS持續(xù)為ON,通過通信程序設置和監(jiān)測RS232引線狀態(tài)。在應答模式下,計算機中的軟件一直監(jiān)視著振鈴指示(RI),等待RI發(fā)出ON信號。
(2)計算機上的通信程序在收到RI信號后,就開始通過振鈴指示器ON/OFF變換的次數(shù)對振鈴進行計數(shù),當?shù)竭_程設定的振鈴次數(shù)時,通信程序就發(fā)生數(shù)據(jù)終端就緒(DTR)信號,強迫調制解調器進入摘機狀態(tài)。
(3)等待2s后(FCC規(guī)定),調制解調器自動開始發(fā)送其應答載波。這時調制解調器發(fā)出調制解調器就緒(DSR)信號通知計算機:它已完成所有的準備工作并等待載波信號。
(4)在持續(xù)發(fā)出DTR信號期間,計算機軟件監(jiān)測DSR信號。當DSR信號變?yōu)镺N時,計算機就知道調制解調器已準備數(shù)據(jù)鏈路的連接,計算機立即開始監(jiān)測數(shù)據(jù)載波監(jiān)測(CD)信號,以證實數(shù)據(jù)鏈路的存在。
(5)當源調制解調器的載波出現(xiàn)于電話線上時,應答調制解調器就發(fā)出CD信號。
(6)通過發(fā)送數(shù)據(jù)線(TD)和接收數(shù)據(jù)線(RD),開始全雙工通信。在數(shù)據(jù)鏈路傳輸期間,計算機通過監(jiān)測CD來確保數(shù)據(jù)鏈路的存在。
(7)通信任務一旦完成,計算機就禁止DTR,調制解調器用除去其載波音調、禁止CD和DSR來響應。隨著鏈路被拆除,調制解調器就會返回初始狀態(tài)。
RS-232串行通信距離較近時(<12m),可以用電纜線直接連接標準RS232端口,若距離較遠需附加調制解調器( Mode),最為簡單的且常用的是三線制接法,即地、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)三腳相連。
3.RS232電平
RS232電平是指RS232串行通信接口中使用的電壓級別。根據(jù)RS232標準,邏輯"1"表示為負電平(通常為-3V至-25V之間),而邏輯"0"表示為正電平(通常為+3V至+25V之間)。這種不對稱的電平表示方式使得RS232能夠在長距離和嘈雜環(huán)境下進行可靠通信。
RS232電平的特點包括:
①高電平范圍為+3V至+25V,低電平范圍為-3V至-25V。
②邏輯"1"使用負電平表示,邏輯"0"使用正電平表示。
③信號電平較高,能夠抵抗干擾,并允許較長的傳輸距離(最長可達50英尺)。
④傳輸速率可達115200 bps(比特每秒)。
4.TTL電平
“TTL集成電路的全名是晶體管-晶體管邏輯集成電路(Transistor-Transistor Logic),主要有54/74系列標準TTL、高速型TTL(H-TTL)、低功耗型TTL(L-TTL)、肖特基型TTL(S-TTL)、低功耗肖特基型TTL(LS-TTL)五個系列。
標準TTL輸入高電平最小2V,輸出高電平最小2.4V,典型值3.4V;輸入低電平最大0.8V,輸出低電平最大0.4V,典型值0.2V。
S-TTL輸入高電平最小2V,輸出高電平最?、耦?.5V,Ⅱ、Ⅲ類2.7V,典型值3.4V;輸入低電平最大0.8V,輸出低電平最大0.5V。
LS-TTL輸入高電平最小2V,輸出高電平最?、耦?.5V,Ⅱ、Ⅲ類2.7V,典型值3.4V;輸入低電平最大Ⅰ類0.7V,Ⅱ、Ⅲ類0.8V,輸出低電平最大Ⅰ類0.4V,Ⅱ、Ⅲ類0.5V,典型值0.25V。
5.RS232電平和TTL電平的區(qū)別
TTL電平標準是 低電平為0,高電平為1(對地,標準數(shù)字電路邏輯)。
RS232電平標準 是 正電平為0,負電平為1(對地,正負3-15V皆可,甚至可以用高阻態(tài))。
(1)電壓
RS232電平的電壓范圍較高,正負電平分別為+3V至+25V和-3V至-25V。而TTL電平的電壓范圍較低,一般為0.2V至3.4V或0V至5V。因此,RS232電平較高,能夠提供更大的信號幅度,使其具有較強的抗噪聲和抗干擾能力。
(2)范圍
RS232電平的電壓范圍較大,它可用于長距離通信,最長傳輸距離可達50英尺,甚至更遠。而TTL電平的傳輸距離較短,一般不超過15米。因此,在需要長距離通信的場景中,RS232電平更為合適。
(3)接口電路
RS232電平使用差分信號傳輸,即發(fā)送線和接收線各自攜帶相反的信號。這種差分傳輸方式可以有效抑制共模干擾,并提高數(shù)據(jù)傳輸?shù)目煽啃?。而TTL電平使用單端信號傳輸,只用一根線傳輸信號,外加一根參考線,也就是地線。那一根線分別攜帶不同的電平表示邏輯"1"和邏輯"0"。TTL電平的接口電路相對簡單,成本較低。
總結:
RS232是一種串行通信接口標準,其電平表示為負電平和正電平,適用于長距離和抗干擾要求較高的通信環(huán)境。與之相比,TTL電平具有低電壓范圍和較短的傳輸距離,適用于短距離通信和成本敏感的應用。
(二)USB/TTL轉232"模塊的工作原理
串口數(shù)據(jù)收發(fā)流程:
以CH340芯片模塊為例
CH340C模塊
CH340C USB轉TTL模塊以CH340C芯片為核心,內部自帶晶振,最高波特率可達2Mbps,軟件兼容CH341驅動,過流保護,引出相應的通訊接口與電源接口,通訊接口帶有指示燈指示工作狀態(tài),通訊穩(wěn)定,體積小。
CH40C特點:
①全速USB驅動,兼容USB2.0
②硬件全雙工串口,內置收發(fā)緩沖區(qū)
③支持波特率50bps~2Mbps
④輸出TTL電平3.3V,兼容5V的IO電平
輸入輸出接口引腳均帶有LED指示燈
電源接口引腳中,5V的接口引腳帶有LED指示燈
t
二、使用HAL庫進行STM32的USART串口通信
(一)UART常用函數(shù)
1.串口句柄
HAL庫在結構上,對每個外設抽象成了一個稱為ppp_HandleTypeDef的結構體,其中ppp就是每個外設的名字。所有的函數(shù)都是工作在ppp_HandleTypeDef指針之下。
例如,使用USART1時,可以定義USART初始化結構體變量(全局變量)huart。
UART_HandleTypeDef huart1;
huart1就被稱為串口的句柄,它被貫穿整個USART收發(fā)的流程。
2.HAL_UART_Transmit
通過該函數(shù)可向串口寄存器 USART_DR 寫入一個數(shù)據(jù),當向該寄存器寫數(shù)據(jù)的時候,串口就會自動發(fā)送。
函數(shù)原型:
3.HAL_UART_Receive_IT
作用是開啟接收中斷,同時設置接收的緩存區(qū)以及接收的數(shù)據(jù)量,并進入回調函數(shù)。
函數(shù)原型:
HAL_UART_Receive_IT函數(shù)是啟動串口接收并且是中斷接收,需要在初始化USART外設之后才能被調用。
在使能了USART接收中斷之后,stm32在每次接收到一個字節(jié)數(shù)據(jù)之后,就會自動運行USART1_IRQHandler函數(shù)一次,但不會每次都運行一次HAL_UART_RxCpltCallback函數(shù)。只有當接收到數(shù)據(jù)字節(jié)數(shù)與在HAL_UART_Receive_IT函數(shù)設定的接收數(shù)目相等時才會運行一次接收完成回調函數(shù)。
注:一定要在進入while前寫一次,為了開啟中斷(回調函數(shù)里面也會寫的)
4.HAL_UART_RxCpltCallback
在判斷到是接到串口數(shù)據(jù)并且數(shù)據(jù)數(shù)目達到設定值時就會調用接收完成回調函數(shù)HAL_UART_RxCpltCallback。這樣我們在回調函數(shù)中實現(xiàn)我們的應用程序。
當CPU向串口發(fā)送數(shù)據(jù),會產生接收中斷,然后進入中斷服務函數(shù),調用回調函數(shù),回調函數(shù)才是我們進行中斷處理的地方
(二)程序編寫
1.STM32CubeMX工程創(chuàng)建
2.編寫程序
(1)STM32系統(tǒng)給windows11連續(xù)發(fā)送“hello windows!”
用keil打開剛剛生成的文件,找到main.c,并在main函數(shù)循環(huán)中使用 HAL_UART_Transmit函數(shù)發(fā)送hello windows!
(2)在持續(xù)發(fā)送“hello windows!”的基礎上,當上位機給stm32發(fā)送一個字符“#”后,stm32暫停發(fā)送“hello windows!”;發(fā)送一個字符“*”后,stm32繼續(xù)發(fā)送
①定義全局變量
打開main.c文件,在void SystemClock_Config(void);之后定義全局變量
②開啟中斷
在進入while循環(huán)之前,寫入HAL_UART_Receive_IT函數(shù),以啟動串口中斷接收
③進行傳輸
在while循環(huán)中添加傳輸代碼
④重寫中斷處理函數(shù)
在main函數(shù)之后重寫中斷處理函數(shù)
文章來源:http://www.zghlxwxcb.cn/news/detail-786874.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-786874.html
到了這里,關于STM32F103C8T6的USART串口通信及中斷的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!