當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]一、異步串口通信協(xié)議? ? ? ? STM32 的串口非常強(qiáng)大,它不僅支持最基本的通用串口同步、異步通信,還具有 LIN 總線功能(局域互聯(lián)網(wǎng))、IRDA 功能(紅外通信)、SmartCard 功能。



一、異步串口通信協(xié)議

? ? ? ? STM32 的串口非常強(qiáng)大,它不僅支持最基本的通用串口同步、異步通信,還具有 LIN 總線功能(局域互聯(lián)網(wǎng))、IRDA 功能(紅外通信)、SmartCard 功能。一般我們利用串口打印調(diào)試信息。

?

二、串口工作過程分析

? ? ? ? 我們只需要大概了解串口發(fā)送的過程即可。從下至上,我們看到串口外設(shè)主要由三個(gè)部分組成,分別是波特率控制、收發(fā)控制和數(shù)據(jù)存儲轉(zhuǎn)移。

1、 波特率

? ? ? ? 波特率,即每秒傳輸?shù)亩M(jìn)制位數(shù),用 b/s (bps)表示,通過對時(shí)鐘的控制可以改變波特率。在配置波特率時(shí),我們向波特比率寄存器 USART_BRR 寫入?yún)?shù),修改了串口時(shí)鐘 的分 頻 值USARTDIV 。USART_BRR 寄存 器 包括 兩 部分 , 分別 是 DIV_Mantissa(USARTDIV 的整數(shù)部分)和 DIV_Fraction(USARTDIV 的小數(shù))部分,最終,計(jì)算公式為 USARTDIV=DIV_Mantissa+(DIV_Fraction/16)。

USARTDIV 是對串口外設(shè)的時(shí)鐘源進(jìn)行分頻的,對于 USART1,由于它掛載在 APB2總線上,所以它的時(shí)鐘源為 f PCLK2 ;而 USART2、3 掛載在 APB1 上,時(shí)鐘源則為 fPCLK1,串口的時(shí)鐘源經(jīng)過 USARTDIV 分頻后分別輸出作為發(fā)送器時(shí)鐘及接收器時(shí)鐘,控制發(fā)送和接收的時(shí)序。

2、 收發(fā)控制

? ? ? ? 寄存器 :CR1、CR2、CR3 和 SR,即USART 的三個(gè)控制寄存器(Control Register)及一個(gè)狀態(tài)寄存器(Status Register)。通過向寄存器寫入各種控制參數(shù)來控制發(fā)送和接收,如奇偶校驗(yàn)位、停止位等,還包括對USART 中斷的控制;串口的狀態(tài)在任何時(shí)候都可以從狀態(tài)寄存器中查詢得到。具體的控制和狀態(tài)檢查,我們都是使用庫函數(shù)來實(shí)現(xiàn)的。

3、 數(shù)據(jù)存儲轉(zhuǎn)移

? ? ? ? 收發(fā)控制器根據(jù)我們的寄存器配置,對數(shù)據(jù)存儲轉(zhuǎn)移部分的移位寄存器進(jìn)行控制。當(dāng)我們需要發(fā)送數(shù)據(jù)時(shí),內(nèi)核或 DMA 外設(shè)(一種數(shù)據(jù)傳輸方式,在后面介紹)把數(shù)據(jù)從內(nèi)存(變量)寫入到發(fā)送數(shù)據(jù)寄存器 TDR 后,發(fā)送控制器將適時(shí)地自動(dòng)把數(shù)據(jù)從 TDR 加載到發(fā)送移位寄存器,然后通過串口線 Tx,把數(shù)據(jù)一位一位地發(fā)送出去,當(dāng)數(shù)據(jù)從 TDR轉(zhuǎn)移到移位寄存器時(shí),會(huì)產(chǎn)生發(fā)送寄存器 TDR 已空事件 TXE,當(dāng)數(shù)據(jù)從移位寄存器全部發(fā)送出去時(shí),會(huì)產(chǎn)生數(shù)據(jù)發(fā)送完成事件 TC,這些事件可以在狀態(tài)寄存器中查詢到。

而接收數(shù)據(jù)則是一個(gè)逆過程,數(shù)據(jù)從串口線 Rx 一位一位地輸入到接收移位寄存器,然后自動(dòng)地轉(zhuǎn)移到接收數(shù)據(jù)寄存器 RDR,最后用內(nèi)核指令或 DMA

?

三、UART

串口配置流程:

(1)??????使能串口1的時(shí)鐘

(2)??????配置串口1的I/O

(3)??????配置串口1的工作模式,具體為波特率為 115200 、8 個(gè)數(shù)據(jù)位、1 個(gè)停止位、無硬件流控制。即 115200 8-N-1。


void?USART1_Config(void)
{
??GPIO_InitTypeDef?GPIO_InitStructure;?//?串口IO結(jié)構(gòu)體
??USART_InitTypeDef?USART_InitStructure;

??/*?配置串口時(shí)鐘?*/
??RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1?|?RCC_APB2Periph_GPIOA,?ENABLE);

??/*?TX?--PA9?--?通用推挽式輸出?--?50MHZ?*/
??GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_9;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;
??GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
??GPIO_Init(GPIOA,?&GPIO_InitStructure);

??/*?RX?--PA10?--?輸入*/
??GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_10;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_IN_FLOATING;
??GPIO_Init(GPIOA,?&GPIO_InitStructure);

??/*?串口初始化?--?115200-8-1?*/
??USART_InitStructure.USART_BaudRate?=?115200;?//?波特率115200
??USART_InitStructure.USART_WordLength?=?USART_WordLength_8b;?//?8位數(shù)據(jù)位
??USART_InitStructure.USART_StopBits?=?USART_StopBits_1;?//?1位停止位
??USART_InitStructure.USART_Parity?=?USART_Parity_No?;?//?無奇偶校驗(yàn)位
??USART_InitStructure.USART_HardwareFlowControl?=?USART_HardwareFlowC?ontrol_None;?//?無硬件流
??USART_InitStructure.USART_Mode?=?USART_Mode_Rx?|?USART_Mode_Tx;?//?配置串口的模式。為了配置雙線全雙工通信,需要把?Rx?和?Tx?模式都開啟。
??USART_Init(USART1,?&USART_InitStructure);?//?填充完結(jié)構(gòu)體,?向寄存器寫入配置參數(shù)
??USART_Cmd(USART1,?ENABLE);?//?使能?USART1?外設(shè)
}


? ? ? ? 要想 printf() 函數(shù)工作的話,我們需要把 printf() 重新定向到串口中。為了實(shí)現(xiàn)重定向 printf() 函數(shù),我們需要重寫 fputc() 這個(gè) C 標(biāo)準(zhǔn)庫函數(shù),因?yàn)?printf()在C 標(biāo)準(zhǔn)庫函數(shù)中實(shí)質(zhì)是一個(gè)宏,最終是調(diào)用了 fputc() 這個(gè)函數(shù)。


//?重定向到串口
int?fputc(int?ch,?FILE?*f)
{
??/*?發(fā)送一個(gè)字節(jié)數(shù)據(jù)到?串口?*/
??USART_SendData(USART1,?(uint8_t)?ch);

??/*?等待發(fā)送完畢?*/
??while?(USART_GetFlagStatus(USART1,?USART_FLAG_TC)?==?RESET);

??return?(ch);
}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