找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12|回复: 0
打印 上一主题 下一主题
收起左侧

STM32+FDC1004程序分享

[复制链接]
跳转到指定楼层
楼主
ID:1169100 发表于 2026-4-1 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F407驱动FDC1004的程序分享出来:
四通道
Touch.h头文件
#ifndef __Touch_I2C_H
#define __Touch_I2C_H


#include "stm32f4xx.h"
#define I2CT_FLAG_TIMEOUT         ((uint32_t)0x1000)
#define I2CT_LONG_TIMEOUT         ((uint32_t)(10 * I2CT_FLAG_TIMEOUT))

/*I2C引脚*/
#define GTP_I2C1_SCL_PIN                  GPIO_Pin_6
#define GTP_I2C1_SCL_GPIO_PORT            GPIOB
#define GTP_I2C1_SCL_GPIO_CLK             RCC_AHB1Periph_GPIOB
#define GTP_I2C1_SCL_SOURCE               GPIO_PinSource6

#define GTP_I2C1_SDA_PIN                  GPIO_Pin_7
#define GTP_I2C1_SDA_GPIO_PORT            GPIOB
#define GTP_I2C1_SDA_GPIO_CLK             RCC_AHB1Periph_GPIOB
#define GTP_I2C1_SDA_SOURCE               GPIO_PinSource7


#define GTP_I2C2_SCL_PIN                  GPIO_Pin_1
#define GTP_I2C2_SCL_GPIO_PORT            GPIOF
#define GTP_I2C2_SCL_GPIO_CLK             RCC_AHB1Periph_GPIOF
#define GTP_I2C2_SCL_SOURCE               GPIO_PinSource1

#define GTP_I2C2_SDA_PIN                  GPIO_Pin_0
#define GTP_I2C2_SDA_GPIO_PORT            GPIOF
#define GTP_I2C2_SDA_GPIO_CLK             RCC_AHB1Periph_GPIOF
#define GTP_I2C2_SDA_SOURCE               GPIO_PinSource0


#define GTP_I2C3_SCL_PIN                  GPIO_Pin_8
#define GTP_I2C3_SCL_GPIO_PORT            GPIOA
#define GTP_I2C3_SCL_GPIO_CLK             RCC_AHB1Periph_GPIOA
#define GTP_I2C3_SCL_SOURCE               GPIO_PinSource8

#define GTP_I2C3_SDA_PIN                  GPIO_Pin_9
#define GTP_I2C3_SDA_GPIO_PORT            GPIOC
#define GTP_I2C3_SDA_GPIO_CLK             RCC_AHB1Periph_GPIOC
#define GTP_I2C3_SDA_SOURCE               GPIO_PinSource9

#define GTP_I2C4_SCL_PIN                  GPIO_Pin_12
#define GTP_I2C4_SCL_GPIO_PORT            GPIOA
#define GTP_I2C4_SCL_GPIO_CLK             RCC_AHB1Periph_GPIOA
#define GTP_I2C4_SCL_SOURCE               GPIO_PinSource12

#define GTP_I2C4_SDA_PIN                  GPIO_Pin_11
#define GTP_I2C4_SDA_GPIO_PORT            GPIOA
#define GTP_I2C4_SDA_GPIO_CLK             RCC_AHB1Periph_GPIOA
#define GTP_I2C4_SDA_SOURCE               GPIO_PinSource11


//#define GTP_I2C4_SCL_PIN                  GPIO_Pin_8
//#define GTP_I2C4_SCL_GPIO_PORT            GPIOB
//#define GTP_I2C4_SCL_GPIO_CLK             RCC_AHB1Periph_GPIOB
//#define GTP_I2C4_SCL_SOURCE               GPIO_PinSource8


//#define GTP_I2C4_SDA_PIN                  GPIO_Pin_9
//#define GTP_I2C4_SDA_GPIO_PORT            GPIOB
//#define GTP_I2C4_SDA_GPIO_CLK             RCC_AHB1Periph_GPIOB
//#define GTP_I2C4_SDA_SOURCE               GPIO_PinSource9

