STM8 I2C从机

2019-11-11来源: eefocus关键字:STM8  I2C  从机

宏定义


#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应该是谣言。


关键字:STM8  I2C  从机 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479612.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM8S103之IO复用
下一篇:STM8S003的GPIO模拟I2C切换输入输出的解决办法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm8s 低功耗模式
因为用干电池供电,又需要超长待机了,成本又限制不能使用stm8l,所以开启低功耗之旅1.元器件选型挑选低功耗的元器件,一定要关注工作电流led 一定要高电平导通,不然的话,默认状态拉高很费电元器件尽量选择共阴解法,更省电2.主时钟频率频率和功耗是成正比的,选择试用的最低晶振能不开的功能尽量不开下面是对应的功耗表ADC最费电3.合理使用低功耗模式主要有一下几种等待模式活跃停机模式停机模式下面是对比等待模式使用asm(“WFI”)进入会被各种中断激活活跃停机模式AWU是用来当MCU进入低功耗的活跃停机(Active Halt)模式时提供一个内部的唤醒时间基准。该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE
发表于 2019-11-20
stm8s 低功耗模式
简单介绍下关于STM8S的几种低功耗模式
的REGAH位清零。则进入慢速活跃停机模式,该模式主电压调节器关闭,MCU内核由低功耗电压调节器(LPVR)供电,唤醒时间相对较长。        STM8的几种低功耗分析就到这里,最后附上AMU配置步骤:                 
发表于 2019-11-20
简单介绍下关于STM8S的几种低功耗模式
Atomthreads关于STM8S低功耗的思考
;              idle_thread_stack_top,                 idle_thread_stack_size);     /* Return status */    return (status); }针对STM8我们最自然想到的是在其中加一个wfi,STM8进入wfi模式几乎不会影响任何外设的运行。以STM8S105K4为例,其进入该模式的典型电流是1.8mA。这个电流,用一节
发表于 2019-11-20
Atomthreads关于STM8S低功耗的思考
STM8L051之低功耗停机配置问题
在做stm8L的小一个项目,由电池供电,当按键长按关机,系统进入停机模式,虽然系统运行的时候有十几毫安的电流消耗(还没使用RTC定时唤醒),但是在停机模式下电流消耗竟然还有1.33ma的电流,花了半天的时间找资料,看文档,在网上看到不少大牛能做到0.4ua,自己无论如何设置IO,外设都无补于事,停机模式下电流最低还有1ma。 最后只能将开机初始化的外设函数一个一个注释掉,包括ADC,DMA,beep,以及TIM4,最后发现只注释掉ADC的初始化函数,再进入停机模式,果然电流接近0,5ua,也就是说可能ADC模块在进入停机模式前的关闭设置不正确,之前的是这样的:void PerCLK_OFF(){  
发表于 2019-11-20
STM8S 自动唤醒AWU配置
简介AWU是用来当MCU进入低功耗的活跃停机(Active Halt)模式时提供一个内部的唤醒时间基准。 该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE晶振时钟来提供 的。校准LSILSI 时钟测量 在使用LSI低速内部时钟时,为了确保好的精度,它的频率可以通过TIMX的输入捕捉1来测定。将AWU_CSR的MSR位置1来把LSI的内部时钟连接到TIMX定时器的ICAP1;通过定时器的输入捕捉中断来测量LSI的时钟频率;到向AWU_APR的 APR [5:0] 位写入一个适当的值来调整AWU定时间隔到期望的时间间隔。AWUTB[3:0]位可以被更改来选择不同的时间间隔。 LSI的时钟频率测量方法也可以被用
发表于 2019-11-20
STM32初学笔记---延时函数及u16、u32、u8
在编写流水灯程序时发现,和对之前用的51单片机所用的普通软件延时函数有所不同,51的普通软件延时函数我们一般是这样编写的:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charvoid delayms(uint xms){uint i,j;for(i=xms;i>0;i--) for(j=110;j>0;j--);}然而我们在对STM32利用库函数进行编程时采用此延时函数则完全行不通,而是采用下面的延时函数#include "
发表于 2019-11-19
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved