4.4 串口应用 因为笔者硬件设计使用UART4口,然而在《PIC32 Peripheral Libraries for MPLAB C32 Compiler》库里却找不到使用UART4的库函数。历经百度百般搜索,终于获得了一点蛛丝马迹:原文如下
PIC32MX 5/6/7系列的C32用法,已經完全變了一個方式。
範例程式所用的是依新版的用法,也可以相容PIC32MX 3/4系列。
用法說明在
MPLAB C32docpic32-lib-help下的UART-PLIB-Help.chm
另外APP1632實驗版及說明書也有提及這部份,可以參考使用。感叹一句,神奇的万能的百度啊!结合例程,及笔者的实际硬件,做出如下调试实验目标:1.指示灯点亮,用于表示接收数据成功。2.用串口调试助手给单片机发送数据0x01, 0x02,0x03,0x04, 0x05;串口调试助手接收到同样的数据0x01, 0x02,0x03,0x04, 0x05。表示串口驱动调试成功。
#define pbclk 1000000#define desired_rate 4800/***********************************************************************************************函数名 字: UART4Config*功能描 述:串口1硬件驱动配置*输 入: 无*输 出: 无*返 回: 无*全局变量: 无*调用模块: 使用内部8M FRC作为时钟源+ 8分频 = 1 M 外设时钟 里的串口驱动部分**-------------------------------------------------------------------------**项 目 组: **创建日期: **作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************/void UART4Config(void){ //配置和使能UART4, 关闭CTS, RTS数据流信号,只启用TX,RX UARTConfigure(UART4, UART_ENABLE_PINS_TX_RX_ONLY); //设置FIFO中断方式 //TX FIFO缓冲区未填充满时中断-- 缓冲区未填满。 //RX缓冲器非空时中断-- 缓冲区有数据。 UARTSetFifoMode(UART4, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY); //设置为数据位8,无校验位,1位停止位 UARTSetLineControl(UART4, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1); //设置波特率,后面两个参数分别是PBCLK和期望的波特率 UARTSetDataRate(UART4, pbclk, desired_rate); //使能UART模块,使能发送,使能接收 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();}/***********************************************************************************************函数名 字: WriteString(const char *string)*功能描 述: UART4数据流发送函数*输 入: string -- 需要发送的字符串*输 出: 无*返 回: 无*全局变量: 无*调用模块:**-------------------------------------------------------------------------**项 目 组:**创建日期: **作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************/void WriteString(const char *string){ while (*string != '