資料介紹
引言STM32F107微控制器是意法半導(dǎo)體推出的高性能32位以CortexM3為內(nèi)核的面向工業(yè)控制的處理器。該處理器內(nèi)部通過(guò)一個(gè)多層的AHB總線(xiàn)構(gòu)架相連,其內(nèi)部集成了豐富的外設(shè),如USART、SPI、ADC等等。另外,STM32F107處理器還提供多達(dá)80個(gè)通用I/O接口,如此豐富的資源使STM32系列微控制器能夠很理想地用于工業(yè)控制。本文設(shè)計(jì)出一種基于STM32F107的可靠串口通信設(shè)計(jì)方案,可以完成STM32F107處理器和PC機(jī)以及其他串口之間的可靠通信[1]。1 串口通信的實(shí)現(xiàn)1.1 硬件設(shè)計(jì)STM32F107處理器的通用同步異步通信單元(USART)提供 5個(gè)獨(dú)立的異步串行接口,并且都能工作在中斷和DMA模式下,支持LIN、智能卡協(xié)議和IRDA SIM ENDEC規(guī)范。USART的字符采用一種特殊的結(jié)構(gòu),它由起始位、數(shù)據(jù)位(8位或者9位)、停止位(1位或者2位)組成。由于STM32F107處理器輸出的是TTL/CMOS電平,而計(jì)算機(jī)的標(biāo)準(zhǔn)配置串口輸出為RS232電平,所以在硬件上采用MAX232進(jìn)行電平轉(zhuǎn)換,電路設(shè)計(jì)比較簡(jiǎn)單。如圖1所示,如果在兩個(gè)處理器之間進(jìn)行串口通信,需要把STM32F107 的UART接口的發(fā)送端與對(duì)端串口的接收端相連,把STM32F107 的UART接口的接收端與對(duì)端串口的發(fā)送端相連[2]。1.2 軟件設(shè)計(jì)和實(shí)現(xiàn)要實(shí)現(xiàn)基于STM32F107 的串口通信,首先需要對(duì)該串口的相關(guān)寄存器進(jìn)行配置,比如串口的波特率、數(shù)據(jù)位長(zhǎng)度和校驗(yàn)位等信息都是需要配置的。然后使能串口時(shí)鐘,設(shè)置相應(yīng)的I/O模式,最后進(jìn)行程序設(shè)計(jì)。串口相關(guān)寄存器的配置信息如表1所列。圖1 串口通信硬件電路圖為了實(shí)現(xiàn)高效的串口數(shù)據(jù)收發(fā),串口通信的程序設(shè)計(jì)一般采用串口的接收中斷、發(fā)送中斷以及FIFO緩存來(lái)實(shí)現(xiàn)。當(dāng)串口有數(shù)據(jù)發(fā)送時(shí),其底層的發(fā)送函數(shù)并不是真正的串口發(fā)送,而是將數(shù)據(jù)寫(xiě)入緩存區(qū),緩存區(qū)按照FIFO的先入先出的結(jié)構(gòu)進(jìn)行組織,寫(xiě)入數(shù)據(jù)到FIFO后使能串口發(fā)送中斷后便退出了,這相當(dāng)于RAM的讀寫(xiě),執(zhí)行速度快,實(shí)際的發(fā)送數(shù)據(jù)在串口發(fā)送中斷服務(wù)程序中完成。表1 串口寄存器的配置表圖2 通信協(xié)議幀當(dāng)串口有數(shù)據(jù)接收時(shí),在接收中斷中使用FIFO緩存接收到的數(shù)據(jù)。當(dāng)收到串口接收數(shù)據(jù)完成或者接收緩沖區(qū)已滿(mǎn)的信息后,通知主程序數(shù)據(jù)接收完成,在主程序中進(jìn)行數(shù)據(jù)處理并清理緩沖區(qū)數(shù)據(jù),等待下一次數(shù)據(jù)接收。主程序中具體步驟如下:①配置串口中斷向量表,包括配置中斷的搶占優(yōu)先級(jí),響應(yīng)優(yōu)先級(jí)、編號(hào)和分組等內(nèi)容。調(diào)用庫(kù)函數(shù)NVIC_Init(&NVIC_InitStructure)。②初始化串口,包括串口時(shí)鐘配置、GPIO配置、根據(jù)參數(shù)初始化并使能串口。由于 STM32F107 固件函數(shù)庫(kù)提供了每一步操作的函數(shù),所以串口的配置非常方便。最后,使能接收和發(fā)送中斷,調(diào)用庫(kù)函數(shù):STM_EVAL_COMInit(COMx, &USART_InitStructure);③在主程序中等待串口接收數(shù)據(jù)完成或緩存區(qū)溢出,該信息由串口狀態(tài)寄存器提供,代碼為:while (1){//判斷是否接收完成或緩存區(qū)溢出if (USART_Rx_Done==1) {//數(shù)據(jù)接收處理……//清空緩沖區(qū)USART_Rx_Buffer_Clear();}}④中斷服務(wù)函數(shù)編寫(xiě),通過(guò)判斷狀態(tài)寄存器USART _SR的RXNE、ORE和TXE位的狀態(tài)來(lái)進(jìn)行接收和發(fā)送數(shù)據(jù)[3]。代碼如下:void USARTx_IRQHandler(void){//判斷是否收到數(shù)據(jù)if (USARTx ->SR&(1<<5)){//接收數(shù)據(jù)USART_ReceiveData(USARTx) ;} //判斷是否溢出if (USARTx ->SR&(1<<3)){//接收數(shù)據(jù)(void)USART_ReceiveData(USARTx);} //如果發(fā)送數(shù)據(jù)寄存器為空,那么左移7位if(USARTx ->SR&(1<<7)){//發(fā)送數(shù)據(jù)USART_SendBufferData();}}2 串口通信協(xié)議制定串口通信協(xié)議按照HDLC規(guī)程設(shè)計(jì),其幀結(jié)構(gòu)如圖2所示。幀結(jié)構(gòu)說(shuō)明如下。(1) 標(biāo)志所有信息傳輸必須以一個(gè)標(biāo)志字符開(kāi)始,且以同一個(gè)字符結(jié)束。從開(kāi)始標(biāo)志到結(jié)束標(biāo)志之間構(gòu)成一個(gè)完整的信息單位,稱(chēng)為一幀。接收端可以通過(guò)搜索標(biāo)志字符來(lái)探知幀的開(kāi)頭和結(jié)束,以此建立幀同步。在兩幀之間只需要一個(gè)這樣的標(biāo)記,兩個(gè)相繼的標(biāo)記構(gòu)成一個(gè)空幀,它被拋棄,而不產(chǎn)生FCS錯(cuò)誤。(2) 地址域在標(biāo)志之后,有一個(gè)地址域。地址域包括接收信息和發(fā)送信息的通信設(shè)備地址,即幀數(shù)據(jù)的接收者和發(fā)送者地址。地址域的寬度為16位,前8位用來(lái)表示接收者的地址,后8位用來(lái)表示發(fā)送者的地址。地址域通常在一對(duì)多或多對(duì)多的串口通信中應(yīng)用。(3) 控制域在地址域之后是控制域,控制域可規(guī)定若干個(gè)命令,控制域占一個(gè)字節(jié)。接收方必須檢查每個(gè)地址,包括二進(jìn)制11111111(十六進(jìn)制0xff),也就是“廣播”地址。不可識(shí)別的地址則被拋棄。(4) 信息域跟在控制域之后的是信息域。信息域包含要傳送的數(shù)據(jù),并不是每一幀都必須傳送數(shù)據(jù),即信息域可以為0。當(dāng)它為0時(shí),這一幀主要是控制命令。(5) CRC校驗(yàn)緊跟在信息域之后的是4字節(jié)的幀校驗(yàn),幀校驗(yàn)采用32位循環(huán)冗余校驗(yàn)碼CRC。除了標(biāo)志域以外,所有的信息都參加CRC計(jì)算。當(dāng)數(shù)據(jù)傳輸時(shí),CRC的高位在前,低位在后。幀校驗(yàn)序列的循環(huán)冗余碼校驗(yàn)簡(jiǎn)稱(chēng)CRC(Cyclic Redundancy Check),它是利用除法及余數(shù)的原理來(lái)作錯(cuò)誤偵測(cè)的。應(yīng)用時(shí),發(fā)送設(shè)備計(jì)算出CRC值并隨數(shù)據(jù)一同發(fā)送給接收設(shè)備,接收設(shè)備對(duì)收到的數(shù)據(jù)重新計(jì)算,并與收到的CRC相比較。若兩個(gè)CRC值不同,則說(shuō)明數(shù)據(jù)通信出現(xiàn)錯(cuò)誤。這里選用以太網(wǎng)的CRC32碼作為幀校驗(yàn)產(chǎn)生方式。3 硬件CRC循環(huán)冗余校驗(yàn)由于串口通信中的數(shù)據(jù)在傳輸和存儲(chǔ)過(guò)程中易受到各種信號(hào)的干擾,容易產(chǎn)生信號(hào)碼元的變化,需要采用相關(guān)的校驗(yàn)方式來(lái)保證信號(hào)傳輸?shù)目煽啃浴Qh(huán)冗余校驗(yàn)技術(shù)主要應(yīng)用于檢驗(yàn)或核實(shí)數(shù)據(jù)傳輸、存儲(chǔ)的正確性和完整性,具有檢錯(cuò)率高、易于實(shí)現(xiàn)的特點(diǎn),因此在工程中廣泛使用。在STM32F107 中內(nèi)置了CRC計(jì)算單元的硬件組件,所以不需要額外設(shè)計(jì)任何硬件電路,而且計(jì)算速度較快。內(nèi)置CRC計(jì)算單元是根據(jù)固定的生成多項(xiàng)式得到任一32位全字的CRC計(jì)算結(jié)果。CRC計(jì)算單元可以在程序運(yùn)行時(shí)計(jì)算出軟件的標(biāo)識(shí),之后與在連接時(shí)生成的參考標(biāo)識(shí)比較,然后存放在指定的存儲(chǔ)器空間[4]。STM32F107 內(nèi)置的CRC計(jì)算單元操作方便,首先復(fù)位CRC模塊,即CRC->CR =0x01。然后,把要計(jì)算的數(shù)據(jù)每32位分為一組,寫(xiě)入到CRC_DR寄存器中,寫(xiě)完數(shù)據(jù)后就可以從CRC_DR寄存器讀出數(shù)據(jù)了。雖然數(shù)據(jù)的讀寫(xiě)都是在CRC_DR寄存器中進(jìn)行,但是實(shí)際上訪(fǎng)問(wèn)的是不同的物理寄存器。STM32F107 內(nèi)置CRC計(jì)算單元框圖如圖3所示。結(jié)語(yǔ)隨著32位以CortexM3為內(nèi)核的STM32F107 微處理器在工業(yè)控制中的廣泛應(yīng)用,串口作為一種微控制器必不可少的通信接口,應(yīng)用也比較廣泛。針對(duì)串口在應(yīng)用過(guò)程中容易出現(xiàn)的誤碼問(wèn)題,本文設(shè)計(jì)出一種基于STM32F107 的可靠串口通信方案,利用STM32F107 內(nèi)置的CRC計(jì)算單元產(chǎn)生校驗(yàn)數(shù)據(jù)來(lái)保證通信的可靠性。該方案可以完成STM32F107 處理器與計(jì)算機(jī)之間以及其他微控制器串口之間的可靠通信。(mbbeetchina)
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- STM32微控制器安全簡(jiǎn)介
- AN3155_基于STM32微控制器引導(dǎo)程序的串口通訊協(xié)議應(yīng)用手冊(cè)
- NAND Flash主機(jī)接口控制器技術(shù)研究
- 關(guān)于數(shù)字濾波器的研究資料下載
- 基于VS1003B的語(yǔ)音通信方法研究資料下載
- STM32單片機(jī)多串口通信仿真測(cè)試技術(shù)研究資料下載
- 串聯(lián)變換器研究資料下載
- STM32L系列微控制器的數(shù)據(jù)手冊(cè)免費(fèi)下載 39次下載
- STM32L4Rxxx和STM32L4Sxxx系列微控制器的參考手冊(cè)免費(fèi)下載 98次下載
- 意法半導(dǎo)體STM32 8位和32位微控制器系列的產(chǎn)品選擇指南資料免費(fèi)下載 6次下載
- STM8和STM32混合信號(hào)微控制器選型手冊(cè)資料免費(fèi)下載 5次下載
- STM32F103XX系列微控制器中文數(shù)據(jù)手冊(cè)的資料免費(fèi)下載 31次下載
- 基于DSP的指紋識(shí)別系統(tǒng)研究資料下載.pdf 15次下載
- STM32 單片機(jī)多串口通信仿真測(cè)試技術(shù)研究_郭勇.pdf下載 14次下載
- 光纖通信復(fù)用技術(shù)的研究資料 12次下載
- 嵌入式系統(tǒng)中微控制器與微處理器的區(qū)別 509次閱讀
- STM32WB0系列無(wú)線(xiàn)微控制器滿(mǎn)足低功耗藍(lán)牙應(yīng)用需求 544次閱讀
- 微控制器與運(yùn)動(dòng)控制器的區(qū)別 686次閱讀
- 微控制器的定義和工作原理 1812次閱讀
- 5G通信FBAR濾波器鍍膜關(guān)鍵技術(shù)研究 845次閱讀
- 實(shí)時(shí)時(shí)鐘為微控制器系統(tǒng)增加了精確的計(jì)時(shí)功能 1382次閱讀
- 基于DS1616與微控制器實(shí)現(xiàn)串行通信接口的設(shè)計(jì) 2022次閱讀
- 基于具有USB功能的STM32微控制器 3826次閱讀
- 如何用電子墨水顯示和stm32微控制器組成電子日歷? 2914次閱讀
- 基于STM32F105微控制器的CAN接口電路設(shè)計(jì) 1.2w次閱讀
- 微控制器的相關(guān)知識(shí)介紹(含義、編程語(yǔ)言) 5344次閱讀
- 串口通信協(xié)議stm32 8356次閱讀
- 微控制器原理及應(yīng)用 1.5w次閱讀
- 基于A(yíng)RM?Cortex?-M7內(nèi)核的高性能微控制器STM32F7系列特色分析 4540次閱讀
- 《振南電子STM32視頻教程》第一講:ARM處理器和STM32微控制器 2252次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 11次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5DIY動(dòng)手組裝LED電子顯示屏
- 0.98 MB | 3次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)PM2.5檢測(cè)系統(tǒng)程序
- 0.83 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537797次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191186次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論