#define I2C1_SCL_1()  GPIO_SetBits(GTP_I2C1_SCL_GPIO_PORT, GTP_I2C1_SCL_PIN) /* SCL = 1 */
#define I2C1_SCL_0()  GPIO_ResetBits(GTP_I2C1_SCL_GPIO_PORT, GTP_I2C1_SCL_PIN)/* SCL = 0 */

#define I2C1_SDA_1()  GPIO_SetBits(GTP_I2C1_SDA_GPIO_PORT, GTP_I2C1_SDA_PIN) /* SDA = 1 */
#define I2C1_SDA_0()  GPIO_ResetBits(GTP_I2C1_SDA_GPIO_PORT, GTP_I2C1_SDA_PIN)/* SDA = 0 */

#define I2C1_SDA_READ()  GPIO_ReadInputDataBit(GTP_I2C1_SDA_GPIO_PORT, GTP_I2C1_SDA_PIN)


#define I2C2_SCL_1()  GPIO_SetBits(GTP_I2C2_SCL_GPIO_PORT, GTP_I2C2_SCL_PIN) /* SCL = 1 */
#define I2C2_SCL_0()  GPIO_ResetBits(GTP_I2C2_SCL_GPIO_PORT, GTP_I2C2_SCL_PIN)/* SCL = 0 */

#define I2C2_SDA_1()  GPIO_SetBits(GTP_I2C2_SDA_GPIO_PORT, GTP_I2C2_SDA_PIN) /* SDA = 1 */
#define I2C2_SDA_0()  GPIO_ResetBits(GTP_I2C2_SDA_GPIO_PORT, GTP_I2C2_SDA_PIN)/* SDA = 0 */

#define I2C2_SDA_READ()  GPIO_ReadInputDataBit(GTP_I2C2_SDA_GPIO_PORT, GTP_I2C2_SDA_PIN)


#define I2C3_SCL_1()  GPIO_SetBits(GTP_I2C3_SCL_GPIO_PORT, GTP_I2C3_SCL_PIN) /* SCL = 1 */
#define I2C3_SCL_0()  GPIO_ResetBits(GTP_I2C3_SCL_GPIO_PORT, GTP_I2C3_SCL_PIN)/* SCL = 0 */

#define I2C3_SDA_1()  GPIO_SetBits(GTP_I2C3_SDA_GPIO_PORT, GTP_I2C3_SDA_PIN) /* SDA = 1 */
#define I2C3_SDA_0()  GPIO_ResetBits(GTP_I2C3_SDA_GPIO_PORT, GTP_I2C3_SDA_PIN)/* SDA = 0 */

#define I2C3_SDA_READ()  GPIO_ReadInputDataBit(GTP_I2C3_SDA_GPIO_PORT, GTP_I2C3_SDA_PIN)



#define I2C4_SCL_1()  GPIO_SetBits(GTP_I2C4_SCL_GPIO_PORT, GTP_I2C4_SCL_PIN) /* SCL = 1 */
#define I2C4_SCL_0()  GPIO_ResetBits(GTP_I2C4_SCL_GPIO_PORT, GTP_I2C4_SCL_PIN)/* SCL = 0 */

#define I2C4_SDA_1()  GPIO_SetBits(GTP_I2C4_SDA_GPIO_PORT, GTP_I2C4_SDA_PIN) /* SDA = 1 */
#define I2C4_SDA_0()  GPIO_ResetBits(GTP_I2C4_SDA_GPIO_PORT, GTP_I2C4_SDA_PIN)/* SDA = 0 */

#define I2C4_SDA_READ()  GPIO_ReadInputDataBit(GTP_I2C4_SDA_GPIO_PORT, GTP_I2C4_SDA_PIN)

