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.

[参考译文] TMS320F280049C:包含标题|#Include "F28x_Project.h"

Guru**** 2041660 points
Other Parts Discussed in Thread: LAUNCHXL-F280049C, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1468890/tms320f280049c-include-headers-include-f28x_project-h

器件型号:TMS320F280049C
主题中讨论的其他器件:LAUNCHXL-F280049CC2000WARE

工具与软件:

您好!

以下是正在使用的器件:

MCU: F280049CPZS/Launchpad:LaunchXL-F280049C  

在上下文中、我将在 CCS 上编写软件、并 使用 LaunchXL-F280049C 上的 TMS、TDI、TDO、TCK 跳线连接到我的 PCB、以便在我自己的 PCB 上刷写 MCU。

我想获得帮助、以解决我遇到的 include 标头问题。 我有两个不同的 CCS 工作区、一个工作区仅包含示例 led_ex1_blinky、另一个工作区包括 c2000 Ware 示例中的 led_ex1_blinky 和 empty_driverlib_project。

在第一个工作区中、我能够在 led_ex1_blinky 文件中构建并运行代码、该文件通过 GPIO 引脚开关3个 LED。 问题发生在我的第二个工作区、我在 led_ex1_blinky 文件中有完全相同的代码、但我得到该错误:"c:/ti/c2000/C2000Ware_5_03_00_00/device_support/f28004x/common/include/F28x_Project.h、第47行:致命错误#1965:无法打开源文件"f28004x_device.h"。 我已经在两个工作区中的两个文件之间匹配了 include 选项路径、但仍然出现这个错误。 此外、如果我将此代码粘贴到 empty_driverlib_project 文件中、所得到的错误与此代码无法打开源文件 f28004x_device.h 相同

包含工作工作区选项(led_ex1_blinky)

我正好将这个复制到了我的另一个工作区、但仍然收到错误。 这是我收到的错误。

此外、空示例文件中具有相同的代码。

如果我能在如何使用 F28x_Project.h 标头方面获得一些帮助、我将不胜感激。 此外、使用此标头是否是最佳实践、或者是否不应使用标头、而应仅包含 我单独需要的内容、如 #include "driverlib.h"和#include "device.h"。 我发现 F28标头给了我很多麻烦。


作为参考、这里是我在不同文件中的所有试验中运行的代码。

#include "F28x_Project.h"

// LED 的 GPIO 定义
#define DEVICE_GPIO_PIN_LED1 0 // GPIO0 (D1)
#define DEVICE_GPIO_PIN_LED2 2 // GPIO2 (D2)
#define DEVICE_GPIO_PIN_LED3 4 // GPIO4 (D3)

//函数原型
void delay_ms (unsigned int ms);
void 初始化 GPIO (void);
void 初始化时钟(void);

void main (void){
//步骤1:初始化时钟和 GPIO
initializeClock ();//使用内部振荡器(INTOSC2)
initializeGPIO ();//为 LED 设置 GPIO

//步骤2:使 LED 闪烁的主循环
while (1){
//打开 LED (高电平有效逻辑、1 = ON)
GPIO_WritePin (DEVICE_GPIO_PIN_LED1、1);
GPIO_WritePin (DEVICE_GPIO_PIN_LED2、1);
GPIO_WritePin (DEVICE_GPIO_PIN_LED3、1);
delay_ms (100);//根据您的时钟系数进行调整(每个 delay_US (100)为100ms)

//关闭 LED (高电平有效逻辑、0 =关闭)
GPIO_WritePin (DEVICE_GPIO_PIN_LED1、0);
GPIO_WritePin (DEVICE_GPIO_PIN_LED2、0);
GPIO_WritePin (DEVICE_GPIO_PIN_LED3、0);
delay_ms (100);//根据您的时钟系数进行调整(每个 delay_US (100)为100ms)
}
}

//初始化时钟的函数(使用内部振荡器)
void 初始化时钟(void){
EALLOW;

//步骤1:选择内部振荡器(INTOSC2、10 MHz 默认设置)
ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL = 0;// Use INTOSC2 (使用 INTOSC2)

//第2步:启用 PLL 并针对100 MHz 系统时钟进行配置
ClkCfgRegs.SYSPLLCTL1.bit.PLLEN = 1;// Enable PLL
ClkCfgRegs.SYSPLLMULT.bit.IMULT = 10;//将10 MHz 乘以10 -> 100 MHz
while (ClkCfgRegs.SYSPLLSTS.bit.locks!= 1);//等待 PLL 锁定

//步骤3:设置系统时钟分频器
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 0;//无时钟分频器(100 MHz)

EDIS;
}

