華大微控制器 串列埠通訊多位元組

2021-10-09 03:26:35 字數 1896 閱讀 7877

2.初始化**

3.傳送**:

4.接收中斷**

這部分可以直接看使用者手冊的uart章節。我保證肯定講的比我詳細。裡面也有各種暫存器,學會看資料手冊是非常重要的,我也是工作後才明白的。之前學習stm32都是看別人的例程跑通就移植了。怎麼實現壓根不管。第一次用這種資料比較少的微控制器,你能依靠的只有幾百頁的手冊了。一遍不懂看多幾遍。。。

傳送資料

傳送資料時,與 uartx_scon.ren 的值無關,將所傳送資料寫入 uartx_sbuf 暫存器中,資料就會從 txd 移出(低位在先,高位在後)。

接收資料

接收資料時,需將 uartx_scon.ren 位置 1,並將 uartx_isr.ri 位清 0。開始接收 rxd 上資料(低位在先,高位在後),當接收完畢,可以從 uartx_sbuf 暫存器讀出。

接收快取

通用 uart(uart0/1)接收端有乙個幀長度(8/9bits)的接收快取,也就是說當一幀資料接收完畢後,接收快取中的資料會被一直保持,直到下一幀資料的 stop 位接收完畢後,接收快取才會更新為新一幀資料。

傳送快取

通用 uart(uart0/1)傳送端不支援傳送快取。如果在傳送資料過程中,填寫uartx_sbuf 暫存器,將會破壞當前正在傳送資料。軟體應該避免這種操作。

基本串列埠通訊用demo都可以跑通的,但是demo都是基於乙個位元組的,在實際使用中,通常都是傳送多個位元組或者字串的。因此我參考了野火的多位元組傳送和字串傳送的**。自己寫了多位元組傳送**。

用中斷方式,自己寫傳送函式,開啟傳送中斷,只需傳送第乙個位元組,傳送完成後會進入串列埠中斷,中斷中判斷是否是傳送中斷,如果是,判斷是否已經傳送最後乙個位元組,如果是,關閉傳送中斷;如果沒有傳送到最後乙個位元組,則傳送下乙個位元組。2.查詢方式,從第乙個位元組迴圈傳送,查詢等待傳送完成標誌,判斷是否是最後乙個位元組,不是,迴圈傳送乙個位元組,是最後乙個位元組,退出迴圈。要傳送的內容可以放在乙個陣列之中-

//串列埠0引腳配置**

void

uart_portinit

(void

)//串列埠配置初始化

void

(void

)

//傳送乙個位元組

void uart_sendbyte(m0p_uart_typedef* uartx,uint8_t ch)

//傳送字串

void uart_sendstring(m0p_uart_typedef* uartx,char *str)

uart_sendbyte(uartx,*(str+k));//迴圈傳送乙個位元組乙個位元組的發

k++;

}while(*(str+k)!='\0');//直至遇到字串結束符 '\0'

是不是很簡單,如果看過野火的uart部分,就回發現思路是一樣的,哈哈!我的就是參考著寫的。。根據上面(4)的原理寫的。採用的是查詢方式,,比較好理解。一開始按stm32的思路去寫老是錯誤,後來靜下心來想了下。

//uart0中斷函式**

void uart0_irqhandler(void)

//u8rxcnt=0;//置0,方便下次重複以上操作

if(uart_getstatus(m0p_uart0,uarttc)) // tc 傳送完成為真,傳送完成乙個位元組

}

5.總結:

基本到此,華大微控制器的串列埠通訊是沒用問題了,能實現基本的串列埠收發以及多位元組收發。至於對映-printf列印,有興趣可以搞下。

微控制器串列埠通訊

微控制器串列埠通訊 通常的usb序列通訊方式為全雙工,即兩條資料線 rxd和txd,一條用於傳送資料,一條用於接收資料。在序列通訊前,需要對序列通訊進行配置。對於微控制器 ri為接受中斷標誌位,未通訊時ri 0 當電腦傳送第乙個位元組幀a0到微控制器時,sbuf a0,中斷標誌位ri 1,微控制器呼...

微控制器串列埠通訊

1 需求 實現電腦端控制微控制器開啟燈光風扇,顯示微控制器傳遞過來的資料 如溫度 濕度等 2 工具 平台軟體 驅動人生 vs2012 keil4 3 下面就開始吧 4 檢視我們當前的通訊埠號 如圖 然後確定我們微控制器的晶振,我是用的是11.0592m的 即9600 差不多我們就可以開始我們的開發了...

微控制器串列埠通訊

1 每隔1秒鐘,a向b通過串列埠傳送乙個位元組c num 該位元組按照0x00 0x09迴圈,例如某一時刻傳送c num 0x 3 2 b接收到資料後,做9 c num的計算,並將計算結果通過串列埠傳送給a微控制器。例如b接收到0x03,則b要通過串列埠返回0x09 0x03 0x06給微控制器a ...