//#define SDA_IN()   { GPIOA->CRH &= 0xFFFFOFFF; GPIOA->CRH= 4<<12;}  
//#define SDA_OUT()  { GPIOA->CRH &= 0xFFFFOFFF; GPIOA->CRH= 7<<12;}
#define SDA_IN()   { GPIOA->MODER &= 0xFF3FFFFF;  }  
#define SDA_OUT()  { GPIOA->MODER &= 0xFF3FFFFF; GPIOA->MODER |= 1<<22; GPIOA-> OTYPER &= 0xFFFFF7FF; GPIOA-> OTYPER |= 1<<11;}



#define I2C_DIR_WR  0
#define I2C_DIR_RD  1

#define I2C_M_RD        0x0001
#define GTP_ADDR_LENGTH      1

struct i2c_msg
{
    uint8_t addr;       /*从设备的I2C设备地址 */
    uint16_t flags;     /*控制标志*/
    uint16_t len;       /*读写数据的长度     */
    uint8_t *buf;       /*存储读写数据的指针   */
};


#define FDC1004_COMM_ID1         0xA0
#define FDC1004_COMM_ID2         0xA0
#define FDC1004_COMM_ID3         0xA0
#define FDC1004_COMM_ID4         0xA0

#define FDC1004_DEVICE_ID       0x1004
#define FDC1004_TI_ID           0x5449

//FDC1004寄存器地址
#define MEAS1_MSB_ADDR           0x00
#define MEAS1_LSB_ADDR           0x01
#define MEAS2_MSB_ADDR           0x02
#define MEAS2_LSB_ADDR           0x03
#define MEAS3_MSB_ADDR           0x04
#define MEAS3_LSB_ADDR           0x05
#define MEAS4_MSB_ADDR           0x06
#define MEAS4_LSB_ADDR           0x07
#define CONF_MEAS1_ADDR          0x08
#define CONF_MEAS2_ADDR          0x09
#define CONF_MEAS3_ADDR          0x0A
#define CONF_MEAS4_ADDR          0x0B
#define FDC_CONF_ADDR            0x0C
#define OFFSET_CAL_CIN1_ADDR     0x0D
#define OFFSET_CAL_CIN2_ADDR     0x0E
#define OFFSET_CAL_CIN3_ADDR     0x0F
#define OFFSET_CAL_CIN4_ADDR     0x10
#define GAIN_CAL_CIN1_ADDR       0x11
#define GAIN_CAL_CIN2_ADDR       0x12
#define GAIN_CAL_CIN3_ADDR       0x13
#define GAIN_CAL_CIN4_ADDR       0x14
#define TI_ID_ADDR               0xFE
#define DEVICE_ID_ADDR           0xFF


void i2c_Delay(uint16_t time);
void I2C_GPIO_Config(void);
void I2C_Touch_Init(void);

int32_t TP1_FDC1004_init(uint8_t client_addr,uint8_t *buf,int32_t len);
int32_t TP2_FDC1004_init(uint8_t client_addr,uint8_t *buf,int32_t len);
int32_t TP3_FDC1004_init(uint8_t client_addr,uint8_t *buf,int32_t len);
int32_t TP4_FDC1004_init(uint8_t client_addr,uint8_t *buf,int32_t len);
float Touch4_Cap_Read(uint8_t client_addr,uint8_t *buf1,uint8_t *buf2,int32_t len);
float Touch3_Cap_Read(uint8_t client_addr,uint8_t *buf1,uint8_t *buf2,int32_t len);
float Touch2_Cap_Read(uint8_t client_addr,uint8_t *buf1,uint8_t *buf2,int32_t len);
float Touch1_Cap_Read(uint8_t client_addr,uint8_t *buf1,uint8_t *buf2,int32_t len);


void i2c4_Ack(void);
void i2c4_NAck(void);
uint8_t i2c4_WaitAck(void);
void i2c4_SendByte(uint8_t _ucByte);
uint8_t i2c4_ReadByte(void);
uint8_t i2c4_Start(void);
void i2c4_Stop(void);
#endif
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表