AT91SAM3S 串列埠UART初始化及收發資料

2021-09-06 11:40:10 字數 1748 閱讀 9165

sam3s中的uart串列埠是乙個兩線非同步收發器。這個串列埠能用來通訊或者跟蹤。有兩個dma通道與uart串列埠關聯,可通過使用dma處理串列埠傳輸以節省cpu時間。

sam3s4c中有兩個uart。與外設引腳的對應關係如下:

板子上使用的是uart0,及pa9和pa10引腳。

sam3s的uart結構框圖

串列埠初始化,收發資料 的步驟如下:

1、配置相應io口的引腳(設定io時鐘及引腳工作模式)

2、開啟uart時鐘

3、復位並停止uart

4、設定uart功能(奇偶校驗uart_mr、波特率uart_brgr、dma uart_ptcr、收發使能uart_cr 等)

5、收發資料 uart_thr  uart_rhr

串列埠的初始化程式如下:

//引腳巨集定義,串列埠0收發引腳分別對因pa9 pa10

#define pins_uart

#define console_pins

//使用的串列埠的巨集定義,使用uart0

#define console_usart uart0

extern void uart_configure( uint32_t baudrate, uint32_t masterclock)

串列埠傳送乙個字元:

extern void uart_putchar( uint8_t c )

uart *puart=console_usart ;

if ( !_ucisconsoleinitialized )//每次傳送資料都先判斷一下串列埠是否已經被初始化了

uart_configure(console_baudrate, board_mck);

/* wait for the transmitter to be ready */

while ( (puart->uart_sr & uart_sr_txempty) == 0 ) ;//等待串列埠狀態暫存器中,傳送暫存器為空的標誌

/* send character */

puart->uart_thr=c ; //傳送狀態為空時,即可將字元丟到傳送暫存器中。

串列埠接收乙個字元:

extern uint32_t uart_getchar( void )

uart *puart=console_usart ;

if ( !_ucisconsoleinitialized ) //每次接收資料都要判斷下串列埠是否被初始化了

uart_configure(console_baudrate, board_mck);

while ( (puart->uart_sr & uart_sr_rxrdy) == 0 ) ; //等待串列埠狀態暫存器中的rxrdy置位,這個為表示串列埠完整地接收了乙個資料

return puart->uart_rhr ; //讀取接收到的資料並返回。同時硬體自動復位rxrdy位。

之後就可以使用了,我在主函式中只用了一句來驗證串列埠的狀態:

uart_putchar(uart_getchar());

即,將電腦端來的資料發回去。驗證下,完全正常了。

當然,這裡使用的是查詢方式接收資料。至於中斷方式接收資料,在學會了使用中斷之後會補上來的。

S3C2440 UART串列埠驅動

通用非同步接收器和傳送器 universal asynchronous receiver and transmitter 簡稱uart。通常是嵌入式裝置中預設都會配置的通訊介面。這是因為,很多嵌入式裝置沒有顯示屏,無法獲得嵌入式裝置實時資料資訊,通過uart串列埠和超級終端相連,列印嵌入式裝置輸出資...

s3c2440裸機串列埠UART

串列埠收發資料 115200,8n1。每一位的時間是t 1 115200。傳輸乙個位元組需要10位 包括起始位1位,資料位8位,停止位1位,需要的時間是t 10 115200。每秒傳輸的的位元組數 1 t 115200 10 11520byte。回環模式 一發出資料就立刻收到,用於測試。main.c...

關於AT91SAM7S64的PIOA中斷觸發問題!

這是實驗 void irq key isr handler void else if 1 16 at91c pioa pdsr else if 1 20 at91c pioa pdsr else if 1 23 at91c pioa pdsr at91c aic eoicr 1 void keyir...