查看: 2183|回复: 0

[原创] 【IRD-LPC1768-DEV】7USB虚拟串口

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:16
  • 签到天数: 2114 天

    [LV.Master]伴坛终老

    56

    主题

    4778

    帖子

    73

    金牌会员

    Rank: 6Rank: 6

    积分
    24815
    最后登录
    2024-4-28
    发表于 2019-3-12 21:21:52 | 显示全部楼层 |阅读模式
    接下来驱动USB,本次主要是想在开发板上实现一个USB Device,通过USB虚拟串口与上位机通讯。
    0001.png
    在核心板的原理图上可以看到,开发板的USB Host与USB Device使用的是同一个USB接口,管脚为P0.29和P0.30,核心板上是通过两组电阻来实现USB接口选择的,本次试用USB Device,所以需要把核心板上默认连接的R1和R2电阻拆掉,断开USB Host连接,然后在R10和R25上进行短接,连接到USB Device。
    0002.png
    在底板原理图上,可以看到PRTR5V0U2X,USB口做了ESD防静电保护,P0.13和P0.14两个IO口分别控制这一个LED指示灯。
    0003.png
    接下来就可以创建Keil工程量,创建工程时需要在运行时环境中配置以上选项,这里USB设备需要配合keil的RTX系统实现。
    0004.png
    配置完RTE后生成工程如上图所示。
    0005.png
    在工程中创建MyCDC.c和USBD_User_CDC_ACM_UART_0.c。
    0006.png
    接下来对工程参数进行配置,首先要配置RTE_Device.h,这里启用USB控制器,串口部分根据需求是否启用即可。
    0007.png
    接下来看看USBD_Config_0,这个文件是用来配置USB的设备描述符、配置描述符、字符串描述符的,全部采用默认值就可以。
    0008.png
    USBD_Config_CDC_0 是用来配置接口描述符的,全部采用默认即可。
    0009.png
    RTX_Conf_CM.c这个是配置RTX实施操作系的参数,这个配置错误系统运行不起来,根据上图配置即可。
    0010.png
    在工程配置中的C99和GNU选项取消掉。至此工程设置部分基本完成,接下来开始编写代码。
    在MyCDC.c中添加如下代码:


    #include "cmsis_os.h"
    #include "rl_usb.h"
    int main (void) {
      USBD_Initialize         (0U);         // USB Device 0 Initialization
      USBD_Connect            (0U);         // USB Device 0 Connect


      while (1) {
        osSignalWait (0U, osWaitForever);
      }  
    }
    在主函数中,调用USBD_Initialize()和USBD_Connect(),这2个函数会初始化USB内核和CDC类,并创建3个线程,用于中断端点和块传输端点的数据读写,还有一个是端点0的控制传输线程。USB中间件会已事件驱动模式调用相应的回调函数。
    在文件USBD_User_CDC_ACM_UART_0.c中,实现所有自己需要的代码。
    0011.png
    这里的代码较多,但是最重要的是USBD_CDC0_ACM_DataReceived函数,这个就是在USB-CDC接收到数据后的回调函数,在这处理数据即可,本例中只是实现了接收到数据后原样发送回去,实现了一个简单的回环。
    0012.jpg
    开发板下载程序,此时USB Device口上端的两个绿色LED已经亮了,证明USB Device控制正常,连接USB Device到上位机USB口。
    0013.png
    此时在设备管理器中,已经发现虚拟串口设备了,我的上位机是Win10系统,驱动是自行安装完成的。如果是Win7或者Win8,需要安装驱动。
    0014.png
    驱动文件已经在工程源代码中提供了。
    0015.png
    在上位机上打开串口调试助手,打开虚拟串口,发送信息后信息会被回送到接收窗口,至此,USB的CDC示例完成。


    总结:LPC1768的USB Host和USB Device公用同一个USB口,同一时间只能使用一个,而且需要在核心板上通过调节电阻来配置。CMSIS Driver来驱动USB过程也不是很复杂,本工程虽然只是实现了简单的CDC串口信息回传,但是基本架构搭建完成了,更加丰富的功能只需要在USBD_User_CDC_ACM_UART_0.c中添加代码实现即可。


    工程代码:
    USB-CDC.zip (465.6 KB, 下载次数: 18)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-29 06:51 , Processed in 0.116643 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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