历史上的今天
返回首页

历史上的今天

今天是:2024年11月11日(星期一)

正在发生

2019年11月11日 | STM8 I2C从机

2019-11-11 来源:eefocus

宏定义


#define SLAVE_ADDR 0x51

#define I2CSPEED 400000 //i2c速度


stm8l051 i2c从机初始化


    /* I2C  clock Enable*/

    CLK_PeripheralClockConfig(CLK_Peripheral_I2C1, ENABLE);


    I2C_DeInit(I2C1);

    I2C_Init(I2C1, I2CSPEED, SLAVE_ADDR ,

        I2C_Mode_I2C, I2C_DutyCycle_2,

        I2C_Ack_Enable, I2C_AcknowledgedAddress_7bit);

    /* Enable Error Interrupt*/

    I2C_ITConfig(I2C1, (I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE);


stm8s103 i2c从机初始化


I2C_Init(I2CSPEED, SLAVE_ADDR , I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, I2CCLK);//I2C初始化

I2C_ITConfig(I2C1, (I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE);


中断处理


{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

//接收发送

    Uchar temp = 0;

    if (I2C1->SR1&0x02)//地址已经匹配(读SR1,SR3清除该位)

    {

        temp = I2C1->SR3&0x07;

    }

    else if ((I2C1->SR1&0x84)&&(I2C1->SR3&0x04))//数据字节传送完

    {

        temp = 0xA5;    //假设这里发送0xA5

        I2C1->DR = temp;

    }

    else if ((I2C1->SR1&0x40)&&(0 == (I2C1->SR3&0x04)))//接收时数据寄存器

    {

        temp = I2C1->DR;    //读取数据寄存器


    }

    else if (I2C1->SR1&0x10)//检测到停止位

    {

        I2C1->CR2 = I2C1->CR2;//清除停止位

    }

    //错误处理

    if (I2C1->SR2&0x01)//总线错误

    {

        I2C1->SR2 &= ~0x01;//清零

    }

    else if(I2C1->SR2&0x02)//仲裁失败

    {

        I2C1->SR2 &= ~0x02;//清零

    }

    else if(I2C1->SR2&0x04)//应答失败

    {

        I2C1->SR2 &= ~0x04;//清零

    }

    else if(I2C1->SR2&0x08)//上溢、下溢

    {

        I2C1->SR2 &= ~0x08;//清零

    }

    return;

}


以上程序已长时间测试未发生过任何异常,所以他们说stm8的I2C存在硬件BUG应该是谣言。


推荐阅读

史海拾趣

Anixter Inc公司的发展小趣事

Anixter Inc 是一家全球性的供应链解决方案提供商,以下是该公司发展的相关故事:

  1. 公司成立与初期发展:Anixter Inc 成立于 1957 年,总部位于美国伊利诺伊州格伦维尔回。最初,公司主要从事电线电缆的销售和分销。随着时间的推移,Anixter 不断扩大业务范围,逐步涉足网络设备、安全解决方案、电子元器件等领域。

  2. 业务拓展与国际化:随着市场需求的变化和全球化的趋势,Anixter 不断拓展业务,并加速国际化进程。公司在全球范围内建立了广泛的分销网络和供应链体系,在北美、欧洲、亚洲和拉丁美洲等地区设立了办事处、仓库和物流中心,以更好地满足客户的需求。

  3. 技术创新与解决方案提供:Anixter 不断注重技术创新和解决方案提供,与各种供应商合作,推出了多种先进的产品和服务。公司致力于为客户提供全方位的供应链解决方案,包括设计、采购、仓储、配送和技术支持等,帮助客户提高效率、降低成本并增强竞争力。

  4. 收购与合并:为了加速业务发展和扩大市场份额,Anixter 进行了一系列收购和合并活动。通过收购具有特定技术或地区优势的公司,Anixter 不仅增强了自身的竞争实力,还拓展了业务领域和市场覆盖范围。

  5. 可持续发展与未来展望:Anixter 积极响应可持续发展的呼声,致力于推动环保和社会责任的实践。公司在供应链管理、能源管理和环境保护等方面持续改进,致力于减少碳排放、资源浪费和环境污染。未来,Anixter 将继续秉承技术创新和客户导向的理念,不断适应市场变化和挑战,保持行业领先地位,并为客户和股东创造持续增长的价值。

无锡友达公司的发展小趣事

无锡友达电子有限公司自2002年成立以来,就致力于半导体集成电路设计领域。在初创阶段,公司凭借对高性能模拟和数模混合集成电路的深刻理解,迅速推出了多款性能优异的功放、电源等系统方案。这些产品在电视机、音响设备等领域的广泛应用,为公司赢得了市场的初步认可。通过不断的技术创新,无锡友达逐渐在电子行业崭露头角。

Hisetec Electronic Co Ltd公司的发展小趣事

背景:进入数字化时代,企业面临着前所未有的挑战和机遇。Hisetec Electronic Co Ltd公司深知数字化转型的重要性,开始积极探索数字化转型之路。

发展:公司引入了先进的智能制造系统和大数据分析技术,实现了生产过程的智能化和精细化管理。同时,公司还建立了数字化营销平台,通过精准营销和个性化服务提升客户满意度。数字化转型的成功实施,使Hisetec公司在激烈的市场竞争中保持了领先地位。

CONEC公司的发展小趣事

为了进一步提升公司的竞争力和市场影响力,CONEC开始了国际化布局。1990年,康耐加拿大公司的成立,标志着公司迈出了国际化的重要一步。随后,CONEC在德国、捷克共和国、美国和波兰等地设立分公司或生产基地,形成了全球性的生产和销售网络。同时,公司还积极寻求与全球领先的电子企业和技术机构的战略合作,共同推动电子行业的发展。

CAMDENBOSS公司的发展小趣事

在电子行业的早期,CAMDENBOSS公司以其对技术的深入研究和不断创新而崭露头角。公司研发团队通过不懈努力,成功开发出一款具有革命性的连接器产品,该产品在信号传输效率和稳定性上取得了显著突破。这一技术突破不仅为公司赢得了市场的广泛认可,也奠定了其在电子连接器领域的领先地位。

永源微电子(APM)公司的发展小趣事

随着产品线的拓展和技术实力的增强,永源微电子开始积极拓展市场。公司在台湾、深圳、香港、无锡等地设立了研发与销售中心,通过多渠道的市场推广和品牌建设活动,不断提升“APM”品牌的知名度和影响力。同时,永源微电子还积极参加国内外电子行业的展会和交流活动,与业界同行建立了广泛的合作关系,进一步拓展了公司的市场版图。

问答坊 | AI 解惑

下载有问题找版主!

新手的话可能新币不够用,下载不了,由于一些后续的工作还没有做好,利用现有的条件,建议直接找版主,因为版主下载附件不要芯币,也可以直接给你评分,直接加芯币就完事啦!看到新手抱怨下不了的帖子太多了,有点麻木了! 至于其他的现在还在考虑 ...…

查看全部问答>

如何用程序控制I/O口使得输出低电平以开启SIM300模块?

各位大虾:    今遇到一棘手问题:程序在使用SIM300模块进行通信的时候,发现SIM300模块开启的时候需要给它的PWRKEY引脚供低电平2秒钟,我怎么写程序能控制PWRKEY引脚呢?我用的是2440,硬件的连接我不清楚,但我估计应该是使用通用I/O ...…

查看全部问答>

我的1602不亮了,是怎么回事啊

我的1602不亮了,是怎么回事啊…

查看全部问答>

SIM300C使用简单串口,上网时出现收发数据问题,谢谢

我使用的是SIM300C模块,用三线的简单串口与S3C2410连接。 现在网络是通上了,也能正常与服务器端进行发送接收! 当我向SIM300C发送命令的时候,他会反馈一些字符信息。 问题是当我正在向SIM300C发送命令、数据的时候,服务器端下发的数据也从串 ...…

查看全部问答>

请教:IIS和UDA1341工作原理

L3-interface用来控制音量,低音等,怎么控制的,控制信号是什么信号?PWM脉冲波?还是其他的 …

查看全部问答>

SOURCES书写问题。。

看门狗驱动程序 程序部分:                 PHYSICAL_ADDRESS RegPA; if (v_pWTDregs == NULL) {    RegPA.QuadPart = WDTIM_BASE;    v_pWTDregs = (volatile WDT_REGS_T *)MmM ...…

查看全部问答>

有没有DX用STM32做过视频处理呢?

                                 当然做标准的通用视频处理可能是不够的,但是如果对专门的QVGA,CIF等格式做视频处理的话,STM32能否满足需求呢?…

查看全部问答>

MSP430中文资料

MSP430中文资料  大家一起进步哦…

查看全部问答>

基于msp430g2553定时器详解3

#include \"msp430g2553.h\"unsigned char num;void main(){  // Stop watchdog timer to prevent time out reset        WDTCTL = WDTPW + WDTHOLD;        BCSCTL ...…

查看全部问答>

button(中断)驱动程序中 错误原因!

/home/wq/linux_drv/int_key/int_key_drv.c:69: warning: initialization from incompatible pointer type /home/wq/linux_drv/int_key/int_key_drv.c:72:25: error: macro \"key_init\" passed 1 arguments, but takes just 0 /home/wq/linux_dr ...…

查看全部问答>