當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]4.4 串口應(yīng)用 因?yàn)楣P者硬件設(shè)計(jì)使用UART4口,然而在《PIC32 Peripheral Libraries for MPLAB C32 Compiler》庫(kù)里卻找不到使用UART4的庫(kù)函數(shù)。歷經(jīng)百度百般搜索,終于獲得了一點(diǎn)蛛絲馬跡:原文如下 PIC32MX 5/6/7系列

4.4 串口應(yīng)用 因?yàn)楣P者硬件設(shè)計(jì)使用UART4口,然而在《PIC32 Peripheral Libraries for MPLAB C32 Compiler》庫(kù)里卻找不到使用UART4的庫(kù)函數(shù)。歷經(jīng)百度百般搜索,終于獲得了一點(diǎn)蛛絲馬跡:原文如下
PIC32MX 5/6/7系列的C32用法,已經(jīng)完全變了一個(gè)方式。
範(fàn)例程式所用的是依新版的用法,也可以相容PIC32MX 3/4系列。
用法說(shuō)明在
MPLAB C32docpic32-lib-help下的UART-PLIB-Help.chm
另外APP1632實(shí)驗(yàn)版及說(shuō)明書(shū)也有提及這部份,可以參考使用。感嘆一句,神奇的萬(wàn)能的百度?。〗Y(jié)合例程,及筆者的實(shí)際硬件,做出如下調(diào)試實(shí)驗(yàn)?zāi)繕?biāo):1.指示燈點(diǎn)亮,用于表示接收數(shù)據(jù)成功。2.用串口調(diào)試助手給單片機(jī)發(fā)送數(shù)據(jù)0x01, 0x02,0x03,0x04, 0x05;串口調(diào)試助手接收到同樣的數(shù)據(jù)0x01, 0x02,0x03,0x04, 0x05。表示串口驅(qū)動(dòng)調(diào)試成功。
#define pbclk 1000000#define desired_rate 4800/***********************************************************************************************函數(shù)名 字: UART4Config*功能描 述:串口1硬件驅(qū)動(dòng)配置*輸 入: 無(wú)*輸 出: 無(wú)*返 回: 無(wú)*全局變量: 無(wú)*調(diào)用模塊: 使用內(nèi)部8M FRC作為時(shí)鐘源+ 8分頻 = 1 M 外設(shè)時(shí)鐘 里的串口驅(qū)動(dòng)部分**-------------------------------------------------------------------------**項(xiàng) 目 組: **創(chuàng)建日期: **作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************/void UART4Config(void){ //配置和使能UART4, 關(guān)閉CTS, RTS數(shù)據(jù)流信號(hào),只啟用TX,RX UARTConfigure(UART4, UART_ENABLE_PINS_TX_RX_ONLY); //設(shè)置FIFO中斷方式 //TX FIFO緩沖區(qū)未填充滿時(shí)中斷-- 緩沖區(qū)未填滿。 //RX緩沖器非空時(shí)中斷-- 緩沖區(qū)有數(shù)據(jù)。 UARTSetFifoMode(UART4, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY); //設(shè)置為數(shù)據(jù)位8,無(wú)校驗(yàn)位,1位停止位 UARTSetLineControl(UART4, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1); //設(shè)置波特率,后面兩個(gè)參數(shù)分別是PBCLK和期望的波特率 UARTSetDataRate(UART4, pbclk, desired_rate); //使能UART模塊,使能發(fā)送,使能接收 UARTEnable(UART4, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));// 配置UART4接收中斷 INTEnable(INT_SOURCE_UART_RX(UART4), INT_ENABLED); INTSetVectorPriority(INT_VECTOR_UART(UART4), INT_PRIORITY_LEVEL_2); INTSetVectorSubPriority(INT_VECTOR_UART(UART4), INT_SUB_PRIORITY_LEVEL_0); // configure for multi-vectored mode INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR); // enable interrupts INTEnableInterrupts();}/***********************************************************************************************函數(shù)名 字: WriteString(const char *string)*功能描 述: UART4數(shù)據(jù)流發(fā)送函數(shù)*輸 入: string -- 需要發(fā)送的字符串*輸 出: 無(wú)*返 回: 無(wú)*全局變量: 無(wú)*調(diào)用模塊:**-------------------------------------------------------------------------**項(xiàng) 目 組:**創(chuàng)建日期: **作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************/void WriteString(const char *string){ while (*string != '