<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > stm32之i2C硬件驅(qū)動(dòng)ht16c22

          stm32之i2C硬件驅(qū)動(dòng)ht16c22

          作者: 時(shí)間:2016-12-03 來(lái)源:網(wǎng)絡(luò) 收藏
          使用硬件i2c,驅(qū)動(dòng)ht16c22,程序不穩(wěn)定是肯定的,還是貼出來(lái)吧,項(xiàng)目中最好不要用。
          文件i2c.h內(nèi)容:

          #ifndef _STM32F103_I2C_H_
          #define _STM32F103_I2C_H_
          #include "stm32f10x.h"
          #define SlaveAddress 0x7e //0x7e
          //#define ModeSet 0b10001100 //80Hz,turn on sys and LCD bias,1/3 bias
          #define ModeSet 0x8C //80Hz,turn on sys and LCD bias,1/3 bias
          //#define VlcdAdjust 0b01111111 //Vlcd=0.6VDD,Seg Pin,enable internal voltage
          #define VlcdAdjust 0x70 //0x7F --Vlcd=0.6VDD,Seg Pin,enable internal voltage
          //#define Blink 0b11000000 //關(guān)閉閃爍
          #define Blink 0xC0 //關(guān)閉閃爍


          void LCD_I2C_config(void);
          void I2C_Write(unsigned int device_id, unsigned int register_id, unsigned int data);
          unsigned char I2C_Read(unsigned int device_id, unsigned int register_id);

          void ht16c22_init(void );

          unsigned char I2C_ht16c22_Read(unsigned int pBuffer, unsigned int ReadAddr);
          void I2C_ht16c22_Write(unsigned int device_id, unsigned int register_id);


          #endif

          本文引用地址:http://www.ex-cimer.com/article/201612/325190.htm
          i2c.c文件內(nèi)容為:

          #include "xx.h"


          static void I2C_Config(void)
          {
          GPIO_InitTypeDef GPIO_InitStructure;

          RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);

          /*config I2C2 SCL PB10*/
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

          GPIO_Init(GPIOB, &GPIO_InitStructure);
          /*config I2C2 SDA PB11 */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

          GPIO_Init(GPIOB, &GPIO_InitStructure);
          }


          void LCD_I2C_config(void)
          {
          I2C_InitTypeDef I2C_InitStructure;
          I2C_Config();
          I2C_DeInit(I2C2);

          I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
          I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9;//I2C_DutyCycle_2//I2C_DutyCycle_16_9
          I2C_InitStructure.I2C_OwnAddress1 = 0x0A; //0x0A//0xA0
          I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
          I2C_InitStructure.I2C_ClockSpeed = 10000;//10KHZ的速率
          I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

          I2C_Init(I2C2, &I2C_InitStructure);

          I2C_Cmd(I2C2, ENABLE);
          }

          int I2C_FLAG_BUSY_write = 0;
          int I2C_EVENT_MASTER_MODE_SELECT_write = 0 ;
          int I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED_write = 0 ;
          int I2C_EVENT_MASTER_BYTE_TRANSMITTED_write = 0 ;

          void I2C_Write(unsigned int device_id, unsigned int register_id, unsigned int data)
          {
          int i = 0;
          while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }

          I2C_GenerateSTART(I2C2, ENABLE);

          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }

          I2C_Send7bitAddress(I2C2, device_id, I2C_Direction_Transmitter);


          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }

          I2C_SendData(I2C2, register_id);


          while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }

          I2C_SendData(I2C2, data);



          while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }

          I2C_GenerateSTOP(I2C2, ENABLE);
          }



          void ht16c22_init()
          {
          LCD_I2C_config();
          I2C_ht16c22_Write(SlaveAddress,ModeSet);
          I2C_ht16c22_Write(SlaveAddress,VlcdAdjust);
          I2C_ht16c22_Write(SlaveAddress,Blink);

          I2C_Write(SlaveAddress,0x00,0x00);
          I2C_Write(SlaveAddress,0x01,0x00);
          I2C_Write(SlaveAddress,0x02,0x00);
          I2C_Write(SlaveAddress,0x03,0x00);
          I2C_Write(SlaveAddress,0x04,0x00);
          I2C_Write(SlaveAddress,0x05,0x00);
          I2C_Write(SlaveAddress,0x06,0x00);
          I2C_Write(SlaveAddress,0x07,0x00);
          I2C_Write(SlaveAddress,0x08,0x00);
          I2C_Write(SlaveAddress,0x09,0x00);
          I2C_Write(SlaveAddress,0x0A,0x00);
          I2C_Write(SlaveAddress,0x0B,0x00);
          I2C_Write(SlaveAddress,0x0C,0x00);
          I2C_Write(SlaveAddress,0x0D,0x00);
          I2C_Write(SlaveAddress,0x0E,0x00);
          I2C_Write(SlaveAddress,0x0F,0x00);
          I2C_Write(SlaveAddress,0x10,0x00);
          I2C_Write(SlaveAddress,0x11,0x00);
          I2C_Write(SlaveAddress,0x12,0x00);
          I2C_Write(SlaveAddress,0x13,0x00);
          I2C_Write(SlaveAddress,0x14,0x00);
          I2C_Write(SlaveAddress,0x15,0x00);
          I2C_Write(SlaveAddress,0x16,0x00);
          I2C_Write(SlaveAddress,0x17,0x00);
          I2C_Write(SlaveAddress,0x17,0x00);
          I2C_Write(SlaveAddress,0x18,0x00);
          I2C_Write(SlaveAddress,0x19,0x00);
          I2C_Write(SlaveAddress,0x1A,0x00);
          I2C_Write(SlaveAddress,0x1B,0x00);
          I2C_Write(SlaveAddress,0x1C,0x00);
          I2C_Write(SlaveAddress,0x1D,0x00);
          I2C_Write(SlaveAddress,0x1E,0x00);
          I2C_Write(SlaveAddress,0x1F,0x00);
          I2C_Write(SlaveAddress,0x20,0x00);
          I2C_Write(SlaveAddress,0x21,0x00);


          // I2C_Write(SlaveAddress,0x00,0xFF);
          // I2C_Write(SlaveAddress,0x01,0xFF);
          // I2C_Write(SlaveAddress,0x02,0xFF);
          // I2C_Write(SlaveAddress,0x03,0xFF);
          // I2C_Write(SlaveAddress,0x04,0xFF);
          // I2C_Write(SlaveAddress,0x05,0xFF);
          // I2C_Write(SlaveAddress,0x06,0xFF);
          // I2C_Write(SlaveAddress,0x07,0xFF);
          // I2C_Write(SlaveAddress,0x08,0xFF);
          // I2C_Write(SlaveAddress,0x09,0xFF);
          // I2C_Write(SlaveAddress,0x0A,0xFF);
          // I2C_Write(SlaveAddress,0x0B,0xFF);
          // I2C_Write(SlaveAddress,0x0C,0xFF);
          // I2C_Write(SlaveAddress,0x0D,0xFF);
          // I2C_Write(SlaveAddress,0x0E,0xFF);
          // I2C_Write(SlaveAddress,0x0F,0xFF);
          // I2C_Write(SlaveAddress,0x10,0xFF);
          // I2C_Write(SlaveAddress,0x11,0xFF);
          // I2C_Write(SlaveAddress,0x12,0xFF);
          // I2C_Write(SlaveAddress,0x13,0xFF);
          // I2C_Write(SlaveAddress,0x14,0xFF);
          // I2C_Write(SlaveAddress,0x15,0xFF);
          // I2C_Write(SlaveAddress,0x16,0xFF);
          // I2C_Write(SlaveAddress,0x17,0xFF);
          // I2C_Write(SlaveAddress,0x17,0xFF);
          // I2C_Write(SlaveAddress,0x18,0xFF);
          // I2C_Write(SlaveAddress,0x19,0xFF);
          // I2C_Write(SlaveAddress,0x1A,0xFF);
          // I2C_Write(SlaveAddress,0x1B,0xFF);
          // I2C_Write(SlaveAddress,0x1C,0x00);
          // I2C_Write(SlaveAddress,0x1D,0x00);
          // I2C_Write(SlaveAddress,0x1E,0x00);
          // I2C_Write(SlaveAddress,0x1F,0x00);
          // I2C_Write(SlaveAddress,0x20,0x00);
          // I2C_Write(SlaveAddress,0x21,0x00
          // I2C_Write(SlaveAddress,0x05,0x0F);
          // temp = I2C_ht16c22_Read(SlaveAddress,0x05);
          // I2C_Write(SlaveAddress,0x05,(0x10) | temp);

          // temp = I2C_ht16c22_Read(SlaveAddress,0x05);
          // printf("temp = %drn" ,temp);
          // I2C_Write(SlaveAddress,0x05,0xE0 | temp);
          //
          // temp = I2C_ht16c22_Read(SlaveAddress,0x06);
          // I2C_Write(SlaveAddress,0x06,0x0F | temp);

          // I2C_ht16c22_Write(SlaveAddress,0x80,0x03,0xff);


          // I2C_Write(SlaveAddress,0x0A,0xFF);
          // I2C_Write(SlaveAddress,0x00,0xFF);
          // I2C_Write(SlaveAddress,0x01,0xFF);
          // I2C_Write(SlaveAddress,0x02,0xFF);
          //
          // I2C_Write(SlaveAddress,0x03,0xFF);
          // I2C_Write(SlaveAddress,0x04,0xFF);
          // I2C_Write(SlaveAddress,0x05,0xFF);
          // I2C_Write(SlaveAddress,0x06,0xFF);
          //
          // I2C_Write(SlaveAddress,0x07,0xFF);
          // I2C_Write(SlaveAddress,0x08,0xFF);
          // I2C_Write(SlaveAddress,0x09,0xFF);
          //
          // I2C_Write(SlaveAddress,0x0A,0xFF);
          // I2C_Write(SlaveAddress,0x0B,0xFF);
          // I2C_Write(SlaveAddress,0x0C,0xFF);
          // I2C_Write(SlaveAddress,0x0D,0xFF);
          //
          //
          // I2C_Write(SlaveAddress,0x0E,0xFF);
          // I2C_Write(SlaveAddress,0x0F,0xFF);
          // I2C_Write(SlaveAddress,0x10,0xFF);
          // I2C_Write(SlaveAddress,0x11,0xFF);
          //
          // I2C_Write(SlaveAddress,0x12,0xFF);
          // I2C_Write(SlaveAddress,0x13,0xFF);
          // I2C_Write(SlaveAddress,0x14,0xFF);
          // I2C_Write(SlaveAddress,0x15,0xFF);

          }




          void I2C_ht16c22_Write(unsigned int device_id, unsigned int register_id)
          {

          while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008



          I2C_GenerateSTART(I2C2, ENABLE);

          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));


          I2C_Send7bitAddress(I2C2, device_id, I2C_Direction_Transmitter);


          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

          I2C_SendData(I2C2, register_id);


          while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
          ;
          I2C_GenerateSTOP(I2C2, ENABLE);
          }


          int I2C_FLAG_BUSY_read = 0;
          int I2C_EVENT_MASTER_MODE_SELECT_read_1 = 0 ;
          int I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED_read_1 = 0 ;
          int I2C_EVENT_MASTER_BYTE_TRANSMITTED_read = 0 ;
          int I2C_EVENT_MASTER_MODE_SELECT_read_2 = 0 ;
          int I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED_read_2 = 0 ;
          int I2C_EVENT_MASTER_BYTE_RECEIVED_read = 0;

          unsigned char I2C_ht16c22_Read(unsigned int pBuffer, unsigned int ReadAddr)
          {
          unsigned char temp;
          int i = 0;

          while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }
          I2C_GenerateSTART(I2C2, ENABLE);

          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }

          I2C_Send7bitAddress(I2C2, pBuffer, I2C_Direction_Transmitter);


          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }


          I2C_Cmd(I2C2, ENABLE);

          I2C_SendData(I2C2, ReadAddr);

          /* Test on EV8 and clear it */
          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }

          I2C_GenerateSTART(I2C2, ENABLE);

          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }


          I2C_Send7bitAddress(I2C2, pBuffer, I2C_Direction_Receiver);

          while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
          {
          ;
          }

          I2C_AcknowledgeConfig(I2C2, DISABLE);
          I2C_GenerateSTOP(I2C2, ENABLE);
          while(!(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED)))
          {
          if(i == 65536)
          {
          debug("----i2c dead--------rn");
          i = 0;
          break;
          }
          ;
          }
          temp = I2C_ReceiveData(I2C2);
          I2C_AcknowledgeConfig(I2C2, ENABLE);

          return temp;

          }

          好了,硬件i2c就到這里就結(jié)束吧。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();