This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/EK-TM4C123GXL:USB 串行 API 链接

Guru**** 2482155 points
Other Parts Discussed in Thread: TM4C123GH6PM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/717850/ccs-ek-tm4c123gxl-links-to-usb-serial-apis

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:TM4C123GH6PM

工具/软件:Code Composer Studio

我正在尝试基于 TM4C123GH6PM 设计和构建不依赖 ICDI 的器件、我一直在努力在串行器件模式下实现 USB。  我在这一项目上取得了一些进展,我在下文(在我所做的工作部分)中作了说明,我希望能够帮助其他有类似困难的人。  下文一段概述了问题。  我们衷心感谢您的任何建议。

谢谢、

插孔  

我遇到的问题: 如下所述、我已成功运行随 TivaWare 提供的 USB 示例。  但是、我将 USB 功能迁移到现有程序的尝试未成功。  在构建过程中、与 USB 相关的 API (如下所示)数量为"未解析符号"。  我怀疑这些符号是在原始示例中链接或导入的程序中定义的。  我已将似乎相关的文件从示例文件夹复制到我的新项目文件夹中、并尝试链接到不同的程序、但无法执行此操作。  

 未定义                                      的首次引用        
 符号                                                              
 ------                                                 --------        
 USBBufferEventCallback          ./USB_serial_structs.obj
 USBBufferFlush                        ./main.obj              
 USBBufferInit                            ./main.obj              
 USBDCDCInit                            ./main.obj              
 USBDCDCPacketRead             ./USB_serial_structs.obj
 USBDCDCPacketWrite              ./USB_serial_structs.obj
 USBDCDCRxPacketAvailable   ./USB_serial_structs.obj
 USBDCDCTxPacketAvailable   ./USB_serial_structs.obj
 USBDeviceIntHandlerInternal   ./usbdhandler.obj       
 USBStackModeSet                   ./main.obj              

我所做的:我的方法是遵循 LaunchPad Workshop 工作簿中的 USB 示例(实验7)、我找到了可以更新该工作簿的要点。  在工作手册的第1-16页、指示用户从 TI 网页下载 Windows 端 USB 示例。 但是、链接已断开、所提供的 URL 中没有任何内容。  通过搜索 e2e 论坛、我确定可以从 http://www.ti.com/tivaware 下载该应用。  接下来、用户需要下载并安装与 Windows 10兼容的新驱动程序。  您需要的是补丁文件(SW-TM4C-2.1.4.178.patch-1.0.zip)、这些文件也可从 TIvaware 网站访问。  

USB_DEV_BULK 示例的工作原理如所述、但使用大容量器件模式实现通信需要我充分了解 Windows 应用程序以对其进行修改或编写自己的文件。  由于我已经对串行通信有所熟悉、因此我决定查看 USB_DEV_serial 示例。  

Tivaware USB_DEV_serial 程序随附的自述文件可能更具说明性、因为该程序的目的、所需的硬件和连接不会向用户介绍。  2016年3月、JustGreg 在 e2e TM4C 微控制器论坛上发布了一个问题:"USB_DEV_serial example - please expling it is working"。  通过该主题中的信息(以及我自己的观察结果)、我可以弄清编写程序是为了允许两台计算机通过设备进行通信。  计算机 A 连接到调试 USB 端口、计算机 B 连接到设备端口。  当计算机 A 发送串行数据时、ICDI 通过 uart0将其传递给器件微控制器。  然后、器件微控制器通过器件 USB 端口将数据传递到计算机 B。  在2016线程中、JustGreg 指出、串行函数不需要此程序中的任何 UART 相关代码。

我简化了示例程序、提供了一个能够回波通过器件 USB 端口引入的数据的有效程序。  为此、我删除了所有与 UART 相关的代码、并在 RXHandler 方法中插入了以下代码:
 案例 USB_EVENT_RX_Available:
       {
           uint32_t ui32Read;
           uint8_t ui8Char;
            bool 读取= true;   
           if (g_BSendingBreak) //如果当前正在发送 break,则不接收更多数据。
           {   返回;  }
           while (read = true){ //保持循环直到缓冲区为空
              ui32Read = USBBufferRead ((tUSBBuffer *)&g_sRxBuffer、&ui8Char、1);
              if (ui32Read) //我们是否得到了一个字符?
                 { //将字符回显到 COM 端口
                 USBBufferWrite ((tUSBBuffer *)&g_sTxBuffer、
                           (uint8_t *) ui8Char、1);
                 G_ui32TxCount++; //更新字节计数。
                 }
               否则{     //如果缓冲区中没有剩余字符
                 读取= false;     //退出函数。
                 返回;
                 }
            }
           中断;
         }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    若要解析未定义的符号、需要告诉 CCS USB 库的路径。 为此、请右键点击您的项目并选择"Show Build Settings"。  展开"ARM Linker"行并选择"File Search Path"。  使用'+'按钮添加库。 您可以在路径中使用变量、也可以像我在下面的示例中所做的那样创建直接链接:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob、他解决了这个问题。
    插孔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    也许 您自己获得 的绿色解决方案应该已经被放在 Bob 的回答上!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你是对的。  Bob 的回答解决了这个问题。  任何相反的建议都不是有意提出的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     在按钮 &&功能中没有考虑到这一点、用户无法  撤消 鼠标电池的电量低 、无意 中解决了点击问题。