久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2151|回復: 1
收起左側

STM32的IIC通訊協議示例工程AT24CXX

[復制鏈接]
ID:304877 發表于 2020-5-7 11:16 | 顯示全部樓層 |閱讀模式
說明:本例程實驗STM32F103ZET6與AT24C02通訊,初次編寫,歡迎大佬批正。
接口如下:
        SDA  PA5
        SCL   PA4
        LED   PE5
現象:復寫成功,PE5輸出低電平
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IIC.C
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "iic.h"
#include "sys.h"
#include "delay.h"
#define IICDELAY delay_us(10);
#define SDA_IN  sda_i();
#define SDA_OUT sda_o();
#define SDA_H    GPIOA->ODR|= (1<<5);
#define SDA_L    GPIOA->ODR&= ~(1<<5);
#define SCL_H    GPIOA->ODR|= (1<<4);
#define SCL_L    GPIOA->ODR&= ~(1<<4);
#define SDA       ((GPIOA->IDR)>>5)&0X01
//PB3 SCL    PB4 SDA
/*IIC初始化*/
void iic_init(void)
{
  RCC->APB2ENR |= 1<<2;//使能PA時鐘
GPIOA->CRL &= ~(0xff << 4*3) ;  //清除CRL第20到23位值
GPIOA->CRL |= 0x33 << 4*3;      //設置B3B4輸出  50MHZ模式
GPIOA->ODR |= (1<<5)|(1<<4);    //設置為高電平
}
/*端口輸入模式*/
void sda_i(void)
{
  GPIOA->CRL &= ~(0xf0 << 4*4) ;  //清除CRL第20到23位值
GPIOA->CRL |= 0x80 << 4*4;      //設置B3B4輸入  默認上拉 50MHz模式
GPIOA->ODR |= (1<<5);    //設置為上拉模式
}
/*端口輸出模式*/
void sda_o(void)
{
  GPIOA->CRL &= ~(0xf0 << 4*4) ;  //清除CRL第20到23位值
GPIOA->CRL |= 0x30 << 4*4;      //設置B3B4輸出 50MHz模式
}
/*IIC起始信號*/
void iic_start(void)
{
  SDA_OUT
SCL_H
  IICDELAY
SDA_H
IICDELAY
SDA_L
IICDELAY
}
/*IIC終止信號*/
void iic_stop(void)
{
  SDA_OUT
SDA_L
  IICDELAY
SCL_H
IICDELAY
SDA_H
IICDELAY
}
/*主機發送應答*/
void master_ack(char i)//0為不應答
{
  SDA_OUT
  SCL_L
IICDELAY

if(i)
SDA_L
else
SDA_H

IICDELAY
  SCL_H
IICDELAY
SDA_IN
  SCL_L
}
/*檢測從機應答*/
char test_ack(void)
{
  SDA_IN
SCL_H
IICDELAY
if(SDA)     //如果高電平   非應答
{
SCL_L
IICDELAY
iic_stop();
return(0);
}
else        //低電平    應答
{
SCL_L
IICDELAY
return(1);
}
}
/*發送一個字節*/
void iic_send_byte(unsigned char byte)
{
  unsigned char i;
SDA_OUT
for(i = 0;i < 8;i++)
  {
  SCL_L
  IICDELAY
   if(byte&0x80)
   SDA_H
   else
  SDA_L
  IICDELAY
  SCL_H
  IICDELAY
  byte<<=1;
}
SCL_L
IICDELAY
SDA_IN
IICDELAY
}
/*讀一個字節*/
unsigned char iic_read_byte(void)
{
  unsigned char dat,i;
SCL_L
IICDELAY
SDA_IN
IICDELAY
for(i = 0;i < 8;i ++)
{
   SCL_H
   IICDELAY
  if(SDA)
  {
    dat|=0x01;
  }
    else
  {
   dat&=0xfe;
  }
    IICDELAY
    SCL_L
    IICDELAY
  if(i < 7)
  {
   dat = dat << 1;
  }      
}
return(dat);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
AT24C02.C
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "24cxx.h"
#define AT24C02_ADDR 0xa0
/*AT24C02初始化*/
void AT24CXX_init(void)
{
iic_init();
}
/*發送數據*/
unsigned char AT24CXX_TransmitData(unsigned char ADDR,unsigned char DAT)
{
    iic_start();
   iic_send_byte(AT24C02_ADDR+0);
   if(!test_ack())
  {
     return(0);
  }
  iic_send_byte(ADDR);
   if(!test_ack())
  {
     return(0);
  }
  iic_send_byte(DAT);
   if(!test_ack())
  {
     return(0);
  }  
  iic_stop();
     return(1);
}
unsigned char AT24CXX_ReceiveData(unsigned char ADDR)
{
unsigned char DAT;
iic_start();
iic_send_byte(AT24C02_ADDR+0);
if (!test_ack())
{
  return(0);
}
iic_send_byte(ADDR);
master_ack(0);
iic_start();
iic_send_byte(AT24C02_ADDR+1);
if (!test_ack())
{
  return(0);
}
DAT = iic_read_byte();
master_ack(0);
iic_stop();
return(DAT);
}


IIC工程.7z

175.33 KB, 下載次數: 16, 下載積分: 黑幣 -5

STM32F1程序

回復

使用道具 舉報

ID:304877 發表于 2020-5-11 06:41 來自手機 | 顯示全部樓層
已經實驗成功
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产福利视频 | 久久久久久美女 | 天天草天天操 | 91资源在线| 国产免费一区二区三区 | 日韩国产一区二区三区 | 国产人久久人人人人爽 | 99热热99 | 国产成人在线免费 | 天天干在线播放 | 亚洲国产精品精华素 | 日本精品视频在线观看 | 射欧美 | 91精品国产91久久久久久最新 | 最新黄色在线观看 | 免费午夜电影 | 亚洲国产精品一区二区第一页 | 毛片久久久 | 国产成在线观看免费视频 | 黄色大片在线免费观看 | 天天操夜夜拍 | 日韩在线一区二区三区 | 国产亚洲一级 | 狠狠躁18三区二区一区 | 粉嫩av在线| 国产精品久久久久久52avav | 99在线免费观看视频 | 欧美中文字幕一区二区 | 九九久久精品 | 国产成人jvid在线播放 | 第四色播日韩第一页 | 久久久久久一区 | 日本免费一区二区三区 | 中文字幕国产高清 | 久久精品国产亚洲a | 日韩欧美一级精品久久 | 91视在线国内在线播放酒店 | 午夜欧美| 岛国二区| 久久99网 | 天天综合网天天综合色 |