/****************************************Copyright (c)**************************************************** ** Guangzhou ZHIYUAN electronics Co.,LTD. ** ** http://www.embedtools.com ** **--------------File Info--------------------------------------------------------------------------------- ** File name: main.c ** Last modified Date: 2010-02-04 ** Last Version: V1.0 ** Descriptions: The main() function example template ** **-------------------------------------------------------------------------------------------------------- ** Created by: Lanwuqiang ** Created date: 2010-02-05 ** Version: V1.0 ** Descriptions: 添加用户应用程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ZhangNingbo ** Modified date: 2010-02-25 ** Version: V1.0 ** Descriptions: 串口查询方式示例程序 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ** Modified date: ** Version: ** Descriptions: ** ** Rechecked by: *********************************************************************************************************/ #include "..\config.h" /********************************************************************************************************* 宏定义 *********************************************************************************************************/ #define UART_BPS 115200 /* 串口通信波特率 */ /********************************************************************************************************* 全局变量 *********************************************************************************************************/ /********************************************************************************************************* ** Function name: myDelay ** Descriptions: 软件延时 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void myDelay (INT32U ulTime) { INT32U i; i = 0; while (ulTime--) { for (i = 0; i < 5000; i++); } } /********************************************************************************************************* ** Function name: uartInit ** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartInit (void) { INT16U usFdiv; SYSAHBCLKCTRL |= (1ul << 12); /* 打开UART功能部件时钟 */ UARTCLKDIV = 0x01; /* UART时钟分频 */ U0LCR = 0x83; /* 允许设置波特率 */ usFdiv = (FAHBCLK / UARTCLKDIV / 16) / UART_BPS; /* 设置波特率 */ U0DLM = usFdiv / 256; U0DLL = usFdiv % 256; U0LCR = 0x03; /* 锁定波特率 */ U0FCR = 0x07; } /********************************************************************************************************* ** Function name: uartGetByte ** Descriptions: 从串口接收1字节数据,使用查询方式接收 ** input parameters: 无 ** output parameters: 无 ** Returned value: ucRcvData: 接收到的数据 *********************************************************************************************************/ INT8U uartGetByte (void) { INT8U ucRcvData; while ((U0LSR & 0x01) == 0) { /* 等待接收标志置位 */ } ucRcvData = U0RBR; /* 读取数据 */ return (ucRcvData); } /********************************************************************************************************* ** Function name: uartGetStr ** Descriptions: 串口接收字符串 ** input parameters: pucStr: 指向接收数据数组的指针 ** ulNum: 接收数据的个数 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartGetStr (INT8U *pucStr, INT32U ulNum) { for (; ulNum > 0; ulNum--) { *pucStr++ = uartGetByte (); } } /********************************************************************************************************* ** Function name: uartSendByte ** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式 ** input parameters: ucDat: 要发送的数据 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartSendByte (INT8U ucDat) { U0THR = ucDat; /* 写入数据 */ while ((U0LSR & 0x40) == 0) { /* 等待数据发送完毕 */ } } /********************************************************************************************************* ** Function name: uartSendStr ** Descriptions: 向串口发送字符串 ** input parameters: puiStr: 要发送的字符串指针 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartSendStr (INT8U const *pucStr) { while (1) { if (*pucStr == '\0') { break; /* 遇到结束符,退出 */ } uartSendByte (*pucStr++); } } /********************************************************************************************************* ** Function name: main ** Descriptions: 短接P1.7与TXD、P1.6与RXD,利用串口调试软件,观察发送与接收数据 ** 波特率为115200,上位机一次需发送7个字符 (基于EasyCortexM3-1300开发板) ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ int main (void) { INT8U ucBuf[10] = {0}; targetInit(); /* 初始化目标板,切勿删除 */ pinInit(); /* 引脚初始化 */ uartInit (); /* 串口初始化 */ while (1) { uartGetStr(ucBuf, 7); /* 从串口接收字符串 */ myDelay(1); uartSendStr(ucBuf); /* 向串口发送字符串 */ uartSendStr("\r\n"); myDelay(1); } } /********************************************************************************************************* End Of File *********************************************************************************************************/