历史上的今天
返回首页

历史上的今天

今天是:2025年03月07日(星期五)

正在发生

2018年03月07日 | STM32模拟IIC程序

2018-03-07 来源:eefocus

    #ifndef __AT24C02_H__

    #define __AT24C02_H__

    #include"stm32f10x.h"

    void iICinit(void);

    void iicwrite(u8 add,u8 Achar);

 

    u8 iicread(u8 add);

    #endif

    #include"stm32f10x.h"

    #include"at24c02.h"

    void iicstart(void);

    void iicstop(void);

    void ack(void);

    void iicwritebyte(u8 a);

    u8 iicreadbyte(void);

    void iicwrite(u8 add,u8 Achar);

    u8 iicread(u8 add);

    void iicinit(void);

    /////////////////////////////

    void delay5us(void)//ums

    {

    unsigned short i, j;

    unsigned short time;

    time=5;

    for(; time > 0; time--){

    for(j = 0; j < 5; j++){

    for(i = 0; i < 1; i++);

    }

    }

    }

    void delayms(unsigned short time)//nms

    {

    unsigned short i, j;

    for(; time > 0; time--){

    for(j = 0; j < 10; j++){

    for(i = 0; i < 1004; i++);

    }

    }

    }

    void iicinit(void)

    {

    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphCLOCkCmd(RCC_APB2Periph_GPIOB,ENABLE);

    GPIO_InitStructure.GPIO_PIN = GPIO_Pin_6|GPIO_Pin_7;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

    GPIO_Init(GPIOB, &GPIO_InitStructure);

    }

    void iicstart(void)

    {

    GPIO_SetBits(GPIOB,GPIO_Pin_7); //sda=1;

    delay5us();

    GPIO_SetBits(GPIOB,GPIO_Pin_6); //scl=1;

    delay5us();

    GPIO_ResetBits(GPIOB,GPIO_Pin_7); //sda=0;

    delay5us();

    }

    void iicstop(void)

    {

    GPIO_ResetBits(GPIOB,GPIO_Pin_7); //sda=0;

    delay5us();

    GPIO_SetBits(GPIOB,GPIO_Pin_6); //scl=1;

    delay5us();

    GPIO_SetBits(GPIOB,GPIO_Pin_7); //sda=1;

    delay5us();

    }

    void ack(void)

    {

    u16 i;

    GPIO_SetBits(GPIOB,GPIO_Pin_6);//scl=1;

    delay5us();

    while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)&&(i<0x2b0)) {i++;}

    GPIO_ResetBits(GPIOB,GPIO_Pin_6);//scl=0;

    delay5us();

    }

    void iicwritebyte(u8 a)

    {

    u16 i;

    GPIO_ResetBits(GPIOB,GPIO_Pin_6); //scl=0;

    delay5us();

    for(i=0;i<8;i++)

    {

    if(a&0x80)

    GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

    else

    GPIO_ResetBits(GPIOB,GPIO_Pin_7);;

    a=a<<1;

    GPIO_SetBits(GPIOB,GPIO_Pin_6);//scl=1;

    delay5us();

    GPIO_ResetBits(GPIOB,GPIO_Pin_6);//scl=0;

    delay5us();

    }

    GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

    delay5us();

    }

    u8 iicreadbyte()

    {

    u8 i,temp;

    temp=0;

    GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

    delay5us();

    GPIO_ResetBits(GPIOB,GPIO_Pin_6); //scl=0;

    delay5us();

    for(i=0;i<8;i++)

    {

    GPIO_SetBits(GPIOB,GPIO_Pin_6); //scl=1;

    delay5us();

    delay5us();

    temp=(temp<<1)|GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);

    delay5us();

    GPIO_ResetBits(GPIOB,GPIO_Pin_6); //scl=0;

    delay5us();

    }

    GPIO_SetBits(GPIOB,GPIO_Pin_7);//sda=1;

    delay5us();

    GPIO_ResetBits(GPIOB,GPIO_Pin_6);//scl=0;

    delay5us();

    return temp;

    }

    void iicwrite(u8 add,u8 Achar)

    {

    iicstart();

    iicwritebyte(0xa0);

    ack();

    iicwritebyte(add);

    ack();

    iicwritebyte(Achar);

    ack();

    iicstop();

    delayms(20);

    }

    u8 iicread(u8 add)

    {

    u8 temp;

    iicstart();

    iicwritebyte(0xa0);

    ack();

    iicwritebyte(add);

    ack();

    iicstart();

    iicwritebyte(0xa1);

    ack();

    temp=iicreadbyte();

    ack();

    iicstop();

    return temp;

    }


推荐阅读

史海拾趣

CALMIRCO公司的发展小趣事

CALMIRCO公司注重企业文化的塑造,倡导“创新、协作、务实、进取”的企业精神。公司通过定期举办员工培训、团队建设等活动,提升员工的职业素养和团队协作能力。同时,CALMIRCO公司还建立了完善的激励机制,鼓励员工积极创新、勇于担当。这些举措使得CALMIRCO公司的团队凝聚力不断增强,为公司的持续发展提供了有力保障。

