前面几个评测中,在开发板上连接了OLED显示屏、nRF24L01无线通讯模块。这次加入电容键盘。考虑到系统主要使用3.3V电源,所以准备使用以TTP229为控制核心的电容键盘模块,它的使用电压范围为2.4V~5.5V,电压适用范围宽。 它可以使用2-线串行模式通讯,占用口线少,通讯协议也不复杂,只需要简单获取模块的数据即可。有数据,表示按键被触摸。模块外形图: 使用这个模块,需要提前做些准备工作,很简单,把红圈标记的地方短接起来。 短接 黄色标记内的排针是准备接入开发板用到的接口,分别是VCC、GND、SCL时钟、SDA数据。 我把PB10作为SCL时钟,PB11作为SDA数据。 系统连接好的状态: 键盘 测试时,在OLED屏幕的右上角显示按键的键值。对应16个触摸按键的键值为1-16。可以按照自己的需求,给按键设置为功能键。我准备按照如下配置处理键盘的输入。 13-------向上选择菜单条目、调整数据减1 14-------向下选择菜单条目、调整数据加1 15-------取消 16-------确认 其他按键根据需要,比如为了简化某些操作时,再做调整。根据TPP229的资料: 时序1 所以我之前提到过短接的那两个跳线孔,就是为了设置为上面的这种通讯方式(TP1=0,TP2=0),简单有效,不用考虑太多的通讯协议之类的东西,不使用从机地址数据,直接访问。 按照这个模式,要想获得键盘按键情况,先发一个SDA脉冲,由“1”到“0”,作为启动信号。之后,正常发出SCL脉冲,在SCL=1的时候,取得SDA线上的数据。按照D0 - D5的顺序,取得16位数据后,计算其中为0的数据位数,就得到按键的键值。这里不考虑几个按键同时按下的处理。有兴趣的同学可以自行花时间做实验。 开发板的主频很高,为了适应TTP229的读取时序,需要加一些必要的延时。 时序2 下面是读取键值的代码:
因为涉及SDA的输出以及输入读取,所以要及时调整它所在GPIO的输入输出设置。 组装好系统后,为了能及时观察按键的响应,在OLED的右上角位置,即时显示键值。 在此附上TTP229处理用的代码。 |
NUCLEO-H723ZG开发板试用 ——串口点灯测试
兔哥的杂谈【002】——如何性价比更高地去编译STM32
【Wio Lite AI视觉开发套件】+简单刷个屏
工程师笔记 | STM32H7 RAMECC功能及应用
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【Wio Lite AI视觉开发套件】+cube.ai与食物识别
【STM32H7S78-DK】汽车仪表系统
【STM32H7S78-DK】基于 rtthread 适配 lcd 驱动移植 lvgl
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
【STM32H7S78-DK】rtthread 增加 psram 内存管理
网上包括这篇文章,关于SDO信号的理解大部分是错误的,仔细看手册,SDO信号是输出信号,不可以往输出信号管脚置高或低,波形图上起始的SDO信号,那是芯片本身有了触摸按键触摸后,输出的一个表示有键按下的信号,可以接到单片机的中断信号输入,是按键中断信号。MCU接到这个信号后,在SCL上输出时钟,在SDO上读取键值。
[md]谢谢指正,我抽时间测试下