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.
工具与软件:
您好!
以下是正在使用的器件:
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 文件中编写我的代码。 为了避免出现错误、我需要对此文件夹进行哪些必要的修改。 包括路径? 链接器? 等等...
最后、这里是当我没有遇到问题时代码开头的样子。 任何时候我都不使用 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 与位字段之间比较的更多信息、请参见下文:
此致、
Ozino