串口,可說是嵌入式開發中重要的開發工具了。通過串口,我們可以和開發板進行交互,同時也可以打印芯片內部的一些信息。
ARM11的串口使用也是比較簡單的。當然首先需要配置一下。
以上是串口驅動開發的流程。首先對串口進行初始化,然后實現發送和接收。
以上是串口的結構圖。對于接收和發送,都有一個64字節大小的FIFO。對于發送來說,如果使用FIFO的話,如果FIFO沒有滿,那么發送的數據首先發送到FIFO中,然后FIFO中的數據會自動的發送到發送移位寄存器中通過串口發送出去。接收也是一樣的道理。
簡單的使用就是不使用FIFO。數據直接發送到發送移位寄存器中發送。
下面就開始串口程序的設計了,
一、首先是對串口初始化。
1、 設置管腳為串口模式
串口端口和普通IO口是共用的。這個就要看OK6410的原理圖。
從原理圖中,接收是GPA0,發送時GPA1。所以第一步要先去配置管腳功能。
從GPIO章節得到,對于GPA0-1,配置為0010的時候,是串口的功能。
所以,代碼就是
2、設置串口工作模式
我們知道,串口是有幾種模式的,數據位是幾位,有沒有奇偶校驗位,停止位是幾位。這個就通過ULCONx寄存器控制的。
我們使用的是uart0。配置的寄存器就是ULCON0。
配置成8位數據模式,沒有奇偶校驗位,1位停止位,普通的串口模式。
代碼就是
3、設置工作模式
串口是可以工作在三個模式下,一個是中斷模式,第二個是DMA方式,第三個就是輪詢方式。
這里,不使用DMA,也不使用中斷,就配置為輪詢模式。
這個配置是通過UCONx寄存器配置。同樣,這個寄存器有4個,對應串口0-3。這里配置UCON0寄存器。
主要關心以下幾位
第一個是選擇串口的時鐘源。選擇PCLK。
后面兩個是配置串口的接收和發送模式,是工作在中斷或者輪詢,還是工作在DMA模式。配置為中斷或者輪詢。
代碼就為:
4、波特率設置
波特率是串口中最重要的設置了,如果這個波特率設置得不對的話,那么就不能正常的接收和發送數據了。
S3C6410的波特率配置通過兩個寄存器配置,一個配置整數,一個配置小數。
以上是配置串口波特率的公式。我們使用的是PCLK。使用的公式就是
當然這個除下來不一定能整除,就會有小數部分。所以就需要對小數處理。
num of 1’s in UDIVSLOTn/16 = 小數部分。
得到num of 1’s in UDIVSLOTn值,在查上面的表格,得到真正配置小數寄存器的數據。
舉例說明:
之前時鐘,將PCLK配置成66M。波特率采用115200。
得到整數的值是34,小數是0.8。
查表,13對應0xDFDD。
所以,整數的寄存器配置為34。小數的寄存器配置為0xDFDD。
UBRDIVx對應串口x的波特率設置的整數部分。UDIVSLOTx對應串口x的波特率設置的小數部分。
代碼就是:
以上,就是整個串口的初始化了。初始化后,我們就可以使用串口發送數據和接收數據了。
二、串口發送數據
這個就比較簡單了,和51單片機一樣,有一個寄存器用來保存發送的數據。當往這個寄存器寫數據,硬件會自動的將該數據通過串口發送出去。
不過呢,在發送之前,是需要檢查上一次數據是否發送結束。如果沒有發送結束的話,就需要等待。這個也是通過一個狀態寄存器來知道的。
從這個寄存器,就可以知道,發送數據是否完成以及是否接受到新數據。對于發送來說,就要檢查第二位是否為0。為0,說明上一次數據是發送結束的。
代碼就是:
三、串口接收
這個也是比較簡單了,同樣,有一個寄存器保存接收的數據,不過和51不一樣的是,51的發送和接收都是同一個寄存器SBUF。但是S3C6410是有兩個的。
同樣,在讀取數據之前,需要檢查下,是否有數據接收,有數據接收,才讀取數據。檢測之前數據發送說過,檢測狀態寄存器的第0位。
代碼就是
這個地方,在讀取中加入了一些處理,為了對接收到的數據進行回顯。每接收到一個數據,判斷該數據是否是ox0d(換行符n),0x0a(r)。如果是這兩個數據的話,就發送0x0d和0x0a。否則就將接收的數據發送出去。關于n和r大家可以自行百度下。
剩下就是在main函數中,編寫簡單的測試代碼即可。
先串口初始化,然后無限循環的讀取串口接收的數據,判斷在將數據回發。這樣,就可以在串口助手中看到,發什么,就顯示什么,因為芯片將發送的數據回發了回來。
對比STM32
STM32的串口驅動開發和S3C6410的驅動開發也差不多,先對串口進行初始化,然后在寫串口發送和串口接收。原理都是一樣。
以下配置和S3C6410的串口配置一樣進行說明。8位數據位,沒有奇偶校驗位,1位停止位,波特率115200。
來看看結構圖,這似乎是要比S3C6410的串口模塊要復雜些。不過基本的東西是一樣的,有發送移位寄存器,接收移位寄存器。發送有個數據寄存器,接收有個數據寄存器,不過對于STM32來說,發送和接收的寄存器是同一個。即這個寄存器即可發送,也可接收。
和S3C6410的串口流程一樣。
一、串口初始化
1、 管腳功能配置。
對于串口1,其使用的管腳是PA9和PA10。STM32的復用功能配置和S3C6410配置就不一樣了。S3C6410的GPIO配置中,有對GPIO的功能配置。但是STM32的GPIO配置就沒有。只能把GPIO配置成之前說的8種模式。
但是手冊中,也說明了,對于復用功能,管腳配置的功能應該是什么。
使用全雙工模式,發送配置為推挽復用輸出。接收配置為浮空輸入。
這里,就不說使用寄存器開發了,而是使用庫函數開發了。
這個地方要注意的是,對于管腳的復用功能,要打開對應復用功能的時鐘,這里是串口1的時鐘。另外還要打開總的復用功能時鐘,即AFIO時鐘。
二、串口初始化
12位要設置為0。表示是8個數據位。10位要設置為0,禁止校驗。同時也應該將13位給置1,表示串口使能。
位3和位2也要置1,表示使能接收和發送。
其他位是和中斷有關系的,這里沒有用到中斷,都設置為0。所以這個寄存器可以設置為0x200C。
這個寄存器主要設置停止位的,將13:12設置為00。表示1個停止位。但是默認為這個值就是0。所以這個寄存器不用設置。
最后就是設置波特率了。當然也是有公式計算的。和S3C6410一樣,有整數部分和小數部分。這個就參考STM32中文參考手冊的524也就好了。不過STM32為我們提供了一個表,有了這個表,我們就不用去計算了。
對于串口1,是掛在APB2總線上的,而APB2總線的時鐘一般是配置為72M。對于19200,的波特率,72M下計算出來的值是234.735。
對于整數就是234。對于小數,就是0.735*16=11.76,取12。注意,這里得到小數后,不用再查表。
將計算出來的值,填寫到該寄存器即可。可以看出,STM32的整數和小數合并成一個寄存器了。
以上操作,就對串口1進行初始化了。比較簡單吧。就配置幾個值就行了。
當然是用庫開發的話,就更簡單了。
三、串口發送
這個和S3C6410就一樣了。檢測上次數據是否發完,發完了就發下一個數據。檢測是通過檢測狀態寄存器。
位6和發送有關系,位5和接收有關系。
當然有個發送寄存器。不過對于STM32,接收和發送是使用的同一個寄存器,和51一樣。
發送的代碼就是
四、串口接收
接收的代碼就是
測試的方法和S3C6410的一樣,這里就不說了。
以上就是整個串口的開發。包括了S3C6410和STM32。可見,開發都是差不多一樣的,配置各種寄存器,讓串口初始化,然后再對串口進行讀寫。
一般來說,對于串口的讀,是通過中斷來讀的。這樣,CPU就不用一直判斷是否有數據接收而暫停,就可以去做其他很多事情。中斷的配置也是比較容易了,可以參考前面的外部中斷,對中斷進行配置。
有了串口,以后調試,就不用再靠led了。直接通過串口打印即可了。
上一篇:基于S3C6410的ARM11學習(十八) 移植printf和scanf
下一篇:基于S3C6410的ARM11學習(十五) MMU來了
推薦閱讀
史海拾趣
進入21世紀后,Harris公司經歷了重要的戰略轉型。2019年,Harris與L3 Technologies合并成立了L3Harris Technologies。這次合并旨在通過整合兩家公司的技術、資源和市場優勢,打造一家綜合性的國防和信息技術公司。合并后的L3Harris在通信系統、雷達系統、太空和導航系統等多個領域均取得了顯著進展,進一步提升了其在電子行業中的競爭力。
隨著技術的不斷成熟和市場的不斷擴大,Astec開始積極尋求市場拓展的機會。公司不僅加大了在國內市場的宣傳力度,還通過參加國際電子展會等方式,將產品推向了國際市場。同時,Astec還注重品牌形象的建立,通過提供優質的產品和服務,逐漸樹立了良好的品牌形象。
隨著全球環保意識的提高,Cressall積極響應綠色生產的號召。公司投入資金研發環保型功率電阻器,采用環保材料和生產工藝,減少了對環境的污染。同時,公司還加強了對廢棄物的處理和回收利用,實現了資源的循環利用。這些環保措施不僅提升了公司的社會形象,還為公司帶來了更多的商機。
隨著市場競爭的加劇,Crystal Semiconductor Corp意識到只有不斷創新才能在行業中立足。于是,公司加大了對研發的投入,引進了一批高端人才。經過數年的努力,公司成功開發出了一種新型的半導體制程工藝,大幅提高了晶體管的性能和可靠性。這一創新不僅為公司帶來了豐厚的利潤,也為整個半導體行業樹立了新的標桿。
隨著環保意識的日益增強,Captive Fastener公司積極響應國家環保政策,推動生產方式的綠色轉型。公司引進先進的環保生產設備和技術,減少生產過程中的污染排放。同時,公司還研發出可回收再利用的緊固件產品,為電子行業的可持續發展做出了貢獻。
Acmelux Taiwan Inc公司深知人才是企業發展的根本。因此,公司高度重視人才培養和團隊建設。通過設立完善的培訓體系、提供廣闊的發展平臺以及實施激勵機制,Acmelux吸引了大批優秀人才的加入。這些人才在公司的發展過程中發揮了重要作用,為公司創造了巨大的價值。同時,公司還注重團隊建設,通過定期的團建活動、培訓等方式,增強員工的凝聚力和向心力,為公司的發展提供了有力的保障。
歐姆龍日前推出新的V750讀取器平臺,這一平臺支持面向美國(915MHz), 歐洲(867MHz)和日本(953MHz)的全球性頻段。歐姆龍設計并生產的這一V750系列首次推向歐洲和日本市場,而在美國則作為現有的V740 EPC UHF讀取器產品的擴充。 V750讀取器平臺將帶來 ...… 查看全部問答∨ |
怎么說呢,最為外圍電路,特別是以DSP為體系的方式的時候fpga應用的很多,很廣,可以設計,編程,自由度大的很,現在就發幾篇論文,放在論文話題下面也是合適的啦!管理員看著辦吧! 哈工大的強人的!… 查看全部問答∨ |
本人應用PB編寫了一個簡單的與硬件無關的流接口驅動程序,程序編譯無錯誤。通過更改dirs文件和該驅動的FileView中的platformbib和platform.reg文件,實現驅動在系統啟動時自動加載。編譯無錯誤。但在下載操作系統映像到實驗箱時,超級終端出現如下 ...… 查看全部問答∨ |
如題,根據資料進行SNOP空操作的時候,SPI方式存取。 需要讀取狀態字字節。 用示波器能看到SO口有波形輸出,但用程序讀不下來。 根據時序圖是按位邊寫邊讀,有編過這方面的大俠沒有?… 查看全部問答∨ |
8位單片機中大整型數如果要頻繁做除法和取模運算應該怎樣提高執行速度? 8位單片機中大整型數如果要頻繁做除法和取模運算應該怎樣提高執行速度? 主要是解決數據的顯示問題,比如有個超過7位的數據在不斷的更新,數碼管也要不停的更新顯示,這其中的轉換會非常耗時(全是除法和取模運算),有沒有能提高速度 ...… 查看全部問答∨ |
|
問這個問題顯得我比較懶哦::L 51會了!MSP430之前參加比賽時也學的差不多了!可是由于電腦并口好像壞了就沒有繼續玩!想學習下AVR或者PIC,但又不知道如何選擇!性能相近的AVR和PIC哪個單片機用的多啊在企業里?入門芯片如何選擇呢?我現在快要畢 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析