UART模塊
1. UART功能
UART(Universal Asynchronous Receiver / Transmitter)通用異步收發(fā)器,主要用于低速近距離的通信,嵌入式開(kāi)發(fā)中大多數工程師,喜歡使用串口將調試信息發(fā)送至PC上的串口調試助手等軟件。
RT1064片內的UART全部都是低功耗串口(LPUART)。
2. UART庫函數
| 函數名稱(chēng) | 函數功能 |
| uart_init | uart初始化 |
| uart_putchar | uart發(fā)送一個(gè)字節 |
| uart_putbuff | uart發(fā)送一個(gè)數組 |
| uart_putstr | uart發(fā)送一個(gè)字符串 |
| uart_getchar | uart等待獲取一個(gè)字節 |
| uart_query | uart查詢(xún)獲取一個(gè)字節 |
| uart_tx_irq | uart發(fā)送中斷設置 |
| uart_rx_irq | uart接收中斷設置 |
| uart_set_handle | uart中斷回調函數設置 |
uart_init函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置uart模塊編號 |
| baud | 設置uart波特率 |
| tx_pin | 設置uart發(fā)送引腳 |
| rx_pin | 設置uart接收引腳 |
uart_putchar函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置uart模塊編號 |
| dat | 需要發(fā)送的數據 |
uart_putbuff函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置設置uart模塊編號 |
| buff | 需要發(fā)送的數組地址 |
| len | 需要發(fā)送的長(cháng)度 |
uart_putstr函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置設置uart模塊編號 |
| str | 需要發(fā)送的字符串地址 |
uart_getchar函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置設置uart模塊編號 |
| dat | 保存數據的地址 |
uart_query函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置設置uart模塊編號 |
| dat | 保存數據的地址 |
| return: | 返回1讀取成功,返回0未讀取到數據 |
uart_tx_irq函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置設置uart模塊編號 |
| status | 設置1開(kāi)啟發(fā)送完成中斷,設置0關(guān)閉發(fā)送完成中斷 |
uart_rx_irq函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置設置uart模塊編號 |
| status | 設置1開(kāi)啟接收完成中斷,設置0關(guān)閉接收完成中斷 |
uart_set_handle函數參數
| 參數名稱(chēng) | 參數說(shuō)明 |
| uartn | 設置設置uart模塊編號 |
| handle | uart中斷句柄結構體 |
| callback | 回調函數地址(直接填寫(xiě)函數名稱(chēng)即可) |
| tx_buff | 發(fā)送緩沖區地址 |
| tx_count | 設置發(fā)送n個(gè)字節后觸發(fā)中斷 |
| rx_buff | 接收緩沖區地址 |
| rx_count | 設置接收n個(gè)字節后觸發(fā)中斷 |
UART使用示例
1. UART發(fā)送與接收(非中斷方式)
#include 'headfile.h' //包含頭文件
uint8 uart_receive;
uint8 uart_send[10];
int main(void)
{
DisableGlobalIRQ();
board_init();//務(wù)必保留,本函數用于初始化MPU 時(shí)鐘 調試串口
//初始化串口 波特率為115200 TX為D16 RX為D17
uart_init (USART_8, 115200,UART8_TX_D16,UART8_RX_D17);
//總中斷最后開(kāi)啟
EnableGlobalIRQ(0);
uart_send[0] = 'S';
uart_send[1] = 'E';
uart_send[2] = 'E';
uart_send[3] = 'K';
uart_send[4] = 'F';
uart_send[5] = 'R';
uart_send[6] = 'E';
uart_send[7] = 'E';
uart_send[8] = '\n';
uart_send[9] = '\r';
while(1)
{
//串口字節發(fā)送
uart_putchar(USART_8,'S'); //發(fā)送0xA5
uart_putbuff(USART_8,uart_send,10); //發(fā)送uart_send
uart_putstr(USART_8,'輸入任意字符程序繼續運行\n\r');//發(fā)送字符串
uart_getchar(USART_8,&uart_receive);//等待接收到一個(gè)字節后程序繼續運行
uart_putchar(USART_8,uart_receive); //發(fā)送收到的字符
uart_putstr(USART_8,'\n\r'); //發(fā)送換行
systick_delay_ms(100);//延時(shí)100毫秒
}
}2. UART接收(中斷方式)
#include 'headfile.h'
uint8 example_rx_buffer;
lpuart_transfer_t example_receivexfer;
lpuart_handle_t example_g_lpuartHandle;
uint8 uart_data;//接收到的串口數據
void example_uart_callback(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData)
{
if(kStatus_LPUART_RxIdle == status)
{
//數據已經(jīng)被寫(xiě)入到了 之前設置的BUFF中
//本例程使用的BUFF為 example_rx_buffer
uart_data = example_rx_buffer;//將數據取出
}
handle->rxDataSize = example_receivexfer.dataSize; //還原緩沖區長(cháng)度
handle->rxData = example_receivexfer.data; //還原緩沖區地址
}
//實(shí)驗現象說(shuō)明:將RX TX短接
//通過(guò)在線(xiàn)調試可以看到 uart_data數據在持續加一操作
uint8 uart_send;
int main(void)
{
DisableGlobalIRQ();
board_init(); //務(wù)必保留,本函數用于初始化MPU 時(shí)鐘 調試串口
//初始化串口 波特率為115200 TX為D16 RX為D17
uart_init (USART_8, 115200,UART8_TX_D16,UART8_RX_D17);
NVIC_SetPriority(LPUART8_IRQn,15); //設置串口中斷優(yōu)先級 范圍0-15 越小優(yōu)先級越高
uart_rx_irq(USART_8,1);
example_receivexfer.dataSize = 1; //配置串口接收緩沖區長(cháng)度
example_receivexfer.data = &example_rx_buffer; //配置串口接收的緩沖區
//設置中斷函數及其參數
uart_set_handle(USART_8, &example_g_lpuartHandle, example_uart_callback, NULL, 0, example_receivexfer.data, 1);
EnableGlobalIRQ(0);
while(1)
{
uart_send++;
//串口字節發(fā)送
uart_putchar(USART_8,uart_send);
//更多功能函數 自行查閱zf_uart文件
systick_delay_ms(100);
}
}恩智浦MCU加油站
這是由恩智浦官方運營(yíng)的公眾號,著(zhù)重為您推薦恩智浦MCU的產(chǎn)品信息、開(kāi)發(fā)技巧、教程文檔、培訓課程等內容。
聯(lián)系客服