STM32 i2c IO代码
- 芯片解密#include "i2c_analog.h"
-     芯片解密#include "stm32f0xx.h"
-     芯片解密#include "delay.h"
-    芯片解密 #define SHT30I2C_SCL GPIO_Pin_0
-     芯片解密#define SHT30I2C_SDA GPIO_Pin_1
-     #define GPIO_I2C GPIOA
-     #define I2C_SCL_H GPIO_SetBits(GPIO_I2C,SHT30I2C_SCL)
-     #define I2C_SCL_L GPIO_ResetBits(GPIO_I2C,SHT30I2C_SCL)
-     #define I2C_SDA_H GPIO_SetBits(GPIO_I2C,SHT30I2C_SDA)
-     #define I2C_SDA_L GPIO_ResetBits(GPIO_I2C,SHT30I2C_SDA)
-     //use analog io
-     /*
-     PA3--------SDA
-     PA4--------SCLK
-     */
-     #define BIT32_SET(reg,pin,value) (reg = ((reg & ~(0x00000003 << (pin * 2))) | (value << (pin * 2))))//reg:寄存器 pin:管教号 value:参考手册上的设定值
-     #define DS18B20_IO_IN()                                 BIT32_SET(GPIOA->MODER,1,0x00)//GPIOA_3模式:输人                                                                                        00: 输入模式( 复位状态)        01: 通用输出模式        10: 复用功能模式        11: 模拟模式
-     #define DS18B20_IO_OUT()                                 BIT32_SET(GPIOA->MODER,1,0x01)//GPIOA_3模式:输出        
-     static void I2C_SDA_OUT(void)
-     {
-     //                GPIO_InitTypeDef GPIO_InitStructure;        
-     //               
-     //                GPIO_InitStructure.GPIO_Pin=SHT30I2C_SDA;
-     // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
-     //                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
-     //                GPIO_Init(GPIOA,&GPIO_InitStructure);        
-     DS18B20_IO_OUT();
-     }
-     static void I2C_SDA_IN(void)
-     {
-     //                GPIO_InitTypeDef GPIO_InitStructure;        
-     //               
-     //                GPIO_InitStructure.GPIO_Pin = SHT30I2C_SDA;
-     // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
-     //                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
-     //                GPIO_Init(GPIOA,&GPIO_InitStructure);
-     DS18B20_IO_IN();
-     }
-     void IIC_GPIOInit(void)
-     {                                       
-     GPIO_InitTypeDef GPIO_InitStructure;
-     /* 使能GPIOA时钟 */
-     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
-     /* 配置LED相应引脚PB1*/
-     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
-     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
-     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
-     GPIO_Init(GPIOA, &GPIO_InitStructure);
-     I2C_SCL_H;
-     I2C_SDA_H;
-     //GPIO_SetBits(GPIOA,GPIO_Pin_3); //输出A3
-     // GPIO_SetBits(GPIOA,GPIO_Pin_4); //输出A3
-     }
-     #define I2C_DELAY_CLK 2 //3
-     //产生IIC起始信号:
-     void IIC_Start(void)
-     {
-     I2C_SDA_OUT();
-             
-             I2C_SDA_H;
-             I2C_SCL_H;
-             //delay_us(I2C_DELAY_CLK);
-             I2C_SDA_L;
-             //delay_us(I2C_DELAY_CLK);
-             I2C_SCL_L;
-             //delay_us(I2C_DELAY_CLK);
-     }        
-     //产生IIC停止信号
-     void IIC_Stop(void)
-     {
-     I2C_SDA_OUT();
-     I2C_SCL_L;
-     I2C_SDA_L;
-     I2C_SCL_H;
-     //delay_us(I2C_DELAY_CLK);
-     I2C_SDA_H;
-     //delay_us(I2C_DELAY_CLK);                                                        
-     }
-     //产生ACK应答
-     void IIC_Ack(void)
-     {
-     I2C_SCL_L;
-     I2C_SDA_OUT();
-     I2C_SDA_L;
-     //delay_us(2);
-     I2C_SCL_H;
-     //delay_us(I2C_DELAY_CLK);
-     I2C_SCL_L;
-     }
-     //不产生ACK应答               
-     void IIC_NAck(void)
-     {
-     I2C_SCL_L;
-     I2C_SDA_OUT();
-     I2C_SDA_H;
-     //delay_us(2);
-     I2C_SCL_H;
-     //delay_us(I2C_DELAY_CLK);
-     I2C_SCL_L;
-     }        
-     void i2c_send_ack()
-     {
-     I2C_SCL_L;        
-             // delay_us(I2C_DELAY_CLK);
-     I2C_SDA_H;
-     I2C_SDA_OUT();
-             // delay_us(I2C_DELAY_CLK);
-     I2C_SCL_H;        
-             // delay_us(I2C_DELAY_CLK);
-     I2C_SCL_L;        
-             // delay_us(I2C_DELAY_CLK);
-     }
-     uint8_t i2c_read_ack(void)
-     {
-     I2C_SCL_L;
-     I2C_SDA_IN(); //SDA设置为输入
-     // delay_us(I2C_DELAY_CLK);
-     I2C_SCL_H;        
-     //delay_us(2);
-     if(GPIO_ReadInputDataBit(GPIO_I2C, SHT30I2C_SDA))
-     {
-     I2C_SCL_L;
-     //delay_us(I2C_DELAY_CLK);
-     return 1;
-     }
-     else
-     {
-     I2C_SCL_L;
-     //delay_us(I2C_DELAY_CLK);
-     return 0;                        
-     }
-     }
-     //IIC发送一个字节
-     //返回从机有无应答
-     //1,有应答
- //0,无应答
上一篇:stm32多路pwm输出控制程序
          
         
  
 
  芯片解密
  芯片解密