FOCI Fiber Optic Communications Inc公司的发展小趣事

CALMIRCO公司自成立以来,一直致力于电子技术的研发与创新。在公司发展初期,CALMIRCO团队便成功研发出一款具有划时代意义的智能芯片,该芯片在性能和稳定性上均达到行业领先水平。这一技术突破不仅为CALMIRCO公司赢得了大量市场份额,更推动了整个电子行业的进步。此后,CALMIRCO公司继续加大研发投入,不断推出创新产品,引领行业变革。

昆泰芯微电子(CONNTEK)公司的发展小趣事

昆泰芯微电子实行立体作战的研发模式,整合了芯片设计、电子应用设计、工业设计等多家专业设计公司。这种研发模式不仅为公司带来了更多的创新机会,也为工程师们提供了更多的挑战和成长机遇。公司注重员工的培训和发展,有专员负责新人的岗前培训,进行岗位知识的输送以及疑难问题的解答。同时,公司也鼓励员工参与实际项目,由专业领域的前辈进行引领,让员工在实践中快速成长。

ADI(亚德诺半导体)公司的发展小趣事

随着物联网技术的快速发展,昆泰芯微电子紧跟时代步伐,深度布局物联网应用领域。公司专注于面向物联网应用的传感器芯片研发、生产和销售,致力于成为传感器信号链及物联网芯片的行业领导者。在消费电子、智能制造、智能交通、智能家居以及新能源汽车等多个领域,昆泰芯微电子的产品得到了广泛应用,为这些领域的发展提供了强有力的技术支持。

D+H Mechatronic AG公司的发展小趣事

随着市场竞争的加剧,D+H Mechatronic AG开始调整其市场布局策略。公司根据市场需求和产品特点,有针对性地开拓新的市场领域。同时,公司还加强了与客户的沟通和合作,深入了解客户需求并提供定制化的解决方案。这些举措使公司在激烈的市场竞争中保持了稳定的增长态势,并逐步巩固了其在电子行业中的地位。

Corex Intervest Inc公司的发展小趣事

Corex Intervest Inc公司的创立,标志着电子行业中一颗新星的诞生。公司创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,决定投身于电子产品的研发和生产。在创立初期,公司面临着资金短缺、技术难题和市场竞争等多重挑战。然而,创始人凭借坚定的信念和不懈的努力,带领团队攻克了一个又一个难关,逐步在市场中站稳了脚跟。

问答坊 | AI 解惑

很想知道学会了单片机研发,工资一般能拿多少啊?能达到6000吗?

很想知道学会了单片机研发,工资一般能拿多少啊?能达到6000吗?…

查看全部问答>

18B20传感器

18B20温度传感器中文资料…

查看全部问答>

电路设计技术与技巧(第二版)国外牛人Tim Williams著

国际电子大侠Tim Williams(蒂姆·威廉斯)著 内容简介 本书较全面和系统地讲述了在实际电子电路设计中常见问题和容易忽视的方方面面, 涵盖了设计产品所需是的全面知识,包括印制电路板布线和接地、有源和无源器件、模拟和数字集成电路、电源、电 ...…

查看全部问答>

【FPGA 代码】

持续赋值方式定义的2 选1 多路选择器module MUX21_1(out,a,b,sel);input a,b,sel;output out;assign out=(sel==0)?a:b;//持续赋值,如果sel 为0,则out=a ;否则out=bendmodule阻塞赋值方式定义的2 选1 多路选择器module MUX21_2(out,a,b,sel);inpu ...…

查看全部问答>

问一个笨笨的问题

请问如何在EVC build后执行某个PC上的EXE文件. 比如,我要在build aa.exe后自动调用bb.exe. 我在post-build里设置,总是不成功.…

查看全部问答>

串口通信

我现在用RS232进行PC机和单片机的通信,在用串口调试助手的时候,发现单片机发送回来的数据是乱码,请问这是什么原因?…

查看全部问答>

地址卷绕

想问下,地址卷绕是一种什么概念啊!好像发生在运算结果上溢出和下溢出时候的!…

查看全部问答>

WINCE6.0操作系统在三星6410开发板上完美展现!--基于立宇泰ARMSYS6410开发板

精彩测评实例图片说明:1,WINCE6.0系统启动画面(进度条动态显示内核加载进程,LOGO图片可以根据客户需要免费更换);2,WINCE6.0桌面效果;3,800x480液晶屏全屏播放H.264视频流文件(采用硬件解码)4,800x480液晶屏全屏播放MPEG4(avi后缀)音视 ...…

查看全部问答>

STM32用到的TFT屏幕资料及例程.欢迎补充

既然有人需要TFT屏 资料.放假在家也没什么事.整理一下自己手头有的吧.做个抛砖引玉.希望大家能吧自己方便分享的资料都上传上传~…

查看全部问答>

Ecan通信的中断问题

       本人在一个项目中运用Ecan进行通信,在通信过程中会碰到中断故障(具体原因说不上来)。我是将Ecan设置成中断接收的(邮箱0-15设置成接收邮箱,16邮箱设置成发送邮箱),若接收到一个合理的读写命令,则返回 ...…

查看全部问答>