二、部分例程**
uart,也就是非同步序列收發器,使用uart與外界相連最少只要三條線:txd(傳送)、rxd(接收)和gnd(地線)。uart串列埠的介面電平有ttl和rs-232兩種,在正電原子的這款mini linux開發板上有ch340晶元,可以實現usb和串列埠ttl訊號之間的轉換,這裡用到的是uart1,因此在電腦和開發板之間的串列埠uart通訊只需要一條usb線即可。
下圖是uart通訊格式:
資料線一開始空閒狀態的時候為高電平,要傳輸資料時先將資料線拉低,表示開始傳輸資料,後面即為要傳輸的資料(可以通過設定選擇資料位數),資料傳送完成後,如果使能了奇偶校驗,就進行校驗,如果關閉則跳過。最後就是停止位(位數可以選擇)。
根據i.mux6u參考手冊中的時鐘樹圖,可以看出uart的時鐘源可以通過設定ccm_cscdr1中的uart_clk_sel位來選擇是pll3進行6分頻(80mhz)或者是osc時鐘(24mhz)。之後還可以設定該暫存器的uart_clk_podf進行1~64分頻,產生最終的uart時鐘源。
i.mux6u串列埠波特率的設定原理基於三個暫存器,分別是uart_ufcr、uart_ubir和uart_ubmr暫存器。其中uart_ufcr暫存器用到其bit[9:7],可以在uart時鐘源的基礎上再進行分頻。然後再根據公式設定uart_ubir和uart_ubmr的bit[15:0]。下面為波特率設定的具體公式:
例程中給出了兩種波特率設定的方式:
①、根據公式手動配置三個暫存器的值,達到理想的波特率(每次轉換不同的波特率需要重新計算配置三個暫存器值的)。
②、使用波特率配置函式void uart_setbaudrate(uart_type *base, unsigned int baudrate, unsigned int srcclock_hz);(可以直接將想要的波特率寫入函式,函式將自動配置)。
①、uart_urxd暫存器
bit[7:0]儲存著串列埠收到的資料。
②、uart_utxd暫存器
bit[7:0]儲存著串列埠要傳送的資料。
③、uart_ucr1暫存器
bit0用來使能和禁止uart,bit14為自動控制波特率使能位(僅進行介紹,並沒有使用)。
④、uart_ucr2暫存器
bit0為軟體復位位,為0時復位uart。
bit1,bit2分別是使能uart的接收和傳送。
bit5設定資料為長度(0表示7位資料位,1表示8位資料位)。
bit6設定停止位(0表示1位停止位,1表示2位停止位)。
bit7設定奇偶校驗(0表示偶校驗,1表示奇校驗)。
bit8時奇偶校驗位的使能位,為1時使能,0時關閉。
⑤、uart_ucr3暫存器
bit2必須為1(手冊中note寫到必須一直置1)。
⑥、uart_usr2暫存器
bit0為1的時候表示有資料可以讀取。
bit3為1的時候表示資料傳送完成。
uart還有許多其他的暫存器,本例程沒有使用到,可以自行查閱。
下面時總的uart初始化的**。
/* uart1初始化總函式 */
void
uart_init
(void
)/* ucr3暫存器的bit2必須置1 */
/* 手動配置波特率 */
#if 0
/* 設定波特率為115200 */
uart1->ufcr &=~
(7<<7)
;/* 對rfdiv進行清零 */
uart1->ufcr |=(
5<<7)
;/* 1分頻,uart_clk = 80mhz */
uart1->ubir =71;
uart1->ubmr =
3124
;#endif
/* 只用函式配置波特率 */
uart_setbaudrate
(uart1,
115200
,80000000);
uart_enable
(uart1)
;/* 開啟uart1,通過置1uart1_ucr1暫存器bit0 */
正點原子 Mini Linux BSP工程管理
靜態模式 其他疑問 模仿stm32驅動開發實驗中,主要是在.s檔案中新增了清除.bss段資料 未初始化的資料段 的 在.件下對時鐘,io暫存器組的基位址進行巨集定義,並構造了對應的結構體 注意暫存器位址的連續性 最後將各個外設的暫存器組基位址強轉為對應的結構體指標並進行巨集定義,這樣在主函式中就能像...
(正點原子例程)wifi實驗(7 16)
正點原子wifi實驗分析 fatfs檔案系統分為三個層 應用層 fatfs模組 fats模組提供底層介面驅動層。1.應用層只需要呼叫fats提供的介面函式,如f open f read f write和f close等。2.fatfs模組提供的是ff.c和ff.h.除非有必要,一般情況下只需要直接包...
正點原子ucosIII學習筆記(一)
最近又開了新坑,在學過stm32後,我選擇去學學嵌入式作業系統,就從ucosiii開始好了。我看的是正點原子ucosiii的課程。第一節主要是介紹了下裸機跑程式和加作業系統跑程式的區別 裸機的話,乙個程式可分為前端和後端。後端就是乙個大迴圈,通過乙個死迴圈,不斷的呼叫hadeware裡函式的api,...