123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #include "Tlt_fdc2214_iic.h"
- #include "stm32l4xx_hal.h"
- #include "main.h"
- extern TIM_HandleTypeDef htim15;
- void TFDC2214_SDA_IN()
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- GPIO_InitStruct.Pin = GPIO_PIN_7;
- // GPIO_InitStruct.Pin = GPIO_PIN_11;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- }
- void TFDC2214_SDA_OUT()
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- GPIO_InitStruct.Pin = GPIO_PIN_7;
- // GPIO_InitStruct.Pin = GPIO_PIN_11;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- }
- void Tdelay_us(uint32_t us)
- {
- uint16_t start = __HAL_TIM_GET_COUNTER(&htim15);
- while((__HAL_TIM_GET_COUNTER(&htim15) - start) < us);
- }
- void TFDC2214_IIC_Start(void)
- {
- TFDC2214_SDA_OUT();
- TSDA_HIGH();
- TSCL_HIGH();
- Tdelay_us(2);
- TSDA_LOW();
- Tdelay_us(2);
- TSCL_LOW();
- Tdelay_us(2);
- }
- void TFDC2214_IIC_Stop(void)
- {
- TFDC2214_SDA_OUT();
- TSCL_LOW();
- Tdelay_us(2);
- TSDA_LOW();
- Tdelay_us(2);
- TSCL_HIGH();
- Tdelay_us(2);
- TSDA_HIGH();
- Tdelay_us(2);
- }
- uint8_t TFDC2214_IIC_Wait_Ack(void)
- {
- uint8_t waitTime=0;
- TFDC2214_SDA_IN();
- TSDA_HIGH();
- Tdelay_us(2);
- TSCL_HIGH();
- Tdelay_us(2);
- while(TFDC2214_IIC_SDA_IN)
- {
- waitTime++;
- if(waitTime>250)
- {
- TFDC2214_IIC_Stop();
- return 1;
- }
- }
- TSCL_LOW();
- return 0;
- }
- void TFDC2214_IIC_Ack(void)
- {
- TSCL_LOW();
- Tdelay_us(2);
- TFDC2214_SDA_OUT();
- TSDA_LOW();//发送0是ACK
- Tdelay_us(2);
- TSCL_HIGH();
- Tdelay_us(2);
- TSCL_LOW();
- Tdelay_us(2);
- }
- void TFDC2214_IIC_NAck(void)
- {
- TSCL_LOW();
- Tdelay_us(2);
- TFDC2214_SDA_OUT();
- TSDA_HIGH();//发送1是nACK
- Tdelay_us(2);
- TSCL_HIGH();
- Tdelay_us(2);
- TSCL_LOW();
- Tdelay_us(2);
- }
- void TFDC2214_IIC_Send_Byte(uint8_t dat)
- {
- uint8_t t;
- TFDC2214_SDA_OUT();
- TSCL_LOW();
- for(t=0; t<8; t++)
- {
- Tdelay_us(2);
- if(dat & 0x80)
- TSDA_HIGH();
- else
- TSDA_LOW();
- dat<<=1;
- TSCL_HIGH();
- Tdelay_us(2);
- TSCL_LOW();
- Tdelay_us(2);
- }
- //SCL_LOW();
- }
- uint8_t TFDC2214_IIC_Read_Byte(uint8_t ack)
- {
- uint8_t i,receive=0;
- TSDA_HIGH();
- TFDC2214_SDA_IN();
- for(i=0; i<8; i++ )
- {
- receive<<=1;
- TSCL_LOW();
- Tdelay_us(2);
- TSCL_HIGH();
- Tdelay_us(2);
- if(TFDC2214_IIC_SDA_IN)receive++;//最低位置1
- }
- TSCL_LOW();
- if (!ack)
- TFDC2214_IIC_NAck();
- else
- TFDC2214_IIC_Ack();
- return receive;
- }
|