//用于初始化 GPIO 的函数
void 初始化 GPIO (void){
InitGpio();

EALLOW;

//配置 LED (GPIO0、GPIO2、GPIO4)
GPIO_SetupPinMux (DEVICE_GPIO_PIN_LED1、GPIO_MUX_CPU1、0);// gpio0
GPIO_SetupPinMux (DEVICE_GPIO_PIN_LED2、GPIO_MUX_CPU1、0);// GPIO2
GPIO_SetupPinMux (DEVICE_GPIO_PIN_LED3、GPIO_MUX_CPU1、0);// GPIO4

GPIO_SetupPinOptions (DEVICE_GPIO_PIN_LED1、GPIO_OUTPUT、GPIO_PushPull);
GPIO_SetupPinOptions (DEVICE_GPIO_PIN_LED2、GPIO_OUTPUT、GPIO_PushPull);
GPIO_SetupPinOptions (DEVICE_GPIO_PIN_LED3、GPIO_OUTPUT、GPIO_PushPull);

//确保所有 LED 在初始时都是熄灭的
GPIO_WritePin (DEVICE_GPIO_PIN_LED1、0);
GPIO_WritePin (DEVICE_GPIO_PIN_LED2、0);
GPIO_WritePin (DEVICE_GPIO_PIN_LED3、0);

EDIS;
}

//毫秒延迟函数(针对时钟缩放进行调整)
void delay_ms (unsigned int ms){
unsigned int j;
对于(j = 0;j < ms;j++){
DELAY_US (100);// 100微秒延迟(针对时钟因子进行了调整)
}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

最后、这里是当我没有遇到问题时代码开头的样子。 任何时候我都不使用 F28标头。

#include "driverlib.h"
#include "device.h"

//
//定义
//
#define SYSCLK 100000000UL // 100 MHz 系统时钟
#define PWM_FREQ 20000UL // 20kHz
//对于20kHz 的向上计数、不要除以2:
#define EPWM1_TIMER_TBPRD ((SYSCLK / PWM_FREQ)- 1UL)//= 4999 (20kHz)
// 50%占空比
#define EPWM1_DUTY_50 (EPWM1_TIMER_TBPRD/2UL)
// 80%占空比
#define EPWM1_DUTY_80 ((EPWM1_TIMER_TBPRD * 80UL)/100UL)

//
//引脚分配
//
#define GPIO0_EPWM1A_PIN 0
#define GPIO1_EPWM1B_PIN 1
#define GPIO6_INPUT_PIN 6.

//
//函数原型
//
void initGPIO0 (void);// ePWM1A
void initGPIO1 (void);// ePWM1B
void initGPIO6 (void);//从 ESP32输入
void initEPWM1 (void);//为互补输出设置 ePWM1
void setEPWM1DutyCycle (uint16_t dutyValue);

接下来、我要在通过 C2000Ware 提供的 empty_driverlib_project 文件中编写我的代码。 为了避免出现错误、我需要对此文件夹进行哪些必要的修改。 包括路径? 链接器? 等等...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价用户 id="630831" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1468890/tms320f280049c-include-headers-include-f28x_project-h "]

    最后、这里是当我没有遇到问题时代码开头的样子。 任何时候我都不使用 F28标头。

    #include "driverlib.h"
    #include "device.h"

    //
    //定义
    //
    #define SYSCLK 100000000UL // 100 MHz 系统时钟
    #define PWM_FREQ 20000UL // 20kHz
    //对于20kHz 的向上计数、不要除以2:
    #define EPWM1_TIMER_TBPRD ((SYSCLK / PWM_FREQ)- 1UL)//= 4999 (20kHz)
    // 50%占空比
    #define EPWM1_DUTY_50 (EPWM1_TIMER_TBPRD/2UL)
    // 80%占空比
    #define EPWM1_DUTY_80 ((EPWM1_TIMER_TBPRD * 80UL)/100UL)

    //
    //引脚分配
    //
    #define GPIO0_EPWM1A_PIN 0
    #define GPIO1_EPWM1B_PIN 1
    #define GPIO6_INPUT_PIN 6.

    //
    //函数原型
    //
    void initGPIO0 (void);// ePWM1A
    void initGPIO1 (void);// ePWM1B
    void initGPIO6 (void);//从 ESP32输入
    void initEPWM1 (void);//为互补输出设置 ePWM1
    void setEPWM1DutyCycle (uint16_t dutyValue);

    [报价]

    我想澄清的是、这是与上面第一个示例不同的脚本、我只想用#include 突出显示前两行

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

    尊敬的 Adrian:

    因此、您似乎正在尝试尝试位字段和 driverlib 示例。 是这样吗?

    请注意、DriverLib 是新一代 MCU 访问外设的优选模式。 那么、让我们继续关注这些示例。

    这样就无需在 driverlib 项目中使用#include "F28x_Project.h"。 仅当使用位字段时才需要此文件。

    driverlib blinky 示例应该是开始开发自定义代码的良好起点。 C2000Ware 中提供的示例应该不会有任何问题。 只需复制这些代码函数、并且#include 与位字段无关。  

    #include "driverlib.h"
    #include "device.h"  

    是开始之前需要包括的主要文件。

    有关 driverlib 与位字段之间比较的更多信息、请参见下文:

    https://software-dl.ti.com/C2000/docs/software_guide/c2000ware/drivers.html#:~:text=DriverLib%20is%20the%20preferred%20model,for%20compatibility%20and%20easy%20migration。 

    此致、

    Ozino