一、配置
(1) STM32設置
USART1
1 #define SCL PAout(1) //2-線串行時鍾輸入端口 2 #define SDO PAin(4) //2-線串行通訊方式下為數據輸出端口
(2) TTP229設置
TP0=0,TP2 = 0,TP7 = 0,其余默認為1
2線串行輸入——CMOS低電平有效輸出
有效按鍵最大輸入時間設定為80s
二、程序代碼

1 #include "stm32f4xx.h" 2 #include "usart.h" 3 #include "delay.h" 4 #include "TTP229BFS.h" 5 6 int main(void) 7 { 8 //unsigned char a = 0; 9 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2 10 uart_init(128000); 11 delay_init(168); 12 TTP_GPIOInit(); 13 while(1) 14 { 15 delay_ms(500); 16 printf("輸入的鍵值為:%d\r\n",TTP229_WRITE()); 17 } 18 }

1 #ifndef TTP229BFS_H 2 #define TTP229BFS_H 3 4 #define SCL PAout(1) //2-線串行時鍾輸入端口 5 #define SDO PAin(4) //2-線串行通訊方式下為數據輸出端口 6 7 void TTP_GPIOInit(void); 8 unsigned char TTP229_WRITE(void); 9 10 #endif

1 #include "TTP229BFS.h" 2 #include "stm32f4xx.h" 3 #include "delay.h" 4 /******************************************************************** 5 函數原型:void TTP_GPIOInit(void); 6 功能:TTP IO初始化 7 輸入參數:無 8 返回值:無 9 ********************************************************************/ 10 void TTP_GPIOInit(void) 11 { 12 GPIO_InitTypeDef GPIO_InitStructure; 13 //時鍾使能(A) 14 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 15 //IO口配置PA1輸入 16 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 17 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 18 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 19 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 20 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 21 GPIO_Init(GPIOA, &GPIO_InitStructure); 22 //IO口配置PA4輸出 23 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 24 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 25 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 26 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; 27 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 28 GPIO_Init(GPIOA, &GPIO_InitStructure); 29 } 30 /******************************************************************** 31 函數原型:unsigned char TTP_READ(void); 32 功能:TTP229鍵值獲取 33 輸入參數:無 34 返回值:鍵值 35 ********************************************************************/ 36 unsigned char TTP229_WRITE(void) 37 { 38 unsigned char i; 39 unsigned char key = 0; 40 SDO = 0; 41 delay_us(93);//93us 42 SDO = 1; 43 delay_us(15);//15us 44 for(i = 0;i <= 16;i++) 45 { 46 SCL = 0; 47 if(!SDO) key += i; 48 delay_us(3); 49 SCL = 1; 50 delay_us(3);//150KHz 51 } 52 delay_ms(2); 53 return key; 54 }