历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2018年04月15日 | STM32F407和STM32F051主从I2C通信方法

2018-04-15 来源:eefocus

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;


推荐阅读

史海拾趣

BTCPower公司的发展小趣事

BTCPower公司自成立以来,一直致力于研发高效能、低能耗的电源管理芯片。经过数年的努力,公司成功开发出了一款具有革命性的芯片,能够在保证性能的同时,显著降低电子设备的能耗。这一技术突破迅速吸引了市场的关注,BTCPower的产品开始被广泛应用于智能手机、平板电脑等消费电子产品中,公司因此获得了巨大的商业成功。

Extech公司的发展小趣事

进入新世纪后,Extech公司迎来了新的发展机遇。2000年,公司成为国家第一批863/CIMS系统集成和咨询服务企业,同时也是国家863/CIMS示范应用工程的主流供应商。这一荣誉的获得不仅体现了公司在技术实力和服务能力方面的优势,也为公司未来的发展提供了更广阔的空间。

FLIR公司的发展小趣事

近年来,随着智能化和便携化趋势的兴起,FLIR积极响应市场需求,推出了一系列智能化、便携化的红外热像仪产品。例如,FLIR的I系列和T系列产品就以其小巧轻便、操作简便的特点受到了广大用户的青睐。这些产品不仅具备高性能的红外成像能力,还集成了多种智能化功能,如自动测温、图像分析、报告生成等,极大地提升了用户的使用体验和工作效率。此外,FLIR还推出了适用于智能手机的红外热像仪配件,进一步拓宽了产品的应用领域和市场空间。

Hittite Microwave(ADI)公司的发展小趣事

为了进一步扩大市场份额,FLIR在20世纪80年代末至90年代进行了一系列重要的战略并购。1990年,FLIR收购了美国休斯飞机公司在工业红外成像领域的业务,这一举动极大地增强了其在商业热成像市场的竞争力。随后,FLIR又分别收购了瑞典的Agema公司和波士顿的Inframetrics公司,这两家公司都是红外热像仪领域的佼佼者,拥有丰富的技术积累和市场资源。通过这些并购,FLIR不仅壮大了自身的研发团队和销售网络,还加速了其挺进商用热成像市场的步伐,进一步巩固了其市场领先地位。

HANA Micron公司的发展小趣事

随着线上及线下业务的快速增长,Hama面临着交货时效性的巨大挑战。为了应对这一挑战,公司决定在蒙海姆总部建造一座集仓储、拣选与发货一体的物流中心。该物流中心采用了先进的自动化和人工子系统相结合的设计方案,大大提高了物流运作的效率。新系统的启用使得Hama每天能够处理数以万计的订单,确保了产品的及时交付,进一步提升了客户满意度和品牌影响力。

Custom Components Inc公司的发展小趣事

在CCI的发展历程中,人才培养和团队建设始终是公司发展的重要保障。公司注重员工的个人成长和职业发展,为员工提供多样化的培训和发展机会。

同时,CCI还建立了完善的激励机制和福利制度,激发员工的工作热情和创造力。通过加强团队合作和文化建设等方式,公司营造了一个积极向上、充满活力的工作氛围。这种良好的团队氛围不仅提高了员工的工作效率和满意度,也为公司的持续发展提供了有力的人才保障。

问答坊 | AI 解惑

调试与故障检测

调试与故障检测…

查看全部问答>

我用内嵌TCP/IP协议的GPRS模块进行数据传输,其它命令都是正确的回复,但是最后一个上网的命令不正确

大家好,希望能帮帮我。我用西门子公司的MC55进行GPRS中的TCP/IP数据传输,用51单片机控制,现在TCP/IP设置的命令都回复的OK,但是最后一条连网命令不正确,经查证发现连网的命令是发送正确的,就是连不上网,是怎么回事啊?…

查看全部问答>

DS18B20 初始化失败 纠结中

为了单独测试这个DS18B20的初始化,弄了个最小化的电路如下: DS18B20接P1.7,LED接P1.0 如果初始化成功,则LED应该点亮. 程序: #include sbit DQ = P1^7; sbit LED = P1^0; void delay2us(unsigned char t) {      whil ...…

查看全部问答>

说说大家WCE的产品

交流下大家的Windows CE产品,看看目前市场上用到的Windows CE产品有哪些? 注:标明Windows CE版本号、产品名及简要介绍、工资。 先说我自己的: Windows CE 5.0、Windows CE 6.0 终端——类似电脑,主要用户行业的窗口柜台(如银行、邮政 ...…

查看全部问答>

UC/OS-II 无法屏蔽串口中断问题 1138开发板

用的是已经移植好的UCOS工程模板,在调用 OS_ENTER_CRITICAL();  进入临界段执行后,当串口发出中断时,依然转到串口中断服务函数。 难道不能屏蔽硬件中断?   OS_ENTER_CRITICAL();        / ...…

查看全部问答>

请教:支持2440,nand flash的Jtag的图形下载软件?

H-jtag对nand flash的下载支持的好像不够好! SJF又不是很好用,请问那里有更好的下载工具捏? …

查看全部问答>

WINCE触摸屏右键无法出现

我的屏幕的分辨率为800*480.那么对应的屏幕坐标为(3200,1920)?。。我现在出现的问题是,平常的操作基本正常,但是无法出现右键,AYGSHELL组件也已经选了。是不是抖动问题?但是我在DdsiTouchPanelGetPoint中保存第一次按下时的坐标,在弹起之前 ...…

查看全部问答>

STM32AD采样信号超过3.3V会怎么样

                                 如题,这样会不会造成AD损坏?…

查看全部问答>

2011大赛B题基于自由摆的平板控制系统 单摆 参考论文

本帖最后由 paulhyde 于 2014-9-15 03:37 编辑 今年大赛做B题基于自由摆的平板控制系统的参赛者有时间可以而看看,这个论文感觉就是我们试题B的出处!由于文件太大。。采用分卷压缩的!将3个附件同时下载下来即可解压!    …

查看全部问答>