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/SW-EK-TM4C123GXL:TM4C123GH6PM USB DFU 引导加载程序

Guru**** 2347060 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/605489/ccs-sw-ek-tm4c123gxl-tm4c123gh6pm-usb-dfu-boot-loader

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

工具/软件:Code Composer Studio

我已经阅读了所有可用材料、尝试将 REV EK-TM4C123GXL 开发板上的 TM4C123GH6PM 处理器置于 USB DFU 模式。 我正在使用下面的代码、并且能够使用 CCS 编译和加载软件。 但是、当我使用器件端口(并将 PWR 选择切换为"器件")插入评估板并启动 LM 闪存编程器(Build1613)时、未识别 USB DFU 器件。 我已经确认可以使用 LM 闪存强制电路板进入 USB DFU 模式来擦除闪存。 我尝试了两种不同的评估板。 我尝试将软件加载为.bin ... 无骰子。

更多信息:

器件不会在器件管理器中显示为"Stellaris 器件固件升级"、除非 LM 闪存编程器擦除闪存。  

我遵循了为 TM4C129x 提供的示例代码、并阅读和尝试了其他论坛中的半打条目中似乎所有可能的解决方案。

我在属性>编译> ARM 编译器>预定义符号下的部分为:target_IS_TM4C123_RA3;在预定义名称字段中。 此外、在该字段中、我还有 PART_TM4C123GH6PM

我正在运行 CCS 版本:7.0.0.00043和 TivaWare_C_Series-2.1.4.178

提前感谢您的任何帮助。

代码:

#include // C99标准的变量定义。
#include // C99标准的布尔定义。

#include "inc/tm4c123ghp6.h"//中断和寄存器分配的定义。
#include "inc/hw_memmap.h"// Tiva C 系列器件的存储器映射定义。
#include "inc/hw_types.h"//常用类型和宏的定义。

#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "inc/hw_NVIC.h"
#include "driverlib/usb.h"
#include "usblib/usblib.h"
#include "usblib/device/usbdevice.h"
#include "usblib/usbrom/usblib/usbrom.trl"

用于控制系统的"usbrom.dlt 定义。
#include "driverlib/interrupt.h"//为 DriverLib 的 NVIC 控制器 API 定义和宏。
#include "driverlib/gpio.h"// DriverLib GPIO API 的定义和宏。
#include "driverlib/timer.h"//为 DriverLib 的计时器 API 定义和宏。
#include "driverlib/pin_map.h"//Mapping of peripherals to pins for all parts。
#include "driverlib/uart.h"// DriverLib UART API 的定义和宏。
#include "driverlib/adc.h"// DriverLib 的 ADC API 定义。

//#define TARGET_IS_TM4C123_RA3

uint32_t sys_clock;

int main (void)
{


//将系统时钟配置为40MHz。
ROM_SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
SYS_CLOCK = ROM_SysCtlClockGet ();



USBDCDTerm (0);

ROM_IntMasterDisable();

ROM_SysTickIntDisable();
ROM_SysTickDisable();

HWREG (NVIC_DIS0)= 0xffffffff;
HWREG (NVIC_DIS1)= 0xffffffff;
HWREG (NVIC_DIS2)= 0xffffffff;
HWREG (NVIC_DIS3)= 0xffffffff;
HWREG (NVIC_DIS4)= 0xffffffff;


ROM_SysCtlPeripheralEnable (GPIO_PORTD_BASE);
ROM_GPIOPinTypeUSBAnalog (GPIO_PORTD_BASE、GPIO_PIN_4);
ROM_GPIOPinTypeUSBAnalog (GPIO_PORTD_BASE、GPIO_PIN_5);


ROM_SysCtlPeripheralEnable (SYSCTL_Periph_USB0);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_USB0);

// ROM_GPIOPinTypeUSBAnalog (GPIO_PORTD_base、GPIO_PIN_4);
// ROM_GPIOPinTypeUSBAnalog (GPIO_PORTD_base、GPIO_PIN_5);


ROM_SysCtlUSBPLLEnable();

ROM_SysCtlDelay (SYS_CLOCK /3);

ROM_IntMasterEnable();

ROM_UpdateUSB (0);


while (1){
}
}






  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我找到了问题的原因。 我对 USBDCDTerm (0)的函数调用;没有返回、因为我没有将函数定义位置(usbdenum.c)链接到我的工作区/工程的 c 文件。 现在、所有器件都适用于 DFU。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您发表您发现的内容、以便他人受益。