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