一、引言
在嵌入式系统开发中,PWM(脉宽调制) 与 触控屏(Touch Screen) 是非常核心的硬件外设。PWM 常用于电机调速、蜂鸣器控制以及屏幕背光亮度调节;而电容触控屏则是现代嵌入式人机交互(HMI)的标准配置。
本文将结合嵌入式 ARM 架构,详细讲解 PWM 的硬件工作原理以及电容触控屏(以正点原子 GT9147 芯片为例)的全套驱动开发流程。
二、PWM 脉宽调制原理
1. 基本概念
●PWM 频率 :控制信号周期的倒数。例如,周期 T = 1\\text{ms},则 PWM 频率为 1\\text{kHz}。
●计数器时钟 (Counter Clock) :决定计数器的递增速度。例如:计数器频率为 1\\text{MHz},即每步计数耗时 1\\mu\\text{s}。
●占空比 (Duty Cycle) :在一个周期内,高电平持续时间占总周期的百分比。
2. PWM 硬件工作流程与寄存器关系
PWM 信号的生成依赖于计数器(Counter) 、周期寄存器(Period Register)和采样/比较寄存器(FIFO/Sample Register) 。

●周期寄存器(Period Register) :决定 PWM 的周期/频率 。当计数器达到周期设定值(如 1000)时,计数器复位回滚,完成一个周期。
●采样寄存器(Sample Register / FIFO) :决定 PWM 的占空比 。硬件将计数器的值与比较点(采样值,如 100、200、300)进行对比,触发引脚电平翻转。
3. 引脚极性(Polarity)对占空比的影响
PWM 输出引脚的逻辑电平取决于配置的极性:
- 引脚默认高电平 :采样寄存器中的设定值越大,高电平保持时间越长,占空比越大 。
- 引脚默认低电平 :采样寄存器中的设定值越大,高电平保持时间越短,占空比越小 。
三、电容触控屏驱动开发 (GT9147)
1. 触控屏分类与原理
●电阻屏 :基于物理压感发生形变导致电阻改变,需要进行软件校准 。
●电容屏 :基于人体感应电压/电荷微变,支持多点触控(Multi-touch) ,响应快且无需手动校准。
2. GT9147 芯片简介
GT9147 是一款常用的电容触控芯片,支持最多 5 个触控点 同时检测。常见的 LCD 模块及其芯片 ID 示例:
●ALIENTEK 4.3寸屏幕:芯片 ID 0x14 (GT1158) 或 0x5D (GT9147)。
●芯片可通过 I2C 读取内部寄存器获取设备 ID(如 "9147")、坐标数据(X, Y)以及当前按下的触控点个数。
3. GT9147 驱动初始化完整流程
编写驱动时,需要遵循严格的初始化逻辑。流程图如下所示:

4. 驱动开发步骤解析
(1) GPIO 与复位配置
●配置 RST(复位引脚) 和 INT(中断引脚) 的 Multiplexing(复用功能)及 Pad 特性(如上下拉、驱动能力等)。
●通过控制 RST 引脚产生低电平脉冲,完成触控 IC 的硬件复位 。
(2) I2C 总线初始化与读写接口
●初始化 ARM 芯片的 I2C2 控制器。
●封装底层的 I2C 读写函数 gt9147_read() 与 gt9147_write()。
(3) 读取芯片 ID 验证通信
●读取寄存器 0x8140 开始的 4 个字节,校验返回值是否为 ASCII 字符字符串 "9147"。若读取正确,说明 I2C 通信正常。
(4) 中断触发方式配置与 GIC 注册
●校验/配置中断触发模式(读取 0x804D / 0x8056 寄存器),通常设置为下降沿触发(0x01) 。
●配置 GPIO 引脚为中断输入模式。
●在 GIC(通用中断控制器) 中配置中断优先级、注册 gt9147 的中断服务函数(ISR),并使能该中断。
(5) 中断服务程序(ISR)坐标读取
当用户触摸屏幕时,INT 引脚产生下降沿中断。在中断处理函数中:
1.读取状态寄存器,判断当前按下的触控点个数 。
2.依次读取触摸点的坐标数据(首点坐标起始地址为 0x8158 - 0x815B)。
3.换算得到真实的屏幕物理坐标 (X, Y),并清除中断标志位。
四、总结
本文介绍了嵌入式 ARM 开发中 PWM 占空比控制的底层逻辑,以及 GT9147 电容屏的中断+I2C 驱动设计思路。通过合理的极性配置及中断响应机制,不仅能精准控制外设,还能实现高效无阻塞的人机交互触控体验。