芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

STM32 i2c IO代码

  1. 芯片解密#include "i2c_analog.h"
  2.     芯片解密#include "stm32f0xx.h"
  3.     芯片解密#include "delay.h"
  4.    芯片解密 #define SHT30I2C_SCL GPIO_Pin_0
  5.     芯片解密#define SHT30I2C_SDA GPIO_Pin_1
  6.     #define GPIO_I2C GPIOA
  7.     #define I2C_SCL_H GPIO_SetBits(GPIO_I2C,SHT30I2C_SCL)
  8.     #define I2C_SCL_L GPIO_ResetBits(GPIO_I2C,SHT30I2C_SCL)
  9.     #define I2C_SDA_H GPIO_SetBits(GPIO_I2C,SHT30I2C_SDA)
  10.     #define I2C_SDA_L GPIO_ResetBits(GPIO_I2C,SHT30I2C_SDA)
  11.     //use analog io
  12.     /*
  13.     PA3--------SDA
  14.     PA4--------SCLK
  15.     */
  16.     #define BIT32_SET(reg,pin,value) (reg = ((reg & ~(0x00000003 << (pin * 2))) | (value << (pin * 2))))//reg:寄存器 pin:管教号 value:参考手册上的设定值
  17.     #define DS18B20_IO_IN()                                 BIT32_SET(GPIOA->MODER,1,0x00)//GPIOA_3模式:输人                                                                                        00: 输入模式( 复位状态)        01: 通用输出模式        10: 复用功能模式        11: 模拟模式
  18.     #define DS18B20_IO_OUT()                                 BIT32_SET(GPIOA->MODER,1,0x01)//GPIOA_3模式:输出        
  19.     static void I2C_SDA_OUT(void)
  20.     {
  21.     //                GPIO_InitTypeDef GPIO_InitStructure;        
  22.     //               
  23.     //                GPIO_InitStructure.GPIO_Pin=SHT30I2C_SDA;
  24.     // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  25.     //                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  26.     //                GPIO_Init(GPIOA,&GPIO_InitStructure);        
  27.     DS18B20_IO_OUT();
  28.     }
  29.     static void I2C_SDA_IN(void)
  30.     {
  31.     //                GPIO_InitTypeDef GPIO_InitStructure;        
  32.     //               
  33.     //                GPIO_InitStructure.GPIO_Pin = SHT30I2C_SDA;
  34.     // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  35.     //                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  36.     //                GPIO_Init(GPIOA,&GPIO_InitStructure);
  37.     DS18B20_IO_IN();
  38.     }
  39.     void IIC_GPIOInit(void)
  40.     {                                       
  41.     GPIO_InitTypeDef GPIO_InitStructure;
  42.     /* 使能GPIOA时钟 */
  43.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  44.     /* 配置LED相应引脚PB1*/
  45.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
  46.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  47.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  48.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  49.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  50.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  51.     I2C_SCL_H;
  52.     I2C_SDA_H;
  53.     //GPIO_SetBits(GPIOA,GPIO_Pin_3); //输出A3
  54.     // GPIO_SetBits(GPIOA,GPIO_Pin_4); //输出A3
  55.     }
  56.     #define I2C_DELAY_CLK 2 //3
  57.     //产生IIC起始信号:
  58.     void IIC_Start(void)
  59.     {
  60.     I2C_SDA_OUT();
  61.             
  62.             I2C_SDA_H;
  63.             I2C_SCL_H;
  64.             //delay_us(I2C_DELAY_CLK);
  65.             I2C_SDA_L;
  66.             //delay_us(I2C_DELAY_CLK);
  67.             I2C_SCL_L;
  68.             //delay_us(I2C_DELAY_CLK);
  69.     }        
  70.     //产生IIC停止信号
  71.     void IIC_Stop(void)
  72.     {
  73.     I2C_SDA_OUT();
  74.     I2C_SCL_L;
  75.     I2C_SDA_L;
  76.     I2C_SCL_H;
  77.     //delay_us(I2C_DELAY_CLK);
  78.     I2C_SDA_H;
  79.     //delay_us(I2C_DELAY_CLK);                                                        
  80.     }
  81.     //产生ACK应答
  82.     void IIC_Ack(void)
  83.     {
  84.     I2C_SCL_L;
  85.     I2C_SDA_OUT();
  86.     I2C_SDA_L;
  87.     //delay_us(2);
  88.     I2C_SCL_H;
  89.     //delay_us(I2C_DELAY_CLK);
  90.     I2C_SCL_L;
  91.     }
  92.     //不产生ACK应答               
  93.     void IIC_NAck(void)
  94.     {
  95.     I2C_SCL_L;
  96.     I2C_SDA_OUT();
  97.     I2C_SDA_H;
  98.     //delay_us(2);
  99.     I2C_SCL_H;
  100.     //delay_us(I2C_DELAY_CLK);
  101.     I2C_SCL_L;
  102.     }        
  103.     void i2c_send_ack()
  104.     {
  105.     I2C_SCL_L;        
  106.             // delay_us(I2C_DELAY_CLK);
  107.     I2C_SDA_H;
  108.     I2C_SDA_OUT();
  109.             // delay_us(I2C_DELAY_CLK);
  110.     I2C_SCL_H;        
  111.             // delay_us(I2C_DELAY_CLK);
  112.     I2C_SCL_L;        
  113.             // delay_us(I2C_DELAY_CLK);
  114.     }
  115.     uint8_t i2c_read_ack(void)
  116.     {
  117.     I2C_SCL_L;
  118.     I2C_SDA_IN(); //SDA设置为输入
  119.     // delay_us(I2C_DELAY_CLK);
  120.     I2C_SCL_H;        
  121.     //delay_us(2);
  122.     if(GPIO_ReadInputDataBit(GPIO_I2C, SHT30I2C_SDA))
  123.     {
  124.     I2C_SCL_L;
  125.     //delay_us(I2C_DELAY_CLK);
  126.     return 1;
  127.     }
  128.     else
  129.     {
  130.     I2C_SCL_L;
  131.     //delay_us(I2C_DELAY_CLK);
  132.     return 0;                        
  133.     }
  134.     }
  135.     //IIC发送一个字节
  136.     //返回从机有无应答
  137.     //1,有应答
  138.     //0,无应答                      



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信