STM32F103串口通信寄存器設(shè)置.docx_第1頁
STM32F103串口通信寄存器設(shè)置.docx_第2頁
STM32F103串口通信寄存器設(shè)置.docx_第3頁
STM32F103串口通信寄存器設(shè)置.docx_第4頁
STM32F103串口通信寄存器設(shè)置.docx_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

STM32f103寄存器配置串口通信主程序接收數(shù)據(jù),上位機(jī)串口發(fā)送的數(shù)據(jù)已回車鍵結(jié)束,單片機(jī)接之后將所有數(shù)據(jù)發(fā)回。#include stm32f10x_lib.h#include sys.h/#include ioshezhi_jb.hunsigned char res; /串口接受數(shù)據(jù)臨時(shí)存儲(chǔ)unsigned char enddd=0; /接受完成標(biāo)志unsigned int len=0; /數(shù)據(jù)長度unsigned char shubiao200; /數(shù)據(jù)存儲(chǔ)表,限制長度為200字節(jié)unsigned int t; /通信數(shù)據(jù)操作for循環(huán)控制unsigned long i=0;int main() Stm32_Clock_Init(); /系統(tǒng)時(shí)鐘設(shè)置/io_init(); /io時(shí)鐘以及輸入輸出選項(xiàng)設(shè)置RCC-APB2ENR|=0x4000; /開啟USART1時(shí)鐘;RCC-APB2ENR|=0x0004; /開啟GPIOA口時(shí)鐘;GPIOA-CRH&=0xfffff00f; /PA9、PA10IO設(shè)置清零GPIOA-CRH|=0x000008b0; /P9推挽輸出,max50MHZ;P10上拉輸入RCC-APB2RSTR|=0x4000; /串口復(fù)位 RCC-APB2RSTR&=0xbfff; /串口停止復(fù)位 /USART1-BRR=0x1d4c; /主頻72M時(shí),波特率為9600 USART1-BRR=0x0ea6; /主頻36M時(shí),波特率為9600/USART1-BRR=0x0139; /主頻36M時(shí),波特率為115200/USART1-CR1|=0x200c; /串口開,發(fā)送長度8字節(jié),無校驗(yàn),發(fā)送開,接收開;USART1-CR1|=0x340c; /串口開,發(fā)送長度9字節(jié),偶校驗(yàn),發(fā)送開,接收開; /(有效數(shù)據(jù)還是8位長度) while (1) / shuru_init();/計(jì)算輸入口的值 if(0x0020=(USART1-SR)&0x0020) /如果接受到了一個(gè)字節(jié)的數(shù)據(jù) res=USART1-DR; /讀取串口寄存器數(shù)據(jù)并存在臨時(shí)位置res if(res!=0x0a)shubiaolen=res;len+; /如果該數(shù)據(jù)不是回車符的最后一個(gè)/字節(jié)0x0a,則存入數(shù)表 elseif(shubiaolen-1=0x0d)enddd=1;len-;/如果是0x0a,則判斷前一個(gè)字符是不是0x0d,(回車符ASCII碼為0x0a0d) /是的話則標(biāo)記接受完成標(biāo)志eddd并刪掉已接受到的前一個(gè)字節(jié)的數(shù)據(jù) if(enddd=1) /如果接受完成了 for(t=0;tDR=shubiaot; / while(USART1-SR&0X40)=0); /等待當(dāng)前字節(jié)數(shù)據(jù)發(fā)送結(jié)束 ; enddd=0; for(t=0;tAPB2ENR 參考不完全手冊(cè)P108頁面需要開啟的PORTA和USART1的時(shí)鐘使能位,分別在 bit2 和 bit14,只要將這兩位置 1 就可以使能 PORTA和USART1的時(shí)鐘了。寄存器各位功能定義如下:、 串口復(fù)位寄存器 RCC-APB2RSTR 參考不完全手冊(cè)P124頁面 串口 1 的復(fù)位是通過配置APB2RSTR寄存器的第14位來實(shí)現(xiàn)的。APB2RSTR寄存器的各位描述如圖8.1.1所示。串口的復(fù)位設(shè)置位在APB2RSTR的第14位,通過向該位寫1復(fù)位串口1,寫0結(jié)束復(fù)位。其他串口的復(fù)位位在 APB1RSTR 里面。 波特率設(shè)置寄存器 USART1-BRR參考不完全手冊(cè)P100頁面STM32 的每個(gè)串口都有一個(gè)自己獨(dú)立的波特率寄存器 USART_BRR,通過設(shè)置該寄存器就可以達(dá)到配置不同波特率的目的。USART_BRR 的最低 4 位( 位3:0) 用來存放小數(shù)部分 DIV_Fraction, 緊接著的 12 位( 位15:4) 用來存放整數(shù)部分 DIV_Mantissa,最高 16 位未使用。計(jì)算方法為:首先計(jì)算DIV =主頻/(波特率*16)比如主頻為36MHZ,波特率要設(shè)置為115200時(shí),則DIV=36000000/(115200*16)=19.53125;整數(shù)部分DIV_Mantissa=19=0x13; 小數(shù)部分DIV_Fraction=0.53125*16=8.5;取9,即0x9;故USART1-BRR=0x0139 發(fā)送接收數(shù)據(jù)格式以及串口開關(guān)設(shè)置 USART1-CR1 參考中文手冊(cè)542頁STM32 的每個(gè)串口都有 3 個(gè)控制寄存器 USART_CR13,串口的很多配置都是通過這 3 個(gè)寄存器來設(shè)置的。這里我們只要用到 USART_CR1 就可以實(shí)現(xiàn)我們的功能了,該寄存器的各位描述如下圖所示:該寄存器的高 18 位沒有用到,低 14 位用于串口的功能設(shè)置。 13 UE 為串口使能位。1:開啟串口功能;0:關(guān)閉。12 M 為字長選擇位。0:串口數(shù)據(jù)寄存器USART_DR收發(fā)數(shù)據(jù)長度為8個(gè)字長外加1個(gè)停止位; 1:9位長度,1個(gè)停止位11. 喚醒方式選擇位。0:被空閑總線喚醒;1:被地址標(biāo)記喚醒。(這里默認(rèn)設(shè)置為0)10 PCE 為校驗(yàn)使能位。0:禁止校驗(yàn);1:使能校驗(yàn)。9 PS 為校驗(yàn)位選擇。 0:偶校驗(yàn);1:奇校驗(yàn)。 8. PE中斷使能。0:禁止產(chǎn)生中斷;1:當(dāng)USART_SR中PE為1時(shí)產(chǎn)生串口中斷。默認(rèn)07 TXIE為發(fā)送緩沖區(qū)空中斷使能位。1:當(dāng)USART_SR中的TXE位為1時(shí)將產(chǎn)生串口中斷。6. TCIE 為發(fā)送完成中斷使能位。 1:當(dāng)USART_SR中的TC位為1時(shí)將產(chǎn)生串口中斷。5. RXNEIE 為接收緩沖區(qū)非空中斷使能。1:當(dāng)USART_SR中的ORE或者RXNE位為 1 時(shí)將產(chǎn)生串口中斷。4. 接收緩沖區(qū)非空中斷使能。0:禁止產(chǎn)生中斷;1:當(dāng)USART_SR中的ORE或者RXNE為1時(shí),產(chǎn)生串口中斷。(這里默認(rèn)設(shè)置為0)3. TE 為發(fā)送使能位。1:開啟串口的發(fā)送功能。2. RE 為接收使能位。1:開啟串口的接收功能。1. 接收喚醒。該位用來決定是否把USART置于靜默模式。當(dāng)喚醒序列到來時(shí),硬件會(huì)將其清零。0:接收器處于正常工作模式;1:接收器處于靜默模式。注意: 1在把USART置于靜默模式(設(shè)置RWU位)之前, USART要已經(jīng)先接收了一個(gè)數(shù)據(jù)字節(jié)。否則在靜默模式下,不能被空閑總線檢測喚醒。2當(dāng)配置成地址標(biāo)記檢測喚醒(WAKE位=1),在RXNE位被置位時(shí),不能用軟件修改RWU位。(這里不用管,默認(rèn)設(shè)置為0)0. 發(fā)送斷開幀。(這里不用管,默認(rèn)設(shè)置為0)、 串口狀態(tài)寄存器 USART1-SR 參考中文手冊(cè)540頁串口的狀態(tài)可以通過狀態(tài)寄存器 USART_SR 讀取。 USART_SR 的各位描述如下圖所示這里我們關(guān)注一下兩個(gè)位,第 5、 6 位 RXNE 和 TC6. TC為發(fā)送完成標(biāo)志位。當(dāng)該位被置1時(shí),表示 USART_DR 內(nèi)的數(shù)據(jù)已經(jīng)發(fā)送完了。如果設(shè)置了這個(gè)位的中斷,則會(huì)產(chǎn)生中斷。該位有兩種清零方式: 1)寫USART_DR; 2)直接向該位寫 0。5. RXNE為讀數(shù)據(jù)寄存器。當(dāng)該位被置1時(shí),表示USART_DR已經(jīng)有數(shù)據(jù)接收到了,并且可以讀出來了。這時(shí)候我們要做的就是盡快去讀取 USART_DR,通過讀 USART_DR 可以將該位清零,也可以向該位寫 0直接清除。、 串口數(shù)據(jù)存儲(chǔ)寄存器 USART1-DR 參考不完全手冊(cè)125頁STM32 的發(fā)送與接收是通過數(shù)據(jù)寄存器 USART_DR 來實(shí)現(xiàn)的,這是一個(gè)雙寄存器,包含了 TDR 和 RDR。當(dāng)向該寄存器寫數(shù)據(jù)的時(shí)候,串口就會(huì)自動(dòng)發(fā)送,當(dāng)收到數(shù)據(jù)的時(shí)候,也是存在該寄存器內(nèi)。該寄存器的各位描述如下圖所示它是由兩個(gè)寄存器組成的,一個(gè)給發(fā)送用(TDR),一個(gè)給接收用(RDR),該寄存器兼具讀和寫的功能。 TDR 寄存器提供了內(nèi)部總線和輸出移位寄存器之間的并行接口。 RDR 寄存器提供了輸入移位寄存器和內(nèi)部總線之間的并行接口。當(dāng)使能校驗(yàn)位(USART_CR1 中 PCE 位被置位)進(jìn)行發(fā)送時(shí),寫到 MSB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論