查看: 4590|回复: 10

[求助] kl27 USB CDC 数据收发问题

[复制链接]

该用户从未签到

8

主题

23

帖子

0

注册会员

Rank: 2

积分
142
最后登录
2016-4-27
发表于 2016-1-27 13:39:06 | 显示全部楼层 |阅读模式
平台:keil5  KSDK_1.3.0修改  C:\Freescale\KSDK_1.3.0\examples\frdmkl27z\demo_apps\usb\device\cdc\virtual_com  下的例子
目标: 实现虚拟串口收发
问题: 此例子只支持接收数据后,发送接收到的数据,怎么样修改成直接发送(无需接收数据)?
做过以下试验:直接调用USB_Class_CDC_Send_Data();出现无法识别USB设备;


以下是原文件的函数。功能是:需要接收到数据后,才能发送数据;但现在需要的功能为直接发送,不知如何修改?
void APP_task(void)
{
   /* User Code */
    if ((0 != g_recv_size) && (0xFFFFFFFF != g_recv_size))
    {
        int32_t i;

        /* Copy Buffer to Send Buff */
        for (i = 0; i < g_recv_size; i++)
        {
            //USB_PRINTF("Copied: %c\n", g_curr_recv_buf[i]);
            g_curr_send_buf[g_send_size++] = g_curr_recv_buf[i];
        }
        g_recv_size = 0;
    }

    if (g_send_size)
    {
        uint8_t error;
        uint32_t size = g_send_size;
        g_send_size = 0;

        error = USB_Class_CDC_Send_Data(g_app_handle, DIC_BULK_IN_ENDPOINT,g_curr_send_buf, g_send_size);  

        if (error != USB_OK)
        {
            /* Failure to send Data Handling code here */
        }
    }
#if USBCFG_DEV_KEEP_ALIVE_MODE
#if (OS_ADAPTER_ACTIVE_OS == OS_ADAPTER_SDK)
    if( (waitfordatareceive))
    {
        if(comopen == 1)
        {
            OS_Time_delay(30);
            comopen = 0;
        }
        USB_PRINTF("Enter lowpower\r\n");
        usb_hal_khci_disable_interrupts((uint32_t)USB0, INTR_TOKDNE);
        POWER_SYS_SetMode(kDemoVlps, kPowerManagerPolicyAgreement);
        waitfordatareceive = 0;
        usb_hal_khci_enable_interrupts((uint32_t)USB0,INTR_TOKDNE);
        USB_PRINTF("Exit  lowpower\r\n");
    }
#endif
#endif
    return;
}


我知道答案 目前已有10人回答
回复

使用道具 举报

  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
    发表于 2016-1-27 14:19:28 | 显示全部楼层
    我之前有做sdk的测试,个人觉得sdk写的还是有点问题的,如果不懂其中原理以及实现机制!用如果真想用,可以用串口慢慢调试!慢慢改善!
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2016-1-27 17:06:06 | 显示全部楼层
    USB_Class_CDC_Interface_DIC_Send_Data(CONTROLLER_ID,SendCDCData,35);直接调用这个函数可以发送!
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2016-1-27 17:08:32 | 显示全部楼层
    可能你的程序上面与我的不一样,但是应该是可以直接发送的。
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2016-1-27 17:10:13 | 显示全部楼层
    你可以参考KL43的例程,这两个芯片基本上是一样的。这个里面有CDC的例程
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    23

    帖子

    0

    注册会员

    Rank: 2

    积分
    142
    最后登录
    2016-4-27
     楼主| 发表于 2016-1-27 17:17:43 | 显示全部楼层
    七七bb 发表于 2016-1-27 17:08
    可能你的程序上面与我的不一样,但是应该是可以直接发送的。

    KSDK_1.3.0 KL43 例程的CDC中有USB_Class_CDC_Interface_DIC_Send_Data()这个函数?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-11-17 14:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    296

    帖子

    0

    高级会员

    Rank: 4

    积分
    945
    最后登录
    2017-3-15
    发表于 2016-1-28 02:55:41 | 显示全部楼层

                    if((0 == key_cnt) && (0 == GPIO_HAL_ReadPinInput(KEY_GPIO,KEY_PIN)))
                    {
                                    key_cnt = 20000;
                                    GPIO_HAL_ClearPinOutput(LED0_GPIO, LED0_PIN);
                                    memcpy(g_curr_send_buf, "Key Pressed .\r\n\r\n\r\n",15);
                                    USB_Class_CDC_Send_Data(g_app_handle, DIC_BULK_IN_ENDPOINT,
                                                    g_curr_send_buf, 15);
                    }
                    else
                    {
                                    if( key_cnt > 0 )
                                    {
                                            if(1 == GPIO_HAL_ReadPinInput(KEY_GPIO,KEY_PIN))
                                                    key_cnt--;
                                    }
                                    else
                                                    GPIO_HAL_SetPinOutput(LED0_GPIO, LED0_PIN);
                    }


    可以正常运行10次。

    不明白为啥以后这段代码不再发送数据,LED却正常,原收发一样可以继续收发...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2016-1-28 09:14:06 | 显示全部楼层
    13656693146 发表于 2016-1-27 17:17
    KSDK_1.3.0 KL43 例程的CDC中有USB_Class_CDC_Interface_DIC_Send_Data()这个函数?

    最好找那个FRDM的例程,KL27搞了一段时间了,这些功能都调过,没啥问题的
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    23

    帖子

    0

    注册会员

    Rank: 2

    积分
    142
    最后登录
    2016-4-27
     楼主| 发表于 2016-1-28 09:22:14 | 显示全部楼层
    七七bb 发表于 2016-1-28 09:14
    最好找那个FRDM的例程,KL27搞了一段时间了,这些功能都调过,没啥问题的

    主要是找不到啊,官网没提供
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2016-1-29 08:56:40 | 显示全部楼层
    13656693146 发表于 2016-1-28 09:22
    主要是找不到啊,官网没提供

    我这里有,可惜文件比价大,不好上传
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 20:18 , Processed in 0.109089 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表