1、include "..\config.h" #define UART_BPS 38400 /* 串口通信波特率 */ INT8U const send[]="0xfd 0x0a 0x00 0x01 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09\r\n"; /****************************************************************************
2、 ** Function name: delayNS ** Descriptions: 延时函数 ** input parameters: ulDly: 延时值 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void
3、delayNS (INT32U ulDly) { INT32U i; for (; ulDly > 0; ulDly--) { for (i = 0; i < 5000; i++); } } /********************************************************************************************************* ** Function name: uartInit ** Descriptions: 串口初始化,设
4、置为8位数据位,1位停止位,无奇偶校验,波特率为115200 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0Init (void) { INT16U usFdiv; U0LCR = 0x83;
5、 /* 允许设置波特率 */ usFdiv = (FPCLK / 16) / UART_BPS; /* 设置波特率 */ U0DLM = usFdiv / 256; U0DLL = usFdiv % 256; U0LCR = 0x03;
6、 /* 锁定波特率 */ U0FCR = 0x06; } /********************************************************************************************************* ** Function name: uart0GetByte ** Descriptions: 从串口接收1字节数据,使用查询方式接收 ** input parameters: 无 ** output parameters: 无
7、 ** Returned value: ucRcvData: 接收到的数据 *********************************************************************************************************/ INT8U uart0GetByte (void) { INT8U ucRcvData; while ((U0LSR & 0x01) == 0); /* 等待接收标志置位
8、 */ ucRcvData = U0RBR; /* 读取数据 */ return (ucRcvData); } /********************************************************************************************************* ** Function name: uart0GetStr ** D
9、escriptions: 串口接收字符串 ** input parameters: puiStr: 指向接收数据数组的指针 ** ulNum: 接收数据的个数 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0GetStr (INT8U
10、puiStr, INT32U ulNum) { for (; ulNum > 0; ulNum--) { *puiStr++ = uart0GetByte (); } } /********************************************************************************************************* ** Function name: uart0SendByte ** Descriptions: 向串口发送子节数据,并等待数据发送
11、完成,使用查询方式 ** input parameters: ucDat: 要发送的数据 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0SendByte (INT8U ucDat) { U0THR = ucDat;
12、 /* 写入数据 */ while ((U0LSR & 0x40) == 0); /* 等待数据发送完毕 */ } /********************************************************************************************************* ** Function name: uart0SendS
13、tr ** Descriptions: 向串口发送字符串 ** input parameters: puiStr: 要发送的字符串指针 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0SendStr (INT8U const *puiStr) { while (1)
14、 { if (*puiStr == '\0') { break; /* 遇到结束符,退出 */ } uart0SendByte (*puiStr++); } } /****************************************************************************************************
15、 ** Function name: uartInit ** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartInit
16、void) { INT16U usFdiv; U1LCR = 0x83; /* 允许设置波特率 */ usFdiv = (FPCLK / 16) / UART_BPS; /* 设置波特率 */ U1DLM = usFdiv / 256; U1DLL = usFdiv % 256;
17、 U1LCR = 0x03; /* 锁定波特率 */ U1FCR = 0x06; } /********************************************************************************************************* ** Function name: uart1GetByte ** Descriptions: 从串口接收1字节数
18、据,使用查询方式接收 ** input parameters: 无 ** output parameters: 无 ** Returned value: ucRcvData: 接收到的数据 *********************************************************************************************************/ INT8U uart1GetByte (void) { INT8U ucRcvData; while ((U1LSR & 0x0
19、1) == 0); /* 等待接收标志置位 */ ucRcvData = U1RBR; /* 读取数据 */ return (ucRcvData); } /*************************************************************************************
20、 ** Function name: uart1GetStr ** Descriptions: 串口接收字符串 ** input parameters: pucStr: 指向接收数据数组的指针 ** ulNum: 接收数据的个数 ** output parameters: 无 ** Returned value: 无 **********************************************************************
21、/ void uart1GetStr (INT8U *pucStr, INT32U ulNum) { for (; ulNum > 0; ulNum--){ *pucStr++ = uart1GetByte (); } } /********************************************************************************************************* ** Function name:
22、 uart1SendByte ** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式 ** input parameters: ucDat: 要发送的数据 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart1SendByte (INT8U uc
23、Dat) { U1THR = ucDat; /* 写入数据 */ while ((U1LSR & 0x40) == 0); /* 等待数据发送完毕 */ } /*********************************************************************************
24、 ** Function name: uart1SendStr ** Descriptions: 向串口发送字符串 ** input parameters: puiStr: 要发送的字符串指针 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/
25、void uart1SendStr (INT8U const *pucStr) { while (1){ if (*pucStr == '\0') break; /* 遇到结束符,退出 */ uart1SendByte (*pucStr++); } } /******************************************************************************************
26、 ** Function name: main ** Descriptions: 串口查询方式接收发送数据。请用跳线冒短接JP14,全速运行程序用串口调试软件发送字 ** 符串,并在接收窗口查看返回数据,波特率为115200,上位机一次需要发送20个字符。 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *************************************
27、/ int main (void) { INT8U ucBuf[30] = {0}; targetInit(); /* 初始化目标板,切勿删除 */ pinInit(); /* 引脚初始化 */
28、 PCONP = PCONP|0x18; /* 打开串口0,1功能 */ uart0Init (); /* 串口初始化 */ uartInit (); while (1) { uart1GetStr(ucBuf, 1); /* 从串口接收字符串 */ delayNS(5);
29、 uart0SendStr (ucBuf); /* 向串口发送字符串 */ delayNS(5); uart0GetStr(ucBuf, 1); /* 从串口接收字符串 */ delayNS(5); uart1SendStr (ucBuf); /* 向串口发送字符串 */ delayNS(5); } }
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818