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

推荐阅读

STM32F030C8T6 STM32F030R8T6 STM32F030 STOP低功耗模式配置 11uA
1、进入睡眠的关键语句RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);2、进入低功耗需要的配置,GPIO配置原则:不回路,不悬空输入。下面是将所有IO输出为0//输出GPIOA->MODER = 0x55555555;GPIOB->MODER = 0x55555555;GPIOC->MODER = 0x55555555;GPIOD->MODER = 0x55555555;GPIOF->MODER = 0x55555555;//即不
发表于 2020-01-20
STM32F030C8T6 STM32F030R8T6 <font color='red'>STM32F030</font> 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_InitStructure.GPIO_Pin = GPI
发表于 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:  #5: cann
发表于 2019-11-07
基于<font color='red'>STM32F030</font> Demo板的开发概要(问题解决)
STM32f030弄IAP时遇到的问题
bootloard中的跳转和F1(M3内核)的没什么区别这里的这句话if((((__IO uint32_t)IAP_ADDR)&0x2FFE0000)==0x20000000)并不是‘与’“&”操作,而是取出IAP_ADDR的值,判断栈顶地址特别注意的地方在bootloard跳转过去的程序需要添加 memcpy((void*)0x20000000,(void*)IAP_ADDR,0xB4); __HAL_SYSCFG_REMAPMEMORY_SRAM();在M3内核中可以通过操作VTOR寄存器来重映射中断向量表SCB->VTOR = FLASH_BASE | 0x10000;/* Vector Table Re
发表于 2019-11-07
<font color='red'>STM32f030</font>弄IAP时遇到的问题
小广播
实战 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

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

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