DSP28377D项目实战 (4) - 高速串口打印波形

前言

在实际调试控制程序过程中,往往需要将关键变量实时输出为波形进行分析,通过对比理论模型与实际运行数据,评估系统的动态响应和稳态性能。本节基于一路 SCI 实现高速数据通信,波特率配置为 6.25 MHz,用于支撑高频采样数据的实时传输与调试验证。

代码

复制代码
#include "SciTest.h"

char TxBuf[20]={0};
char RxBuf[20]={0};
sci_test_t Sci_Data = {0};

void SciTest_Init(void)
{
    // 进入软件复位态:在复位态下做配置
    SciaRegs.SCICTL1.bit.SWRESET = 0;

    // 帧格式:1停止位,8位数据,无校验(8N1)
    SciaRegs.SCICCR.all = 0x0007;

    // 波特率:6.25Mhz
    // 在InitPeripheralClocks中修改一下低速外设时钟分频系数
    // ClkCfgRegs.LOSPCP.all = 0x0001

    SciaRegs.SCIHBAUD.all = 0x0000;
    SciaRegs.SCILBAUD.all = 0x0001;

    // 开启FIFO
    SciaRegs.SCIFFTX.bit.SCIFFENA   = 1;                               // 使能FIFO增强
    SciaRegs.SCIFFRX.bit.RXFIFORESET= 0; SciaRegs.SCIFFRX.bit.RXFIFORESET=1; // RX FIFO复位
    SciaRegs.SCIFFTX.bit.TXFIFORESET = 0;SciaRegs.SCIFFTX.bit.TXFIFORESET = 1;// TX FIFO复位

    // FIFO中断阈值与中断使能
    SciaRegs.SCIFFRX.bit.RXFFIL     = 16;                                // RX≥16触发中断
    SciaRegs.SCIFFRX.bit.RXFFIENA   = 0;                                // 使能RX FIFO阈值中断
    SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;

    // 先清标志
    // 使能收发并退出软件复位
    SciaRegs.SCICTL1.bit.RXENA = 1;                                     // 开接收
    SciaRegs.SCICTL1.bit.TXENA = 1;                                     // 开接收
    SciaRegs.SCICTL1.bit.SWRESET = 1;

    EINT;

}

void SciTest_TxData(sci_test_t *p)
{
    if(p->Ch1Addr == 0)
        *p->TxCH1 = 0;
    else
        p->TxCH1 = (Uint16 *)p->Ch1Addr;

    if(p->Ch2Addr == 0)
        *(p->TxCH2) = 0;
    else
        p->TxCH2 = (Uint16 *)p->Ch2Addr;

    if(p->Ch3Addr == 0)
        *(p->TxCH3) = 0;
    else
        p->TxCH3 = (Uint16 *)p->Ch3Addr;

    if(p->Ch4Addr == 0)
        *(p->TxCH4) = 0;
    else
        p->TxCH4 = (Uint16 *)p->Ch4Addr;

    TxBuf[0] = 0xA5;

    TxBuf[1] = (Uint8)((*(p->TxCH1) & 0xFF00)>> 8);
    TxBuf[2] = (Uint8)(*(p->TxCH1) & 0x00FF);
    TxBuf[3] = (Uint8)((*(p->TxCH2) & 0xFF00)>> 8);
    TxBuf[4] = (Uint8)(*(p->TxCH2) & 0x00FF);
    TxBuf[5] = (Uint8)((*(p->TxCH3) & 0xFF00)>> 8);
    TxBuf[6] = (Uint8)(*(p->TxCH3) & 0x00FF);
    TxBuf[7] = (Uint8)((*(p->TxCH4) & 0xFF00)>> 8);
    TxBuf[8] = (Uint8)(*(p->TxCH4) & 0x00FF);

    TxBuf[9] = 0x5A;

    for(int i = 0; i < 10; i++)
    {
       SciaRegs.SCITXBUF.all = TxBuf[i] & 0xFF;
    }
}

void SciTest_RxData(sci_test_t *p)
{
    Uint16 temp = 0;
    if (SciaRegs.SCIFFRX.bit.RXFFOVF == 1)
    {
        SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;
        SciaRegs.SCIFFRX.bit.RXFIFORESET = 0;
        SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
        return;
    }

    if(SciaRegs.SCIFFRX.bit.RXFFST == 16 )
    {
        temp = SciaRegs.SCIFFRX.bit.RXFFST;
        for(int i = 0;i < temp;i++)
        {
            RxBuf[i] = SciaRegs.SCIRXBUF.all;
        }
        //控制指令
        p->RxCH1 = ((uint16_t)RxBuf[1] << 8) | RxBuf[0];
        p->RxCH2 = ((uint16_t)RxBuf[3] << 8) | RxBuf[2];
        p->RxCH3 = ((uint16_t)RxBuf[5] << 8) | RxBuf[4];
        p->RxCH4 = ((uint16_t)RxBuf[7] << 8) | RxBuf[6];
        //变量地址
        p->Ch1Addr = ((uint16_t)RxBuf[9] << 8) | RxBuf[8];
        p->Ch2Addr = ((uint16_t)RxBuf[11] << 8) | RxBuf[10];
        p->Ch3Addr = ((uint16_t)RxBuf[13] << 8) | RxBuf[12];
        p->Ch4Addr = ((uint16_t)RxBuf[15] << 8) | RxBuf[14];
    }
}



#ifndef APP_SCITEST_H_
#define APP_SCITEST_H_


#include "common.h"

typedef struct{
    Uint16 Ch1Addr;
    Uint16 Ch2Addr;
    Uint16 Ch3Addr;
    Uint16 Ch4Addr;

    Uint16 RxCH1;
    Uint16 RxCH2;
    Uint16 RxCH3;
    Uint16 RxCH4;

    Uint16 *TxCH1;
    Uint16 *TxCH2;
    Uint16 *TxCH3;
    Uint16 *TxCH4;

}sci_test_t;


extern sci_test_t Sci_Data;

extern void SciTest_Init(void);
extern void SciTest_TxData(sci_test_t *p);
extern void SciTest_RxData(sci_test_t *p);

#endif /* APP_SCITEST_H_ */

上位机

变量地址就填写CCS中创建的变量的内存地址就行(16进制地址)

调用

直接把上述的C文件和头文件放入工程中就行,在while中一直调用接收函数和发送函数即可。

验证

锁相环α和β分量的波形

锁相环Ud和Uq及补偿角的波形

资源

这个上位机使用labview开发的,需要下载labview相关资源

下载NI-VISA - NI

【免费】高速串口-6M.rar资源-CSDN下载

【免费】ni-labview-2024-runtime-engine-x86-24.1-online.exe资源-CSDN下载

相关推荐
Wave8459 分钟前
基于 STM32 + ESP8266 + W25Q64 的双核 OTA 底层架构总结
stm32·嵌入式硬件·架构
xiangw@GZ1 小时前
WiFi 全世代(WiFi1~WiFi7)技术规范与核心参数总结
嵌入式硬件
振南的单片机世界1 小时前
CPU时钟:频率越高跑越快,但物理极限在“拖后腿”
stm32·单片机·嵌入式硬件
普中科技3 小时前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
d111111111d3 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
d111111111d5 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-134163842125 小时前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
一个平凡而乐于分享的小比特6 小时前
一文读懂MCU与FPGA:核心区别、协同之道与双修秘籍
单片机·fpga开发·职场发展·mcu开发
踏着七彩祥云的小丑7 小时前
嵌入式——认识电子元器件——微动开关系列
单片机·嵌入式硬件
调光IC-小雅7 小时前
解析FP62××系列限流保护机制:为何它是DC/DC芯片的安全底线
单片机·嵌入式硬件