2、开发环境搭建:AURIX Development Studio 安装与配置、iLLD 库结构解析、第一个点亮 LED 的工程
好,咱们正式开始动手了。这一章我带你搭好开发环境,再跑起第一个程序。说白了,就是让板子上的 LED 亮起来。别小看这一步,环境配不好,后面全是坑。我见过太多新手卡在安装和编译上,一卡就是半天。
2.1 AURIX Development Studio 安装与配置
Infineon 官方推荐的 IDE 是 AURIX Development Studio(简称 ADS)。它基于 Eclipse,但人家帮你把编译器、调试器、还有 iLLD 库都打包好了。你想想看,省了多少事?
下载与安装
去 Infineon 官网注册个账号,下载 ADS。目前最新版本是 1.9.x。安装过程很简单,一路 Next 就行。但我建议你注意两点:
- 安装路径不要有中文。我遇到过有人把路径写成「D:\项目\AURIX」,结果编译报错,查了半天才发现是中文空格的问题。
- 安装时勾选所有组件。特别是「AURIX Development Studio Base」和「TriCore GCC Toolchain」。别省那点硬盘空间。
工作空间设置
第一次启动 ADS 会弹窗让你选 Workspace。我个人习惯把工作空间放在项目根目录下,比如 D:\AURIX_Projects。这样方便管理。别用默认的 C 盘路径,万一重装系统,项目文件全没了。
导入示例工程
ADS 自带了很多示例工程。怎么导入?
- 点击菜单栏
File → Import - 选择
General → Existing Projects into Workspace - 在
Select root directory里浏览到 ADS 安装目录下的examples文件夹 - 勾选你想要的工程,比如
GPIO_Toggle_LED
嗯,这里要注意:导入后先别急着编译。先检查一下工程属性里的编译器版本是否匹配。右键工程 → Properties → C/C++ Build → Settings → Toolchain,确认选的是「TriCore GCC」。我刚开始用的时候没注意这个,编译报了一堆莫名其妙的错。
2.2 iLLD 库结构解析
iLLD 全称是 Infineon Low Level Driver。说白了就是英飞凌帮你写好的底层驱动库。你不需要直接操作寄存器,调用函数就行。但如果你不懂它的结构,出了问题你都不知道去哪找。
iLLD 的目录结构
打开一个示例工程,你会看到这样的目录:
├── 0_Src
│ ├── AppSw
│ │ └── Tricore
│ │ ├── Main.c // 主函数入口
│ │ └── Cpu0_Main.c // CPU0 初始化
│ ├── Config
│ │ └── Ifx_Cfg.h // 全局配置头文件
│ └── iLLD
│ ├── IfxScu_cfg.h // SCU 模块配置
│ ├── IfxPort_cfg.h // Port 模块配置
│ └── ...
├── 1_Config
│ └── ...
└── 2_Out
└── ... // 编译输出文件
我重点说一下 iLLD 文件夹。它里面按模块分了很多子文件夹:
- IfxPort:GPIO 控制,比如设置引脚方向、输出高低电平
- IfxScu:系统控制单元,包括时钟、复位、看门狗
- IfxGpt12:通用定时器
- IfxAsclin:异步串口通信
每个模块下都有 .c 和 .h 文件。你写代码时只需要包含对应的头文件就行。比如你想操作 GPIO,就加一句 #include "IfxPort.h"。
1. 寄存器层:直接操作硬件寄存器(不推荐)
2. 驱动层:iLLD 提供的函数接口(推荐)
3. 应用层:你写的业务逻辑
平时开发只用驱动层和应用层就够了。寄存器层除非你调试底层问题,否则别碰。
iLLD 的命名规则
这个我特别想强调一下。iLLD 的函数命名很有规律,看名字就知道它干嘛的:
| 前缀 | 含义 | 示例 |
|---|---|---|
IfxPort_ |
GPIO 模块 | IfxPort_setPinMode() |
IfxScu_ |
系统控制 | IfxScuWdt_clearCpuEndinit() |
IfxGpt12_ |
定时器 | IfxGpt12_Timer_run() |
你只要记住这个规律,查手册时就能快速定位。我曾经带过一个新人,他写代码时不知道用哪个函数,我说「你看前缀,Port 相关的就找 IfxPort_ 开头的」,他一下子就明白了。
2.3 第一个点亮 LED 的工程
好,理论说完了,咱们直接上手。目标是让开发板上的 LED 以 1 秒为周期闪烁。
硬件准备
- 一块 AURIX 开发板(我用的是 TC275 Lite Kit)
- 一根 USB 线(用于供电和调试)
- ADS 开发环境已安装
TC275 Lite Kit 上有一个板载 LED,连接在 P13.3 引脚。嗯,不同板子引脚可能不一样,你查一下原理图确认。
创建工程
- 在 ADS 中点击
File → New → AURIX Project - 输入工程名,比如
MyFirstLED - 选择芯片型号,比如
TC275TP - 点击 Finish
ADS 会自动生成一个空工程,包含 Cpu0_Main.c 和 Main.c。
编写代码
打开 Cpu0_Main.c,在 core0_main() 函数里添加以下代码:
#include "IfxPort.h"
#include "IfxScuWdt.h"
// LED 引脚定义
#define LED_PIN IfxPort_P13_3
#define LED_MODULE &MODULE_P13
#define LED_ON IfxPort_State_low // 低电平点亮
#define LED_OFF IfxPort_State_high
void core0_main(void)
{
// 第一步:关闭看门狗(否则系统会不断复位)
IfxScuWdt_clearCpuEndinit(IfxScuWdt_getCpuWatchdogPassword());
IfxScuWdt_clearSafetyEndinit(IfxScuWdt_getSafetyWatchdogPassword());
// 第二步:配置 LED 引脚为推挽输出
IfxPort_setPinMode(LED_MODULE, LED_PIN, IfxPort_Mode_outputPushPullGeneral);
// 第三步:主循环,让 LED 闪烁
while(1)
{
IfxPort_setPinState(LED_MODULE, LED_PIN, LED_ON);
waitTime(1000000); // 延时约 1 秒
IfxPort_setPinState(LED_MODULE, LED_PIN, LED_OFF);
waitTime(1000000);
}
}
// 简单的延时函数(不精确,但够用)
void waitTime(unsigned long ticks)
{
while(ticks--)
{
__asm__ volatile("nop");
}
}
IfxScuWdt_clearCpuEndinit() 来关看门狗。这是 AURIX 的一个安全机制——很多关键寄存器在写之前必须先关看门狗。我刚开始做项目时忘了这步,结果程序跑几秒就复位,查了整整一天才发现是看门狗在捣乱。
编译与下载
- 点击工具栏的锤子图标(Build)编译工程
- 用 USB 线连接开发板到电脑
- 点击绿色虫子图标(Debug)启动调试
- 在弹出的对话框中选择调试器(一般是 MiniWiggler 或 DAS)
- 点击 Resume(F8)运行程序
如果一切顺利,你会看到板子上的 LED 开始以 1 秒为周期闪烁。嗯,那一刻还是挺有成就感的。
- 编译报错「undefined reference to `IfxPort_setPinMode'」:说明你没包含对应的 iLLD 源文件。右键工程 → Properties → C/C++ Build → Settings → TriCore Linker → Libraries,添加
IfxPort 库。- 下载失败「Cannot connect to target」:检查 USB 驱动是否安装,或者换一根 USB 线。我遇到过劣质线导致通信不稳定的情况。
好了,第一个工程跑起来了。这一章我们完成了环境搭建、理解了 iLLD 库的结构,还亲手点亮了 LED。下一章我会带你深入 GPIO 的配置细节,包括上下拉、驱动能力、中断触发等。这些东西在实际项目中特别容易踩坑,到时候我把我踩过的坑都告诉你。