当前位置: 首页 > news >正文

TMS320F28P550SJ9学习笔记7:结构体寄存器方式配置SCI通信收发_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 函数的,因为它用起来最方便,有关其余发送函数的调用示例在主函数下面的注释中也有提到:

 

测试效果图:

能够成功的一个一个回传发来的字符并计数:

完整工程下载:

 https://download.csdn.net/download/qq_64257614/90464717

http://www.dtcms.com/a/56198.html

相关文章:

  • C/C++ 实现由用户通过键盘输入自然数并判断其是不是素数(带清空缓冲区等考虑)
  • 【MySQL-数据类型】数据类型分类+数值类型+文本、二进制类型+String类型
  • 全星FMEA软件:汽车电子行业研发管理高效之选
  • VPS加装前置代理全解析
  • uni_app实现下拉刷新
  • K8S学习之基础十七:k8s的蓝绿部署
  • AUTOSAR ETH模块(3)——接口功能分析
  • 利用EasyCVR平台打造化工园区视频+AI智能化监控管理系统
  • 解密 Atlassian Cloud:创新驱动的项目管理之道
  • STM32之I2C通信概览
  • 什么是 spring 的循环依赖?
  • 深入解析EfficientNet:高效深度学习网络与ResNet的对比(使用TensorFlow进行代码复现,并使用cifar10数据集进行实战)
  • UniApp 运行的微信小程序如何进行深度优化
  • 服务器虚拟化:技术原理、实践与未来趋势
  • 测试用大模型组词
  • 文件传输协议(File Transfer Protocol, FTP)
  • 计算机组成原理 第三章 存储系统
  • 机试准备第11天
  • HarmonyOS ArkTS声明式UI开发实战教程
  • Ascend开发板镜像烧录、联网、其他设备访问
  • Laya中runtime的用法
  • 显示器长时间黑屏
  • 【音视频】ffmpeg命令提取音视频数据
  • SYSU-大数据原理与技术-课程知识点-第一章概述
  • git的坑
  • Nginx 缓存清理
  • 【CF】Day1
  • python监控系统资源使用率并钉钉报警脚本
  • C++:string容器(上篇)
  • DeepSeek与浏览器自动化AI Agent构建指南