三菱FX3U底层源码,PLSR源码 总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取

三菱FX3U底层源码,PLSR源码 总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取,有脉冲输出与定位指令(包括PLSY /PWM/PLSR/PLSV/DRVI /DRVA 等指令)的代码, 但实际上下载进stm32都不支持,仅支持些简单功能。 应该是部分代码被修改了。 仅供参考。 支持波特率9600/19200/38400/57600/11520

最近在折腾三菱FX3U的底层源码移植,发现了个有意思的现象:明明源码里写着支持PLSR这类高端定位指令,真烧录到STM32之后却像被阉割了似的。这事儿让我想起早些年某些国产PLC玩的"功能预告片"套路——参数表写得天花乱坠,实际跑起来就露馅。

先看这个脉冲输出控制块的伪代码:

typedef struct {
    uint16_t  pulse_freq;     // 脉冲频率
    uint32_t  target_pos;     // 目标位置
    uint8_t   acc_time;       // 加减速时间
    uint8_t   output_port;    // 输出端口
} PLSR_CTRL_BLOCK;

void PLSR_Handler(void) {
    // 理论上的梯形加减速算法
    if(ctrl_block.acc_time > 0) {
        // 此处应有加速度计算...然而空空如也
    }
    TIM_SetCompare1(TIM3, ctrl_block.pulse_freq); // 定时器配置倒是健在
}

这段代码明显是个半成品,加减速部分的算法实现直接失踪。更坑的是定时器中断优先级配置里,脉冲通道的中断等级比通信中断低两级,这就导致高速脉冲时容易丢脉冲——好比用老年机跑4K视频,卡成PPT太正常了。

三菱FX3U底层源码,PLSR源码 总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取,有脉冲输出与定位指令(包括PLSY /PWM/PLSR/PLSV/DRVI /DRVA 等指令)的代码, 但实际上下载进stm32都不支持,仅支持些简单功能。 应该是部分代码被修改了。 仅供参考。 支持波特率9600/19200/38400/57600/11520

通信协议栈倒是挺完整,波特率配置表看着专业:

const uint32_t BAUD_TABLE[] = {
    9600,   // 0x00
    19200,  // 0x01
    38400,  // 0x02 
    57600,  // 0x03
    115200  // 0x04
};

但实测发现修改波特率需要冷启动才能生效,运行时切换直接通信瘫痪。底层USART初始化函数里藏着个魔鬼细节:

void USART_Init(void) {
    // 此处省略300行...
    if(FLASH_Read(0x0800FF00) != 0xAA55AA55) { // 冷启动标志检测
        USART_DeInit();  // 强制复位串口
        NVIC_SystemReset(); // 直接重启系统
    }
}

这种暴力校验机制,简直就是把"运行时更新"功能当摆设。更魔幻的是注释存储功能,虽然文件系统模块看起来像模像样:

void SaveComment(const char* comment) {
    FRESULT res = f_open(&fil, "comment.txt", FA_WRITE);
    if(res == FR_OK) {
        f_printf(&fil, "%s\n", comment); // 标准库文件操作
        f_close(&fil);
    }
}

但实际上工程里压根没移植FatFS文件系统,注释写入操作直接掉进虚空。这种源码层面的"断头路"设计,堪比装修只刷了门面粉墙。

移植过程中最让我拍大腿的是脉冲序列生成逻辑。虽然PLSY指令的占空比调节代码完整:

void PLSY_Handler(uint32_t freq, uint8_t duty) {
    TIM_OCInitTypeDef  oc_config;
    oc_config.TIM_Pulse = (100 - duty) * freq / 100; // 占空比计算
    TIM_OC1Init(TIM3, &oc_config);
}

但相关的硬件抽象层(HAL)驱动里,定时器时钟源配置被注释掉了:

// TIM_InternalClockConfig(TIM3); // 疑似被注释的关键配置

这就导致所有脉冲指令都成了无源之水,输出脚安静如鸡。这种源码里的"定时炸弹",比明着报错更让人抓狂。

折腾一周后的结论:这套源码就像被扒光的圣诞树——主干还在,但装饰品全被薅走了。建议想深度开发的兄弟直接魔改定时器中断优先级,先把现有脉冲功能跑稳,至于那些花哨的定位指令...还是自己重写更靠谱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值