TMS320F28P550SJ9学习笔记7结构体寄存器方式配置SCI通信收发_SCI通信收发测试
目录
TMS320F28P550SJ9学习笔记7:结构体寄存器方式配置SCI通信收发_SCI通信收发测试
今日尝试自己操作寄存器编写函数,使用SCI通信外设 发送与接收数据
文章提供测试代码讲解、完整工程下载、测试效果图
添加创建自己的库文件:
这里提一笔怎么添加创建自己的库文件:
直接右键添加 Header File 和 Source File 就行了,文件后缀.c与.h别忘了自己加上
创建的.h文件会自己给你加上 编译条件语句
之前想给主文件写个.h文件的,这在keil的操作是合法的,但在ccs这会胡乱报错,不知为何
编写SCI发送函数:
下面是我写的三个SCI发送函数的具体实现,分别是发送一个字节、发送一串字符串 、以及自定义的SCI_printf函数
// SCIA 发送一个字节 void SCIa_TransmitData(uint16_t data) { while (SciaRegs.SCIFFTX.bit.TXFFST != 0) { //考虑添加超时逻辑 } SciaRegs.SCITXBUF.all = data; } //SCIA 发送字符串 void SCIa_TransmitString(unsigned char *string) { int i; i = 0; while(string[i] != '\0') { SCIa_TransmitData(string[i]); i++; } } // 自定义printf函数 void SCIa_Printf(char *fmt,...) { unsigned char UsartPrintfBuf[128];//最大长度1128 va_list ap; unsigned char *pStr = UsartPrintfBuf; va_start(ap, fmt); vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap); //格式化 va_end(ap); while(*pStr != 0 ) { SCIa_TransmitData(*pStr++); //逐个字节发送 //等待 发射器缓冲区和移位寄存器均为空 while(SciaRegs.SCICTL2.bit.TXEMPTY == 0) { // 超时逻辑 } // 检查传输错误 if (SciaRegs.SCIRXST.bit.FE || SciaRegs.SCIRXST.bit.OE || SciaRegs.SCIRXST.bit.PE) { // 处理错误 SciaRegs.SCIRXST.bit.RXERROR = 0; // 清除错误标志 } } }
主函数调用示例:
这里展示了函数在主函数的调用情况:
DEVICE_DELAY_US(500000); 的延时逻辑是冗余的
实例程序中用的发送主要是 SCIa_Printf 函数的,因为它用起来最方便,有关其余发送函数的调用示例在主函数下面的注释中也有提到:
测试效果图:
能够成功的一个一个回传发来的字符并计数: