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下载

相关推荐
mftang3 小时前
STM32Cube IDE 详细介绍
ide·stm32·嵌入式硬件
克莱斯勒ya3 小时前
嵌入式编码器(Embedded Coder)
嵌入式硬件
码农三叔3 小时前
(9-2-02)电源管理与能源系统:能耗分析与功率管理(2)高峰功耗控制+ 电源分配架构
嵌入式硬件·机器人·人机交互·能源·人形机器人
恒锐丰小吕3 小时前
屹晶微 EG27519 高速低侧单通道驱动芯片(带EN使能)技术解析
嵌入式硬件·硬件工程
上海合宙LuatOS3 小时前
LuatOS ——fota 升级教程
开发语言·人工智能·单片机·嵌入式硬件·物联网·php·硬件工程
Real.w3 小时前
极客星闪 | 筑基:轻量级方案之 VS Code + HiSpark 插件开发环境搭建
stm32·单片机·嵌入式硬件
上海合宙LuatOS4 小时前
LuatOS 框架的设计原理
java·开发语言·单片机·嵌入式硬件·物联网·硬件工程
LS_learner4 小时前
ROS2(Robot Operating System 2)接口详解
嵌入式硬件
电化学仪器白超4 小时前
PPTSYNC软件配置①
python·单片机·嵌入式硬件·自动化