STM32F407和STM32F051主从I2C通信方法

发布者:Whisper123最新更新时间:2021-07-16 来源: eefocus关键字:STM32F407  STM32F051  主从I2C  通信方法 手机看文章 扫描二维码
随时随地手机看文章

简介:本文章主要介绍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("transfern");


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 in2n");


Recv_flag = 1;


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

上一篇:关于STM32的以太网问题集锦
下一篇:基于STM32的多路电压测量设计方案

推荐阅读最新更新时间:2024-11-05 01:12

2. Stm32f407 led闪烁示例
硬件平台: stm32f407ve 软件平台: win10 (OS Name: Microsoft Windows 10 Enterprise OS Version: 10.0.18363 N/A Build 18363) Keil5 5.26.2 HAL库版本: 2.14.0(目前下载的最新的) 实验介绍: 本次是使用hal库进行led闪烁实验。(根据之前建立的模板操作,这里不再建立工程模板) Led闪烁的原理,就是循环的亮和灭,工程模板已经是点亮了led,这个时候,我需要做的就是在循环中不断的点亮和熄灭,而且点亮和熄灭要注意一定的时间间隔,也就
[单片机]
2. <font color='red'>Stm32f407</font> led闪烁示例
在STM32单片机中使用SPI通信方法
  在本教程中,我们将使用 STM32F103C8 的 Blue Pill 板替换一个 Arduino 板,并将使用 SPI 总线与 Arduino 板进行通信。在这个STM32 SPI 示例中,我们将使用Arduino UNO作为 Slave,STM32F103C8 作为 Master,两个16X2 LCD 显示器分别连接在一起。两个电位器还与STM32(PA0)和Arduino(A0)相连,通过改变电位器来确定主机到从机和从机到主机的发送值(0到255)。   STM32F103C8中的SPI   比较 Arduino 和 STM32F103C8 Blue Pill 板中的 SPI 总线,STM32 有2 条 SPI 总线
[单片机]
在STM32单片机中使用SPI<font color='red'>通信</font>的<font color='red'>方法</font>
基于DSP的低频无线通信系统的设计方法
  低频感应通信是将待传输的数据经低频载波调制、信号放大、功率放大后,在发射器产生一定的交变电流,利用交变的电流产生交变的磁场,交变的磁场产生的电场,从而在接收器中产生感应电动势,经滤波、解调、解码等信号处理后,就可在接收端准确接收发送的信息,完成通信过程。因其利用电磁感应原理来实现通信,故称其为感应通信,当距离短时,感应通信比较容易实现。   1 低频感应通信理论   感应通信利用发射线圈中的交变电流产生变化磁场,接收线圈中感应出电动势后,再经过一系列的信号处理过程恢复发送信号,从而实现了通信的目的。   严格的感应通信理论是建立在麦克斯韦方程组的基础上。麦克斯韦方程组是在对宏观电磁现象的实验规律进行分析总结的基础上,经
[嵌入式]
STM32串口通信printf重定向方法
在源程序中加入如下代码,包含“stdio.h”。 默认使用USART1,确认串口已经初始化成功、 #pragma import(__use_no_semihosting) _sys_exit(int x) { x = x; } struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is r
[单片机]
STM32与FPGA通信写数据出错问题解决方法
项目中需要使用STM32和FPGA通信,使用的是地址线和数据线,在FPGA中根据STM32的读写模式A的时序完成写入和读取。之前的PCB设计中只使用了8跟数据线和8根地址线,调试过程中没有发现什么问题,在现在的PCB中使用了8根地址线和16根数据线,数据宽度也改成了16位,刚开始是读取数据不正确,后来发现了问题,STM32在16位数据宽度下有个内外地址映射的问题,只需要把FPGA中的设定的地址乘以2在STM32中访问就可以了,但是在写操作的时候会出现写当前地址的时候把后面的地址写成0的情况,比如说我给FPGA中定义的偏移地址0x01写一个16位数据,按照地址映射,在STM32中我把地址写入0x02,。实际测试发现这个地址上的数据是
[单片机]
STM32F407学习笔记——GPIO_按键控制LED亮灭
#include stm32f4xx.h #include stm32f4xx_conf.h #include delay.h GPIO_TypeDef* io_led=GPIOC;//定义一个指向结构体GPIO_TypeDef的io_led const u16 pin_led=GPIO_Pin_1;//引脚 GPIO_TypeDef* io_key=GPIOC; const u16 pin_key=GPIO_Pin_0; void Led_Init() { GPIO_InitTypeDef GPIO_init_l;//用于初始化的结构体 RCC_AHB1PeriphClockCmd(RCC_AHB1Per
[单片机]
STM32F407学习笔记二(GPIO)
从上文可以看到,在系统启动过程中会对系统时钟进行一次配置,有了时钟源以后,我们来看简单的GPIO配置:对于GPIO,使用寄存器进行配置时:我们先来看一个例子: #include stm32f4xx.h uint32_t Gb_TimingDelay; void Delay(uint32_t nTime); void main() { SysTick_Config(SystemCoreClock/1000);//1ms based time RCC- AHB1ENR |= RCC_AHB1ENR_GPIODEN; //ENABLE GPIOD RCC- APB2ENR |= RCC_APB2ENR_SYSCFGEN
[单片机]
<font color='red'>STM32F407</font>学习笔记二(GPIO)
单片机与PC机串行通信的实现方法
  随着单片机和微机技术的不断发展,特别是网络技术在测控领域的广泛应用,由PC机和多台单片机构成的多机网络测控系统已成为单片机技术发展的一个方向。它结合了单片机在实时数据采集和微机对图形处理、显示的优点。同时,windows环境下后台微机在数据库管理上具有明显的优势。二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。本文主要介绍PC机与51系列单片机实现通信的一般方法和步骤。   硬件结构和单片机的通1S程序设计   单片机和PC机的串行通信一般采用RS-232、RS-422或B3-485总线标准接口,也有采用非标准的20nnJL电流环的。为保证通信的可靠,在
[单片机]
单片机与PC机串行<font color='red'>通信</font>的实现<font color='red'>方法</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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