搜索

gd32e103 usb_cdc_acm收发有问题

[复制链接]
1328|3
手机看帖
扫描二维码
随时随地手机跟帖
风来吴山|  楼主 | 2021-10-13 14:45 | 显示全部楼层 |阅读模式
static void usb_protocol(struct tec_pid_control *__tec)
{
    int16_t idx = 0;
    uint16_t curr[TEC_ADC_SUM] = {0};
    float temp_f = 0.0;
    uint8_t *ptr = (uint8_t *)&temp_f;
    usb_cdc_handler *cdc = (usb_cdc_handler *)__tec->p_cdc_acm->dev.class_data[0];

    if (USBD_CONFIGURED == __tec->p_cdc_acm->dev.cur_status){
        if (0U == cdc_acm_check_ready(__tec->p_cdc_acm)){
            cdc_acm_data_receive(__tec->p_cdc_acm);
        }
        else{
            idx = get_header_cmd();
            switch (idx){
            case -1:
                break;
            case set_mode:
                break;
            case set_temp:
                memcpy(ptr, &cdc->data[2], sizeof(float));
                max5214_write(temp_conver_dac_value(temp_f));
                cdc->data[0] = 0x55;
                cdc->data[1] = 0x02;
                cdc->data[3] = 0x01;
                cdc->data[4] = 0x00;
                cdc->data[5] = 0x00;
                cdc->data[6] = crc_8_calculate(cdc->data, 6);
                break;
            case set_prop:
                break;
            case set_intg:
                break;
            case set_diff:
                break;
            case read_name:
                memcpy(cdc->data, "temperature controller\n", sizeof("temperature controller\n"));
                cdc->receive_length = sizeof("temperature controller\n") - 1;
                break;
            case read_vers:
                memcpy(cdc->data, "V1.00.01\n", sizeof("V1.00.01\n"));
                cdc->receive_length = sizeof("V1.00.01\n") - 1;
                break;
            case read_sn:
                memcpy(cdc->data, "20210907002\n", sizeof("20210907002\n"));
                cdc->receive_length = sizeof("20210907002\n") - 1;
                break;
            case read_data:
                get_tec_current(__tec->p_adc->value, TEC_ADC_SUM, curr);
                cdc->data[0] = 0x5a;
                cdc->data[1] = 0x04;
                memcpy(&cdc->data[2], (uint8_t *)&curr, 10);
                cdc->data[12] = crc_8_calculate(cdc->data, 12);
                cdc->receive_length = 13;
                break;
            default:
                break;
            }
            cdc_acm_data_send(__tec->p_cdc_acm);
        }
    }
}
378486166805fdffdf.png
如图,发送什么有时候就会回什么,概率还很高,是我代码哪出问题了吗?希望有大神能指点一二。

使用特权

评论回复
yangxiaor520| | 2021-10-14 07:59 | 显示全部楼层
一上来就是一堆代码

使用特权

评论回复
风来吴山|  楼主 | 2021-10-14 09:10 | 显示全部楼层
修改官方库cdc_acm_core.h文件,在usb_cdc_handler结构体中加入第50行即可解决。
5904461678356c6205.png

使用特权

评论回复
mutable| | 2021-10-15 17:21 | 显示全部楼层
都解决完了,我也没看懂咋回事

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 呐咯密密 得到打赏 ¥310.00
  • 2 qbwww 得到打赏 ¥265.00
  • 3 yanzhengxin1 得到打赏 ¥200.00
  • 4 full_stack 得到打赏 ¥100.00
  • 5 laocuo1142 得到打赏 ¥55.00
  • 6 二哲科技 得到打赏 ¥50.00
  • 7 zhangjiantao 得到打赏 ¥50.00
  • 8 小叶三千 得到打赏 ¥50.00
  • 9 cjseng 得到打赏 ¥50.00
  • 10 改名了 得到打赏 ¥30.00
在线客服 快速回复 返回顶部 返回列表