STM32F407和STM32F051主从I2C通信方法

发布者:清新心情最新更新时间:2018-04-15 来源: eefocus关键字:STM32F407  STM32F051  主从I2C  通信方法 手机看文章 扫描二维码
随时随地手机看文章

M4作为主机:

  int main(void)

  {

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  HAL_Init();

  /* Configure the system clock */

  SystemClock_Config();

  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_I2C1_Init();

  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  int i;

  HAL_I2C_Master_Receive_IT(&hi2c1, 0x22, bbb, 4);

  HAL_Delay(1000);

  if(i2c_flag == 1)

  {

  i2c_flag = 0;

  printf("\naddr is 11:");

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

  {

  printf("%02x ", aaa[i]);

  }

  printf("\naddr is 22:");

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

  {

  printf("%02x ", bbb[i]);

  }

  }

  }

  /* USER CODE END 3 */

  }

  M0作为从机:

  void IIC_GPIO_Configuration(void)

  {

  GPIO_InitTypeDef GPIO_InitStruct;

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 , ENABLE);

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;

  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//GPIO_Mode_IN

  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;

  GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;//open-drain

  GPIO_Init(GPIOB , &GPIO_InitStruct);

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;

  GPIO_Init(GPIOB , &GPIO_InitStruct);

  /* Connect PXx to I2C_SCL*/

  GPIO_PinAFConfig( GPIOB , GPIO_PinSource6, GPIO_AF_1);

  /* Connect PXx to I2C_SDA*/

  GPIO_PinAFConfig( GPIOB , GPIO_PinSource7, GPIO_AF_1);

  }

  void IIC_Configuration(void)

  {

  I2C_InitTypeDef I2C_InitStruct;

  /* I2C configuration */

  I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;

  I2C_InitStruct.I2C_AnalogFilter = I2C_AnalogFilter_Enable;

  I2C_InitStruct.I2C_DigitalFilter = 0x00;

  I2C_InitStruct.I2C_OwnAddress1 = 0x22;

  I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;

  I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

  I2C_InitStruct.I2C_Timing = 0xb0420f13;//100Kbits

  /* I2C Peripheral Enable */

  I2C_Cmd(I2C1, ENABLE);

  /* Apply I2C configuration after enabling it */

  I2C_Init(I2C1, &I2C_InitStruct);

  }

  int main(void)

  {

  peripheral_init();

  board_init();

  I2C1_isr.CR1 |= 0X08; //地址匹配产生中断

  while(1)

  {

  if(Recv_flag == 1)

  {

  Recv_flag = 0;

  if(I2C_GetFlagStatus(I2C1, I2C_FLAG_TCR) != SET)

  {

  printf("transfer\n");

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

  {

  while(I2C_GetFlagStatus(I2C1, I2C_FLAG_TXIS) != SET);

  I2C_SendData(I2C1, Data_to_M4_1[i]);

  }

  }

  }

  }

  }

  void I2C1_IRQHandler(void)

  {

  uint8_t i = 0;

  uint8_t j = 0;

  I2C_ClearITPendingBit(I2C1, I2C_ISR_ADDR);

  I2C1->ISR |= 0x00000001;

  I2C_ClearFlag(I2C1, I2C_FLAG_ADDR);

  printf("IIC irq in2\n");

  Recv_flag = 1;


关键字:STM32F407  STM32F051  主从I2C  通信方法 引用地址:STM32F407和STM32F051主从I2C通信方法

上一篇:STM32 模拟I2C (STM32F051)
下一篇:STM32-IIC模拟从模式

推荐阅读最新更新时间:2024-03-16 16:00

STM32F051 SPI slave mode DMA接收
用STM32F051的SPI从模式接收主机发送的实时数据。 Eclips 环境,gcc编译器,相关源码如下: #ifdef DEBUG_SPI_EN #define DEBUG_SPI(...) printf(__VA_ARGS__) #else #define DEBUG_SPI(...) #endif void SPI1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE
[单片机]
stm32f407之定时器中断使用流程
1.初始化 1.定义相关变量 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; 2.打开定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 3.定时器寄存器配置 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure
[单片机]
<font color='red'>stm32f407</font>之定时器中断使用流程
基于STM32F407的网络化智能车灯控制系统
1、引言 车灯作为汽车的眼睛,在行车的过程中车灯对安全起着至关重要的作用。汽车在夜间行驶至弯道时由于车灯的局限性,车灯光束无法完全照射至路面,从而造成视野盲区问题。夜间会车时,如果对方车辆未调节前照车灯时容易造成驾驶人炫目。这些情况容易造成交通事故,威胁人身安全。而智能车灯控制系统不仅能够根据行车线自动调节灯光角度。而且可以根据车内摄像头判别路况信息,自动进行灯光分离,改善会车时灯光阻碍视线的问题。 2、系统框图和工作原理 系统由车灯控制系统和手机APP构成,通过蓝牙进行数据的传输,系统根据调取高德地图的车辆行驶路线信息进行处理,然后根据处理结果自动调节前车照灯光束的照射角度。同时利用摄像头对车辆前方的路况信息进行判断,从而自
[单片机]
基于<font color='red'>STM32F407</font>的网络化智能车灯控制系统
基于无线通信设备电磁兼容性要求和测量方法介绍
随着 无线通信 技术的飞速发展,各种新技术、新产品层出不穷,导致相关的产品族 电磁兼容 标准的制定往往具有一定的滞后性。《YD/T1312无线通信设备 电磁兼容 性要求和测量方法》正是考虑到以上问题,不仅对现有的产品族标准进行了研究,而且总结提取了无线通信设备的共性,紧密结合国内外最新的 电磁兼容 发展情况,综合制定了通信领域 电磁兼容 通用标准。YD/T1312发布后,当最新的无线通信产品没有现行的标准作为电磁兼容检测的依据时,则可以按照YD/T1312的通用要求进行检测,从而使得各类 无线通信 产品的电磁兼容检测均做到了有标可依。由于YD/T 1312广泛的适用性和积极的创新性及超前性,目前已经成为起草其他相关标准的重要参考。
[电源管理]
一种新的短波跳频通信网位同步方法及其实现
     跳频通信是一种载频按照一定规律变化的多频率移频键控,具有抗干扰性强、保密性好、频带利用率高的特点,易于兼容,便于构成多种通信网。正是由于这些特点,跳频通信系统在现代军事和交通运输通信中得到了广泛的应用。国外近几年推出了大量跳频电台的产品,如美国HAKRIS公司的中速跳频电台RF-5010、美国Rockwell公司的SINGARS-U超快速跳频电台等。这些电台均采用微处理机控制,功能齐全,轻便灵活,操作简单。   利用跳频图案的良好正交性和随机性,可以在一个宽的频带内容纳多个跳频通信系统同时工作,将多个电台组成通信网络,完成专向通信或网络通信,达到频谱资源共享的目的,从
[应用]
stm32f407驱动步进电机(用限位传感器限制位置)
一、硬件 1.硬件准备:57步进电机(型号57CM18),驱动器TB6600,开发板STM32F407ZGT6, SN-4NDO限位金属传感器,检测面在9mm左右。 2.连线 驱动器右边分有两个区域 Signal:用于驱动器与开发板连接,进行电机的控制驱动。 ENA接口:当此信号有效时,驱动器将自动切断电机绕组电流,使电机处于自由状态(无保持转矩)。当此信号不连接时默认为无效状态,这时电机绕组通以电流,可正常工作。 DIR接口:控制电机旋转方向,信号有效时电机顺时针旋转,无效时逆时针旋转。 PUL接口:步进电机驱动器把控制器发出的脉冲信号转化为步进电机的角位移,驱动器每接受一个脉冲信号 PUL,就驱动步进电机
[单片机]
<font color='red'>stm32f407</font>驱动步进电机(用限位传感器限制位置)
Linux环境下串口通信的设计方法和步骤
引言 数据采集系统中由于单片机侧重于控制,数据处理能力较弱,对采集的数据进行运算处理比较繁琐,如果通过串口与上位机通信,利用上位机强大的数据处理能力和友好的控制界面对数据进行处理和显示则可以提高设计效率。串口通信以其简单的硬件连接,成熟的通信协议,成为上下位机之间通信的首选。移植了Linux操作系统的s3c2440可以在Linux环境下操作串口,降低了串口操作的难度,可以使开发者集中精力开发大规模的应用程序,而不必在操作底层设计上耗费时间。 1 硬件连接 s3c2440是三星公司生产的基于ARM9核的处理器,采用3.3V 电压 供电;C8051Fxxx系列单片机是美国CYGNAL公司推出的与8051兼容的高性能高速
[单片机]
Linux环境下串口<font color='red'>通信</font>的设计<font color='red'>方法</font>和步骤
STM32F407使用MFRC522射频卡调试及程序移植成功
本学期感测技术选修课需要做一个作品出来,用到了MFRC522射频卡模块,经历一个星期的调试,终于可以正常使用并寻卡成功了了。 成功的把C51的程序移植到了STM32上面。 现在分享一下调试过程 1、操作环境 我所使用的是STM32F407的开发板,使用STM32CubeMX配置初始代码。 MFRC522使用软件模拟SPI通信 2、关于引脚的配置 淘宝买来的模块,店家都会送资料 ,也可以点下面连接保存至网盘 链接:http://pan.baidu.com/s/1boMyMlx 1、SPI通信引脚 NSS(SDA) --------- 片选信号 SCK --------- 时钟信号 MO
[单片机]
<font color='red'>STM32F407</font>使用MFRC522射频卡调试及程序移植成功
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
    做任何事情之前,一定要想好目标。没有目标的事情是做不好的,也做不成。我的目标就是学习ARM开发,当然是深入的学习。目标如下 :1、学习A ...
  • 学习ARM开发(2)
    天是星期天,刚好在家里休息。又是学习ARM的大好时机了。早上起得很早,因为都想着怎么样搞好这个ARM开发环境,总是心急的。搞得睡觉,也睡 ...
  • 学习ARM开发(4)
    已经把CPU大体架构学会了,当然我之前已经学习过80X86的结构,所以对于像RISC的计算机,也能想像到它是什么样的东西。如果没有学习过《微机 ...
  • 学习ARM开发(6)
  • 学习ARM开发(7)
  • 学习ARM开发(8)
  • 学习ARM开发(9)
何立民专栏 单片机及嵌入式宝典

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

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