STM32F030 I2C 从模式中断编程

2019-04-02来源: eefocus关键字:STM32F030  I2C  从模式  中断编程

第一次用I2C的从模式,之前用的是主模式,用的IO模拟的,在很多设备都用上了,没什么问题。在使用I2C从模式之前,也在网上看到很多人说这个是坑。自己花了几天的时间,终于跳过了这个坑,再次总结下:


1. 最困难的地方:因为需要两个平台对接,主端用的是LINUX系统,芯片是TI335X,从端是STM32F030,我两端的程序都没写过,所以出现问题了,无法判定是哪一边的问题,这个很痛苦。


2. 例子。虽然“拿来主义”不太厚道”,但是站在巨人的肩膀上,往往是最快的。


1) STM32F030的代码:http://www.openedv.com/forum.php?mod=attachment&aid=NDczMzV8N2FkMWE1NWZ8MTU0MTUwMjI3MnwwfDY0NTIy


2)Linux的代码:http://blog.sina.com.cn/s/blog_13087b7fa0102wcyg.html


3. 实际上STM32F030写的已经很好了,只是我在调试过程中,总是huiy怀疑这怀疑那的,改了很多代码,做了很多打印信息,实际上证明我的怀疑都是错的。


4. Linux才是很大的坑,毕竟我很少在Linux下编程。


  1)ioctl返回的是成功失败的标志位,而我一开始以为是返回成功的字节数,这里花了半天时间,老是返回1,实际上就是成功的,而我认为应该范围我需要的长度。


2) 在读、写同时操作的时候,必须先读后写。我在调试的时候,先调试写的代码,是OK的,在调试度的代码,也是OK,最后合并的时候,也是OK。但是发现一断电重开机就不行,折腾几下右可以了。最后把读放在写前面就没在出现异常了。


以上,做个记录。


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

上一篇:STM32的I2C主从机通信
下一篇:STM32 IO 模拟IIC I2C

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

推荐阅读

STM32F030C8T6 STM32F030R8T6 STM32F030 STOP低功耗模式配置 11uA
_lib/inc/stm32f0xx_rcc.h"  #include "stm32_lib/inc/stm32f0xx_pwr.h"      int main(void)  {      //必须先开启时钟,在配置IO,否则配置的IO无效,电流无法进入uA级      RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);     
发表于 2020-01-20
STM32F030C8T6 STM32F030R8T6 STM32F030 STOP低功耗模式配置 11uA
STM32F030使用RTC周期性唤醒STOP模式
首先,F030与F072的RTC唤醒功能是不一样的,在相关定义文件stm32f0xx_exti.h中有如下定义:#define EXTI_Line17      ((uint32_t)0x00020000)  /*!< Internal interrupt line 17                                            
发表于 2019-11-08
STM32F030 使用引脚输入
GPIO_InitTypeDef GPIO_InitStructure;  /* Enable the BUTTON Clock */  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);   /* Configure Button pin as input */  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  GPIO_InitSt
发表于 2019-11-08
STM32F030 PF0与PF1作普通IO使用
STM32F030 使用内部晶振,PF0与PF1作普通IO使用一直不能读到PF0,PF1这二个端口的数据,返回来都是0,需要对下面这个函数做一些改动,方才可以。static void SetSysClock(void){  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;        //需要修改的关键地方,一定一定。。。。  //RCC->CR |= ((uint32_t)RCC_CR_HSEON); RCC->CR &
发表于 2019-11-07
基于STM32F030 Demo板的开发概要(问题解决)
问题出现环境:1.使用STM32F030 Demo板下载厂家给的LED测试例程时;2.使用Keil-MDK-uVison5版本;3.准备Build all时。问题出现现象:1.系统无法创建可烧写文件,即Target not created。显示Error为:..SystemCMSIScore_cm0.h(127): error:  #5: cannot open source input file "core_cmInstr.h": No such file or directory.类似问题探究:1...SystemCMSIScore_cm0.h(127): error:  
发表于 2019-11-07
基于STM32F030 Demo板的开发概要(问题解决)
STM32f030弄IAP时遇到的问题
Relocation in Internal FLASH. */在M0内核中需要memcpy((void*)0x20000000, (void*)IAP_ADDR, 0xB4);__HAL_SYSCFG_REMAPMEMORY_SRAM();其中,0x2000 0000是SRAM的起始地址,这个不需要改动。而之后的两个参数需要根据实际情况作出修改。IAP_ADDR是应用程序的起址地址,从这里开始的VECTOR_SIZE字节,存放是的应用程序的中断向量表。VECTOR_SIZE是指中断向量表的大小,具体多大可以在startup.s文件里计算得到。以下以startup_stm32f030.s为例作说明:我们只需关注其中的一小部分
发表于 2019-11-07
STM32f030弄IAP时遇到的问题
小广播
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved