ARM之间串口通信.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 之间 串口 通信
- 资源描述:
-
#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"; /********************************************************************************************************* ** Function name: delayNS ** Descriptions: 延时函数 ** input parameters: ulDly: 延时值 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void delayNS (INT32U ulDly) { INT32U i; for (; ulDly > 0; ulDly--) { for (i = 0; i < 5000; i++); } } /********************************************************************************************************* ** Function name: uartInit ** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0Init (void) { INT16U usFdiv; U0LCR = 0x83; /* 允许设置波特率 */ usFdiv = (FPCLK / 16) / UART_BPS; /* 设置波特率 */ U0DLM = usFdiv / 256; U0DLL = usFdiv % 256; U0LCR = 0x03; /* 锁定波特率 */ U0FCR = 0x06; } /********************************************************************************************************* ** Function name: uart0GetByte ** Descriptions: 从串口接收1字节数据,使用查询方式接收 ** input parameters: 无 ** output parameters: 无 ** Returned value: ucRcvData: 接收到的数据 *********************************************************************************************************/ INT8U uart0GetByte (void) { INT8U ucRcvData; while ((U0LSR & 0x01) == 0); /* 等待接收标志置位 */ ucRcvData = U0RBR; /* 读取数据 */ return (ucRcvData); } /********************************************************************************************************* ** Function name: uart0GetStr ** Descriptions: 串口接收字符串 ** input parameters: puiStr: 指向接收数据数组的指针 ** ulNum: 接收数据的个数 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0GetStr (INT8U *puiStr, INT32U ulNum) { for (; ulNum > 0; ulNum--) { *puiStr++ = uart0GetByte (); } } /********************************************************************************************************* ** Function name: uart0SendByte ** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式 ** input parameters: ucDat: 要发送的数据 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0SendByte (INT8U ucDat) { U0THR = ucDat; /* 写入数据 */ while ((U0LSR & 0x40) == 0); /* 等待数据发送完毕 */ } /********************************************************************************************************* ** Function name: uart0SendStr ** Descriptions: 向串口发送字符串 ** input parameters: puiStr: 要发送的字符串指针 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart0SendStr (INT8U const *puiStr) { while (1) { if (*puiStr == '\0') { break; /* 遇到结束符,退出 */ } uart0SendByte (*puiStr++); } } /********************************************************************************************************* ** Function name: uartInit ** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uartInit (void) { INT16U usFdiv; U1LCR = 0x83; /* 允许设置波特率 */ usFdiv = (FPCLK / 16) / UART_BPS; /* 设置波特率 */ U1DLM = usFdiv / 256; U1DLL = usFdiv % 256; U1LCR = 0x03; /* 锁定波特率 */ U1FCR = 0x06; } /********************************************************************************************************* ** Function name: uart1GetByte ** Descriptions: 从串口接收1字节数据,使用查询方式接收 ** input parameters: 无 ** output parameters: 无 ** Returned value: ucRcvData: 接收到的数据 *********************************************************************************************************/ INT8U uart1GetByte (void) { INT8U ucRcvData; while ((U1LSR & 0x01) == 0); /* 等待接收标志置位 */ ucRcvData = U1RBR; /* 读取数据 */ return (ucRcvData); } /********************************************************************************************************* ** Function name: uart1GetStr ** Descriptions: 串口接收字符串 ** input parameters: pucStr: 指向接收数据数组的指针 ** ulNum: 接收数据的个数 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart1GetStr (INT8U *pucStr, INT32U ulNum) { for (; ulNum > 0; ulNum--){ *pucStr++ = uart1GetByte (); } } /********************************************************************************************************* ** Function name: uart1SendByte ** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式 ** input parameters: ucDat: 要发送的数据 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart1SendByte (INT8U ucDat) { U1THR = ucDat; /* 写入数据 */ while ((U1LSR & 0x40) == 0); /* 等待数据发送完毕 */ } /********************************************************************************************************* ** Function name: uart1SendStr ** Descriptions: 向串口发送字符串 ** input parameters: puiStr: 要发送的字符串指针 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void uart1SendStr (INT8U const *pucStr) { while (1){ if (*pucStr == '\0') break; /* 遇到结束符,退出 */ uart1SendByte (*pucStr++); } } /********************************************************************************************************* ** Function name: main ** Descriptions: 串口查询方式接收发送数据。请用跳线冒短接JP14,全速运行程序用串口调试软件发送字 ** 符串,并在接收窗口查看返回数据,波特率为115200,上位机一次需要发送20个字符。 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ int main (void) { INT8U ucBuf[30] = {0}; targetInit(); /* 初始化目标板,切勿删除 */ pinInit(); /* 引脚初始化 */ PCONP = PCONP|0x18; /* 打开串口0,1功能 */ uart0Init (); /* 串口初始化 */ uartInit (); while (1) { uart1GetStr(ucBuf, 1); /* 从串口接收字符串 */ delayNS(5); uart0SendStr (ucBuf); /* 向串口发送字符串 */ delayNS(5); uart0GetStr(ucBuf, 1); /* 从串口接收字符串 */ delayNS(5); uart1SendStr (ucBuf); /* 向串口发送字符串 */ delayNS(5); } }展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


ARM之间串口通信.doc
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/8954437.html