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.

[参考译文] TM4C123GH6PM:USB0是外设 isn#39;t 正常运行、USB_O_is 从未更改、但0

Guru**** 2482225 points
Other Parts Discussed in Thread: TM4C123GH6PM, EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/718425/tm4c123gh6pm-usb0-is-peripheral-isn-t-functioning-usb_o_is-got-never-changed-but-0

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

尊敬的 E2E 论坛、我正在尝试通过 USB 在午餐板上与 TM4C123GH6PM 进行通信。 前提是 Stellaris 示例也不起作用。 我的代码不断轮询中断状态寄存器。 无论 USB 主机信号如何、它都不会改变、而是0。任何人使 USB 在该部件上正常工作、这似乎是一个硬件问题?

main...等

while (1){

ui8Status = HWREGB (USB0_BASE+ USB_O_IS)

UARTprintf ("\nUSBIntStatusControl=%x..\n"、ui8Status);

}; 

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

    您是否已将 USB 电缆插入 LaunchPad 左侧的端口、并已将电路板顶部的 USB 选择开关从"Debug"切换到"Device"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、Ralph、布线正常。 来自 ICDI USB 连接器的 I 电源板和电源开关处于正确位置。 所有 LED 工作正常。 让我们不要讨论 Windows 驱动程序、我在 Win 10上试用了它、该部件未枚举。 让我们也从有关 TI 的文献目录的讨论中放弃、它看起来像是硬件问题、因为我正在检查是否直接注册。
    在器件侧连接/断开 USB 以及 lsusb 不会更改 USB_O_is 状态、该状态始终保持为零。

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

    但您认为 EK-TM4C123GXL LaunchPad 无法与 TI 提供的 USB 示例配合使用? 我可以想到的唯一硬件问题是、您的 USB 电缆有故障、或者未使用正确的 USB 端口。 您是否插入了两根 USB 电缆? 如果不是、则不能将 ICDI 端口用于 USB。 ICDI 用于编程和反向通道 UART。 USB 仅在电路板左侧的端口上提供。

    您是否对 TivaWare 工程进行了任何更改? 如果您想连接它、我可以在我的 LaunchPad 上测试它吗?

    您是否在设备管理器中看到任何表明 Windows 10注意到 USB 设备的指示?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ralph、首先、非常感谢您的观看。 是的、EK-TM4C123GXL LaunchPad 无法与 TI 提供的 USB 示例(USB_BULK_DEV)配合使用、没错。
    我在||中使用2根电缆-一根用于 icdi、一根用于器件 USB 连接器。 因此、UART 正在工作、我能够从例程中打印出 msgs。 USB0外设模块的功能有问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ralph、Win10请参阅 ICDI、但不能识别它-这显然是驱动程序问题、win10看不到 USB 的设备端-这是硬件问题、正如在 Linux OS 上所证明的那样。 中断状态寄存器具有0状态、并且不会更改状态、无论主机信号如何、都可以通过 Wireshark 查看。 我稍后会发布代码、我需要稍微调整一下、以平坦成 A4格式。实际上、您可以轻松检查寄存器 USB0_BASE+ USB_O_IS 的状态、不需要我的例程、只需打印出该 statusof reg。 无限循环中。
    谢谢、
    Alex。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     (两个) 0Ω Ω 电阻器' R25和 R29的"缺失"可能会反映海报的情况吗?    几名工作人员回忆起过去两个电阻器都存在/被考虑在内!

    既不牢固、也不使用带此板的 USB -但这似乎 是一个"合理"的解释...   (有一个希望)

    "快速/脏污"测试 只能看到屏幕位置 R25和 R29处的跳线位置。    (位于 LPAD (也称为午餐盒) J1/J3接头上方。)

    [编辑] 发现员工(工作)午餐休息时间:

    "OTG 功能可通过使用0 Ω 电阻器组装 R25和 R29来启用。   这些 电阻器将 USB ID 和 USB VBUS 信号连接到 PB0和 PB1。"   因此-电阻 器"添加"-可能无法证明解决方法!

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

    您好 CB1、

    TivaWare USB_DEV_BULK 示例在不组装这些电阻器的情况下运行良好。 我将示例 USB_DEV_BULK 加载到 EK-TM4C123GXL LaunchPad 上、并将 TivaWare 批量器件下枚举为 Windows 设备管理器中的"通用批量器件"的器件。

    您好、Alexander、

    我感谢您的意见、但站在我的位置、如此轻松地排除 Windows 驱动程序等问题、尤其是在报告 ICDI 未被识别时、是我的 POV 的一个问题。

    首先、让我清楚地指出、除非我们发现 LaunchPad 有缺陷(没有证据表明存在缺陷)、否则电路板本身不存在硬件问题。 认为这是一个硬件问题、而不是对如何使用示例项目或 Windows 驱动程序问题的误解是错误的。

    我已经使用连接的2条 USB 电缆和两种开关配置测试了类似您的设置的 USB_DEV_BULK 示例。 Windows 10中可以正确识别 Bulk 端口和 ICDI 端口。

    现在、Windows 10与 Tiva 器件有着共同的问题、我们必须专门发布新的驱动程序来解决这一问题。 因此、我将要求您执行的下一步是进入设备管理器、为 ICDI 端口和 USB 散装端口安装正确的驱动程序软件。

    Windows USB 设备驱动程序可从 software-dl.ti.com/.../SW-TM4C-2.1.4.178.PATCH-1.0.zip 下载

    Stellaris ICDI 驱动程序可从 www.ti.com/.../stellaris_icdi_drivers 下载

    请注意、在设备管理器中、"批量设备"可能会显示在"通用串行总线控制器"菜单下。

    请安装这些最新的驱动程序、并报告 Device Manager (设备管理器)中显示的内容、以及您是否看到基本 TivaWare USB_DEV_BULK 示例的功能有任何更改(未进行任何修改!)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    OPS!! 是的、没错! 25、29兰特没有人……我不知道这是不是一个原因,不幸的是,我的焊接台被我的儿子拿走了,我在周末之前就不会有了…… 因此、很快就会安装短路、然后再报告。 感谢 Ralph 的提示。 希望一切都能正常工作、当我的儿子把我的焊台还给我时、不想切换到另一个套件、因为只有 TI 套件允许同时使用 UART 和 USB、器件模式。BTW、任何特殊原因、为什么它有助于消除 R25、29?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alexander、

    这些电阻器是在实现后在其帖子中编辑的 CB1、仅 USB OTG 需要这些电阻器。 它们与解决您的问题无关。 正如我在帖子中所说、如果没有 USB_DEV_BULK 示例、则运行正常。

    请说明与驱动程序相关的要点、以及 USB_DEV_BULK 示例在 TivaWare 中提供、并查看这是否会使您的电路板按预期运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    亲爱的 拉尔夫,我住了 25,29号,正如你所说的那样,它没有帮助。 我无法使 SW-TM4C-2.1.4.178/examples/boards/dk-tm4c123g 中的 USB_dev_bulk  正常工作。 请您发布您的工作代码、让我试一下吗?  我在一段时间之前从 TI 网站下载的那个、拒绝枚举、甚至与 LED 闪烁不兼容。
    谢谢、

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ralph、SW-TM4C-2.1.4.178/examples/boards/dk-tm4c123g/USB_dev_bulk 是否是最新和最出色的示例? 我正在使用它、但它不起作用!! 司机都很棒!!!! 还有其他想法吗? 您可以压缩并发布您的工作代码吗?
    Alex。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexander、

    我认为这就是问题的原因... 我的理解是您拥有的电路板是 EK-TM4C123GXL。 DK-TM4C123G 是一个非常不同的电路板、并且软件示例不直接兼容!

    请在 SW-TM4C-2.1.4.178/examples/boards/ek-tm4c123gxl 文件夹中查找相同的示例、然后尝试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    //
    //// usb_dev_bulk.c -通用批量器件示例的主例程。
    //
    //版权所有(c) 2011-2017 Texas Instruments Incorporated。 保留所有权利。
    //软件许可协议
    //
    //德州仪器(TI)提供此软件仅供
    和//仅供 TI 的微控制器产品使用。 软件归
    // TI 和/或其供应商所有,并受适用的版权
    //法律保护。 您不能将此软件与"病毒"开源
    //软件组合在一起以形成更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //对于
    
    本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何
    //情况下、TI 不对任何
    原因造成的特殊、意外或必然//损害负责。
    //
    //这是 DK-TM4C123G 固件包的修订版本2.1.4.178的一部分。
    ////
    *****************
    #include 
    #include 
    #include "inc/hw_memmap.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/sysctl.h"
    
    #include 
    #include 
    include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/debug.h"
    #include "drivers/utilides.pns/usbr/包含
    
    "drivers/utilides.h"
    
    #include "drivers/drivers/usb.lib"#drivers/utilides.pnecnecnech #include "drivers/usb.dlib/usb.utilidtids/udines.h"#include "drivers/usb.usb.utils/usb.dl.dl.ids/us.deb/us.deb/udec"#include"#include "drivers/usb.utils/ines.h"#include "drivers/us.utils/br/usb.dlib.deb.deb.deb/us.dl.dl.idt#include
    
    
    
    
    
    
    
    "#include "#br/us.utils/us.idtrigg.ids/ines.h"
    #include "#include "drivers/us.us.us.utils/us.utils/us.util
    
    
    
    
    
    
    //
    //! \addtogroup example_list
    //! 

    USB 通用大容量器件(USB_DEV_BULK)

    //! //! 此示例提供通用 USB 器件、可提供简单的批量数据 //! 传输到主机和从主机传输。 器件使用特定于供应商的类 ID //! 并支持单个批量输入端点和单个批量输出端点。 //! 从主机接收的数据假定为 ASCII 文本、并且为 //! 回显所有字母字符的情况。 //! //! 安装 CD 和 //!中提供了设备的 Windows INF 文件 在 TivaWare 的 C:/ti/TivaWare_C_Series-x.x/windows_drivers 目录 中//! 版本。 此 INF 包含安装 WinUSB //! Windows XP 和 Vista PC 上的子系统。 WinUSB 是 Windows 子系统 //! 允许用户模式应用程序无需 //!即可访问 USB 设备 特定于供应商的内核模式驱动程序。 //! //! 示例 Windows 命令行应用程序 USB_bulk_example、说明 //! 还提供了如何连接到大容量器件以及与之通信的方法。 //! 应用程序二进制文件作为``用于 C 系列的 TivaWare 的一部分进行安装 //! 安装光盘 上的 PC Companion 实用程序软件包(SW-TM4C-USB-WIN)//! 或从 http://www.ti.com/tivaware 下载 。 项目文件是 //! 以允许使用 //!构建示例! Microsoft Visual Studio 2008。 此应用程序的源代码可以是 //! 目录 ti/TivaWare_C_Series-x.x/tools/USB_BULK_example 中找到。 //// ***************** void gpio4led_init (void); void gpio4led_init (void) { // //启用用于板载 LED 的 GPIO 端口。 // 您好 Ralph,非常感谢您的帮助。 我根据您的请求复制了以下代码。 它是最初的 USB_DEV_BULK TI 示例、我只复制了 来自使 TI 示例闪烁的 LED 相关行、以指示路由已变平并正在运行 T 问题-正如我之前报告的:
    1.系统无法枚举设备,/dev/ttyACM0上的 USB 模块没有任何调试输出,这意味着 USB0模块已死




    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); // //检查是否启用了外设访问。 // while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOF)) { ; }; // //为 LED 启用 GPIO 引脚(PF3)。 将方向设置为输出、然后 //启用 GPIO 引脚以实现数字功能。 // GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、0xF); } //********* // //系统节拍率表示为节拍/秒和一毫秒 //周期。 //// ***************** #define SYSTICKS_PER_second 100 #define SysTick _PERIOD_MS (1000 / SYSTICKS_PER_second) //0x08绿色 ox02红色0x04蓝色 uint8_tled = 0x02; //********* // //全局系统节拍计数器。 //// ***************** volatile uint32_t g_ui32SysTickCount = 0; volatile uint32_t g_ui32Flags = 0; //********* // ////变量跟踪发送和接收计数。 //// ***************** volatile uint32_t g_ui32TxCount = 0; volatile uint32_t g_ui32RxCount = 0; #ifdef debug uint32_t g_ui32UARTRxErrors = 0; #endif //********* // //与调试相关的定义和声明。 // //如果在编译期间定义了调试,则可以通过 UART0获得调试输出。 //// ***************** // // //将所有调试打印调用映射到调试编译中的 UARTprintf。 //// ***************** #define DEBUG_PRINT UARTprintf //********* // //编译发行版本中的所有调试打印调用。 //// ***************** //#define debug_print while (0)((Int32_t (*)(char *、...)) 0) //********* // //图形上下文,用于在彩色 LCD 显示屏上显示文本。 //// ***************** tContext g_sContext; //********* // //用于将命令从中断上下文传递到主循环的标志。 //// ***************** #define COMMAND_PACKET_RECEIVITED 0x00000001 #define COMMAND_STATUS_UPDATE 0x00000002 char * g_pcStatus; //********* // //全局标志,指示 USB 配置已设置。 //// ***************** 静态易失性 bool g_bUSBConfigured = false; //********* // //如果驱动程序库遇到错误,则调用的错误例程。 //// ***************** #ifdef debug void __error__(char *pcFilename、uint32_t ui32Line) { UARTprintf ("第%d 行的%s\n"ui32Line、pcFilename 出错); while (1) { } } #endif //********* // //系统节拍计数器的中断处理程序。 //// ***************** void SysTickIntHandler (void) { // //更新我们的系统节拍计数器。 // G_ui32SysTickCount++; } //********* // //接收新数据并将其回显到主机。 // //\param psDevice 指向要 处理其数据的设备的实例数据//。 //\param pi8Data 指向 USB 接收缓冲区中新接收的数据。 //\param ui32NumBytes 是可处理的数据字节数。 // //每当我们收到 来自主机的数据可用的通知时,就会调用此函数。 我们逐字节读取数据、并交换找到 的任何字母字符的大小写//、然后将其写回 以便//传回主机。 // //\return 返回已处理数据的字节数。 //// ***************** 静态 uint32_t EchoNewDataToHost (tUSBDBulkDevice * psDevice、uint8_t * pi8Data、 uint_fast32_t ui32NumBytes) { uint_fast32_t ui32Loop、ui32Space、ui32Count; uint_fast32_t ui32ReadIndex; uint_fast32_t ui32WriteIndex; tUSBRingBufObject sTxRing; // //获取当前缓冲区信息,以便我们直接写入 //发送缓冲区(我们已经从中获得了足够的信息 //直接访问接收缓冲区的参数)。 // USBBufferInfoGet (&g_sTxBuffer、&sTxRing); // //传输缓冲区中有多少空间? // ui32Space = USBBufferSpaceAvailable (&g_sTxBuffer); // //我们可以处理这一整段时间的字符数? // ui32Loop =(ui32Space < ui32NumBytes)? ui32Space:ui32NumBytes; ui32Count = ui32Loop; // //更新接收计数器。 // G_ui32RxCount += ui32NumBytes; // //转储调试消息。 // debug_print ("接收到的%d 字节\n"、ui32NumBytes); // //设置为通过直接访问 USB 缓冲区来处理字符。 // ui32ReadIndex =(uint32_t)(pi8Data - g_pui8USBRxBuffer); ui32WriteIndex = sTxRing.ui32WriteIndex; while (ui32Loop) { // //从接收缓冲区复制到发送缓冲区转换 //途中出现字符大小写。 // // //这是小写字符吗? // if ((g_pui8USBRxBuffer[ui32ReadIndex]>='a')&& (g_pui8USBRxBuffer[ui32ReadIndex]<='z') { // //转换为大写并写入发送缓冲区。 // G_pui8USBTxBuffer[ui32WriteIndex]= (g_pui8USBRxBuffer[ui32ReadIndex]-'A')+'A'; } 其他 { // //这是大写字符吗? // if ((g_pui8USBRxBuffer[ui32ReadIndex]>='a')&& (G_pui8USBRxBuffer[ui32ReadIndex]<='Z') { // //转换为小写并写入发送缓冲区。 // G_pui8USBTxBuffer[ui32WriteIndex]= (g_pui8USBRxBuffer[ui32ReadIndex]-'Z')+'z'; } 其他 { // //将接收到的字符复制到发送缓冲区。 // G_pui8USBTxBuffer[ui32WriteIndex]= G_pui8USBRxBuffer[ui32ReadIndex]; } } // //移动到下一个字符,注意调整指针 //必要时缓冲区换行。 // ui32WriteIndex++; ui32WriteIndex = (ui32WriteIndex == bulk_buffer_size)? 0:ui32WriteIndex; ui32ReadIndex++; ui32ReadIndex =(ui32ReadIndex == bulk_buffer_size)? 0:ui32ReadIndex; ui32loop--; } // //我们已对数据进行处理,因此现在发送已处理的数据 //返回到主机。 // USBBufferDataWritten (&g_sTxBuffer、ui32Count); debug_print ("写入%d 个字节\n"、ui32Count); // //我们处理了尽可能多的直接来自接收缓冲区的数据 //我们需要返回允许较低层的字节数 //适当地更新其读取指针。 // return (ui32Count); } //********* // ////在显示屏上显示状态字符串。 // //\param psContext 是指向表示 //显示的图形上下文的指针。 //\param pi8Status 是要显示的字符串的指针。 //// ***************** void DisplayStatus (tContext * psContext、char * pcStatus) { // //用黑色清除线条。 // GrContextForegroundSet (&g_sContext、ClrBlack); GrStringDrawCenter(psContext," "、-1、 GrContextDpyWidthGet (psContext)/ 2、16、true); // //绘制新的状态字符串 // debug_print ("%s\n"、pcStatus); GrContextForegroundSet (&g_sContext、ClrWhite); GrStringDrawCenter(psContext、pcStatus、-1、 ContextDpyWidthGet (psContext)/ 2、16、true); } //********* // //处理与传输通道(到 // USB 主机的数据)相关的批量驱动程序通知。 // //\param pvCBData 是此通道的客户端提供的回调指针。 //\param ui32event 标识我们收到通知的事件。 //\param ui32MsgValue 是特定于事件的值。 //\param pvMsgData 是特定于事件的指针。 // //此函数由批量驱动程序调用,以通知我们 与传输数据通道(向 USB 主机传输//数据的输入通道)操作相关的任何事件//。 // //返回值是特定于事件的。 //// ***************** uint32_t TxHandler (void *pvCBData、uint32_t ui32Event、uint32_t ui32MsgValue、 void *pvMsgData) { // //我们不需要对任何发送事件进行任何响应 //。 我们所做的就是更新传输计数器。 // if (ui32Event == USB_EVENT_TX_COMPLETE) { G_ui32TxCount += ui32MsgValue; } // //转储调试消息。 // debug_print ("TX complete %d\n"、ui32MsgValue); 退货(0); } //********* // //处理与接收通道相关的批量驱动程序通知( 来自// USB 主机的数据)。 // //\param pvCBData 是此通道的客户端提供的回调指针。 //\param ui32event 标识我们收到通知的事件。 //\param ui32MsgValue 是特定于事件的值。 //\param pvMsgData 是特定于事件的指针。 // //此函数由批量驱动程序调用,用于通知与 接收数据通道(执行 来自 USB 主机的//数据的输出通道)操作相关的任何事件//。 // //返回值是特定于事件的。 //// ***************** uint32_t RxHandler (void *pvCBData、uint32_t ui32Event、uint32_t ui32MsgValue、 void *pvMsgData) { // //我们要发送哪个事件? // switch (ui32event) { // //我们已连接到主机,现在可以进行通信。 // 案例 USB_EVENT_Connected: { G_bUSBConfigured = true; G_pcStatus ="主机已连接"; G_ui32Flags |= COMMAND_STATUS_UPDATE; // //刷新缓冲区。 // USBBufferFlush (&g_sTxBuffer); USBBufferFlush (&g_sRxBuffer); 中断; } // //主机已断开连接。 // 案例 USB_EVENT_DISCONNECTED: { G_bUSBConfigured = false; G_pcStatus ="主机不连接。"; G_ui32Flags |= COMMAND_STATUS_UPDATE; 中断; } // //已收到新的数据包。 // 案例 USB_EVENT_RX_Available: { tUSBDBulkDevice * psDevice; // //从回调数据获取指向我们的实例数据的指针 //参数。 // psDevice =(tUSBDBulkDevice *) pvCBData; // //读取新数据包并将其回传到主机。 // return (EchoNewDataToHost (psDevice、pvMsgData、ui32MsgValue)); } // //忽略暂挂并立即恢复。 // 案例 USB_EVENT_SUSPEND: 案例 USB_EVENT_RESUME: 中断; // //忽略所有其它事件并返回0。 // 默认值: 中断; } 退货(0); } //********* // //配置 UART 及其引脚。 这必须在 UARTprintf()之前调用。 //// ***************** void ConfigureUART (void) { // //启用 UART 使用的 GPIO 外设。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // //启用 UART0 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0); // //为 UART 模式配置 GPIO 引脚。 // ROM_GPIOPinConfigure (GPIO_PA0_U0RX); ROM_GPIOPinConfigure (GPIO_PA1_U0TX); ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); // //使用内部16MHz 振荡器作为 UART 时钟源。 // UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC); // //初始化控制台 I/O 的 UART // UARTStdioConfig (0、115200、16000000); // UARTStdioConfig (0、115200、16000000); } //********* // //这是主应用程序输入函数。 //// ***************** int main (void) { 易失性 uint32_t ui32Loop; uint32_t ui32TxCount; uint32_t ui32RxCount; tRectangle sRect; pccar Buffer[16]; //为中断处理程序启用怠惰堆栈。 这允许使用浮点 //在中断处理程序中使用的指令,但代价是 //额外的堆栈用法。 // ROM_FPULazyStackingEnable(); // //将时钟设置为以50MHz 的频率从 PLL 运行 // ROM_SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz); ConfigureUART(); gpio4led_init (); debug_print ("\n\n>>>>>)>>>>>>>> .tiva C Hello USB>>>>> \n"); 转到 usbinit; //goto mainloop; // //最初未配置。 // G_bUSBConfigured = false; // //初始化显示驱动程序。 //CFAL96x64x16Init(); // //初始化图形上下文。 // GrContextInit (&g_sContext、&g_sCFAL96x64x16); // //用蓝色填充屏幕顶部以创建横幅。 // sRect.i16XMin = 0; sRect.i16YMin = 0; sRect.i16XMax = GrContextDpyWidthGet (&g_sContext)- 1; sRect.i16YMax = 9; // GrContextForegroundSet (&g_sContext、ClrDarkBlue); GrRectFill (&g_sContext、&sRect); // //更改白色文本的前景。 // GrContextForegroundSet (&g_sContext、ClrWhite); // //将应用程序名称放在横幅中间。 // GrContextFontSet (&g_sContext、g_psFontFixed6x8); GrStringDrawCenter(&g_sContext,"USB-dev-bulk",-1, GrContextDpyWidthGet (&g_sContext)/ 2、4、0); // //在彩色 STN 显示屏上显示各种静态文本元素。 // GrStringDraw (&g_sContext、"Tx 字节:"、-1、0、32、 false); GrStringDraw (&g_sContext、"Rx 字节:"、-1、0、42、 false); // //启用用于 USB 的 GPIO 外设,并配置 USB //引脚。 // //启用系统勾号。 // ROM_SysTickPeriodSet (ROM_SysCtlClockGet ()/SYSTICKS_PER_second); ROM_SysTickIntEnable(); ROM_SysTickEnable(); usbinit: ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL); ROM_GPIOPinTypeUSBAnalog (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1); ROM_GPIOPinTypeUSBAnalog (GPIO_PORTL_BASE、GPIO_PIN_6 | GPIO_PIN_7); // //在显示屏和 UART 输出上显示应用程序名称。 // Debug_print ("\nTiva C 系列 USB 大容量器件示例\n"); debug_print ("------------------------------------ \n\n"); // //告诉用户我们所达到的目标。 // DisplayStatus (&g_sContext、"配置 USB"); // //初始化发送和接收缓冲区。 // USBBufferInit (&g_sTxBuffer); USBBufferInit (&g_sRxBuffer); // //将我们的器件信息传递到 USB 库并放置器件 //在总线上。 // USBDBulkInit (0、&g_sBulkDevice); // //等待初始配置完成。 //DisplayStatus (&g_sContext、"正在等待主机"); // //清除我们的本地字节计数器。 // ui32RxCount = 0; ui32TxCount = 0; // //主应用程序循环。 // // 主循环: while (1) { // //打开 LED。 // GPIOPinWrite (GPIO_PORTF_BASE、LED、LED); // //延迟一位。 // for (ui32Loop = 0;ui32Loop < 200000;ui32Loop +) { ; }; // //关闭 LED。 // GPIOPinWrite (GPIO_PORTF_BASE、LED、0x0); // //延迟一位。 // for (ui32Loop = 0;ui32Loop < 200000;ui32Loop +) { ; }; // //是否已要求我们更新状态显示? // if (g_ui32Flags & COMMAND_STATUS_UPDATE) { // //清除命令标志 // G_ui32Flags &&~COMMAND_STATUS_UPDATE; DisplayStatus (&g_sContext、g_pcStatus); } // //自我们上次检查以来是否有任何传输流量? // if (ui32TxCount!= g_ui32TxCount) { // //拍摄最新传输计数的快照。 // ui32TxCount = g_ui32TxCount; // //更新由 UART 发送的字节的显示。 // usnprintf (pcBuffer、16、"%d "、ui32TxCount); GrStringDraw (&g_sContext、pcBuffer、-1、48、32、 对); } // //自我们上次检查以来是否有任何接收流量? // if (ui32RxCount!= g_ui32RxCount) { // //拍摄最新接收计数的快照。 // ui32RxCount = g_ui32RxCount; // //更新 UART 接收到的字节的显示。 // usnprintf (pcBuffer、16、"%d "、ui32RxCount); GrStringDraw (&g_sContext、pcBuffer、-1、48、42、 对); } }

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

    您能否详细说明您发布该代码的原因? 只需为您的特定评估板导入正确的 CCS 项目即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    问题1. 我发布此代码是因为在您的回复中、您提到如果我发布此代码、您可以在您的环境中尝试它

    2、我发布这篇文章是为了希望有人发现错误

    3.我从 EK-123gxl 文件夹尝试 USB_dev_bulk 项目。 结果是一样的!!! 也不是 Linux、也不是 Windows 枚举正确!

    4.尝试从 D:\SW-TM4C-2.1.4.178.PATCH-1.0 (1)\windows_drivers 安装 WIN 驱动程序会导致错误,请参阅下面的快照

    5.设备管理器将主板视为 ICDI -这是正确的, 作为通用批量驱动程序-正确的,但操作系统无法正确读取设备描述符...

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

    哈希文件错误发生在几个版本之前与设备驱动程序的日期不匹配。 但是、这在最新的驱动程序中得到解决、我返回以确认情况。

    是否可以尝试卸载大容量设备的当前驱动程序,然后尝试重新安装修补程序? 解决该问题的方法。

    这可能会起作用、但我更担心的是、它可能无法完全卸载先前的驱动程序以解决问题。

    现在可能发生的情况是,已安装了另一个使用相同的.inf 名称的驱动程序。 我们已经看到驱动程序发生错误、该驱动程序已被更改以包含不同的设备、但原始驱动程序仍以相同的.inf 名称安装。 驱动程序文件由.inf 文件名存储、并且使用该名称的驱动程序多个但不同、这会使 Windows 无法工作。 因此、如果原始文件仍然存在、Windows 可能会继续使它的电线交叉。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ralph、按照您的说明、我将原始 USB_dev_bulk 项目复制到 Windows 域并使用 CCS 打开它。 但是、尝试构建该文件时会出现进一步的错误:

    ****为项目 USB_DEV_BULK 构建配置调试****关于它有什么想法? 您是否愿意发布您的工作代码? 它与正式发布的示例有何不同? 
    最棒的 
    Alex。

    "c:\\ti\\ccsv8\\utils\\bin\\gmake"-k 所有 构建目标:"USB_dev_bulk.out" 调用:ARM 链接 器"C:/ti/ccsv8/tools/compiler/ti-cgt-arm_18.1.2.LTS/bin/armcl -mv7M4 -code_state=16 -float_support=FPv4SPD16 -me -warne-define=ccs_define=-mccs_bul_bulse-display_size_sections=-g=-f_buldbule_display_infot_buls=-ment-dbul_infot_code_s=-ment-dbulation_reat_infot_code_display_bulation_reat_bule-m=-ment-dbul_bule-ment-dbag_bul_buls=-g_infot_infot_infot_code_s=-ment-dbulation_reat_code.g=-ment-dbul_bulation_ree_display-g_bule-bul_bul_bule-bule-bul /StellarisWare/usblib/ccs-cm4f/Debug/usblib-cm4f.lib /StellarisWare/driverlib/ccs-cm4f/Debug/driverlib-cm4f.lib /utils/ustdlib.obj /utils/uartstdio.obj /ti/ccsv8/tools/compiler/ti-cgt-arm_18.1.2.LTS/include /ti/ccsv8/tools/compiler/ti-cgt-arm_18.1.2.LTS/lib "./usb_dev_bulk_ccs.cmd"、第47行:错误#10263:闪存存储器范围 已指定 "。/usb_dev_bulk_ccs.cmd"、第47行:错误#10264:闪存存储器范围与 现有存储器范围重叠 "。/usb_dev_bulk_ccs.cmd"、第49行:错误#10264" 已指定"USB_sbulk_sram:错误:#10264"。 SRAM 存储器范围与 现有存储器范围 SRAM "../usb_dev_bulk_ccs.cmd"、第70行:警告#10190-D: 重新定义绝对符号"__stack_top" "../usb_dev_bulk_ccs.cmd"、第70行:警告#10190-D:绝对符号 "__stack_top"正在 重新定义。"usbulk_dev_bulk_ccs.cmd" ;在重新定义过程中遇到警告#1070_bulk_error_d_d_d_dcs.us_bulk_error #1070"。 "USB_dev_bulk.out"未生成 >>编译失败 makefile:149:目标'USB_dev_bulk.out'的配方失败 gmake:***[USB_dev_bulk.out]错误1 gmake:目标'all'不会由于错误而重做。 ****构建完成****

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由 Stellaris usblib 控制的 UB0模块仍然无法枚举,特别是在枚举过程中,描述符不是 Tx-ed 正确,但它绝对是正确的点,非常感谢!
    Alex。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alexander、

    我对随 TivaWare 提供的内容进行了零修改。

    它看起来像您的项目现在有多个.cmd 文件。

    您提到了有关 CCS 项目的"副本"、这让我很厌烦您没有正确地将其添加到 CCS 中。

    您是否使用了"Project"->"Import CCS Project"选项? 这就是将项目添加到 CCS 的方法。 通过指向文件夹 C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c123gxl\USB_dev_bulk、它将从 TivaWare 中提取 CCS 工程并正确链接所有依赖项。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ralph、我正在尝试编译 C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c123gxl/USB_dev_bulk、并出现以下错误: 
    ldc/USB_dev_bulk.aXF startup_gcc.o:(.isr_vector+0x0):多定义` ` ` ` `g_pfnVectors 的 gcc/startup_gcc.o:(.usf_vector+0x0):首先在函数中定义的 gcc_gfc_gccc.o:startup (0xcisr+gsr+gsr+g0_sr:0xcxc_startup)

    我导入了项目、但没有进行复制。 您是否仍然坚持认为是 Windows 驱动程序问题? 我搜索了 C:/ti 中的所有文件夹、并发现 USB0_ISR_handler 没有定义。 不存在无法枚举的代码... 我可以第五次问:您是否愿意发布您的工作示例?您告诉过您没有修改 TI 官方示例、因此发布不会导致任何违规行为。 我唯一的解释-我没有正确下载 TI 官方示例...这就是我要求您发布示例代码的原因...
    最棒的

    Alex。

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

    您好、Alexander、

    这些错误似乎来自 GCC 编译器、而不是 CCS。 您使用的是哪个编译器?

    我将附加我的项目、但构建问题不会与项目相关...

    我所做的就是正确地从 TivaWare 导入示例、然后将其从我的工作区 e2e.ti.com/.../8741.usb_5F00_dev_5F00_bulk.zip 中压缩

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

    ralph、由 gcc 生成但由代码引起的错误、不是吗?

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

    我不熟悉 GCC、因此我无法真正了解导致这些错误的原因。 从 CCS 换用到 GCC 是否有任何特殊原因?

    此外、我同意 TivaWare 中不包含 USB0_ISR_handler。 如果您自己不添加该函数、我不知道您从哪里获得该函数。 请注意、如果您将一个项目导入 CCS、那么它就位于您的工作区中、而不是 TivaWare 中、因此任何模块都不会显示在 TivaWare 中。 如果您继承了其他人的项目、这可能是存在 USB0_ISR_handler 的原因?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    换句话说、通常由代码而不是编译器导致的错误、对吧? 我选择 GCC、因为我已经拥有适用于 Arm MCU 的有效 gcc 工具链 CCS 只是 IDE、我安装了更多功能强大的工具、而更喜欢普通 aditor 和 CLI。
    谢谢、
    Alex。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Alexander、

    并非所有可能发生的错误都与代码相关、有些可能与链接器/编译器相关、但查看您正在运行的错误、它们肯定与代码相关。 未正确定义 ISR、并且存在 g_pfnVectors 的重复声明。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正确!请注意  、此代码是使用 tirex 获得的、这就是为什么我问您、您是否可以发布已知可正确枚举的工作代码、将苹果与苹果进行比较并排除其他东西、而不是代码本身和库。
    谢谢、

    Alex。

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

    我在 此处提供:e2e.ti.com/.../2660799
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、由于您提到了 tirex、我通过下载和 CCS Cloud 测试了项目、并且在将代码加载到 LaunchPad 后在我的 Windows 10系统中构建或获取要枚举的批量器件不会出现任何问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、非常感谢您分享工作示例。 我在 win10环境中从您的存档中导入了项目。 但尝试编译失败、出现以下错误:

    因此、由于某种原因、USB_dev_bulk_ccs.cmd 文件损坏或我的 env。 调整得不是很好、我在 C:\StellarisWare 中安装了所有 i库、 在 C:\ti-中安装了所有 iWare 文件、均使用默认设置。

    但是、在我的 Linux 环境中、我成功地编译了代码、但仍然无法枚举、但打印了一些与 USB 相关的消息。 这让我认为我没有合适版本的 usblib 库坦率地说,我现在迷路了,不知道如何使 TI 的 USB_DEV_BULK 示例有效....
    感谢您为帮助我所做的努力。 您可以告诉我、我可以从哪里下载最新的书目?
    此致、
    Alex。

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

    您可以从 http://www.ti.com/tool/SW-TM4C 下载 TivaWare 、其中包含文献目录、所有示例、所有文档等

    您不应使用 StellarisWare 中的任何内容、这可能是冲突问题的一部分。

    此外、您可能还需要考虑使用新的 CCS 工作区、以防该 CCS 工作区中的某些内容导致该问题。 我不是 CCS 专家、但我听说过全新的工作区有助于解决奇数链接问题。