STM32——I2C通信外设

软件只需要CR控制寄存器,DR数据寄存器,为实时监控状态,软件需要读取SR状态寄存器,好比:开车时CR是控制汽车方向,踩油门等,SR是仪表盘。

由于I2C是半双工,因此发送和接收数据都是在移位寄存器和DATA 寄存器中进行,发送数据时,在数据向移位寄存器转移时,新的数据就会进入到DATA寄存器中。

接收数据时先到移位寄存器,之后转移到DATA寄存器

简化如下:由于I2C是高位先行,因此发送数据是左移。

I2C的GPIO为开漏输出模式

此处时钟可以输入也可以输出

  之后是主机发送部分:

首先是10位的帧头,11110+2位地址位+1位读写位,后边是剩余8位地址位

发送数据:数据写入DR中,之后当移位寄存器空时,将数据转入移位寄存器中进行发送,当DR中的一个数据被全部转移到移位寄存器时,就会有新的数据进入到DR中,等待进行下一次转移到移位寄存器中,当接收应答位后,数据就被转移到移位寄存器中

主机接收部分:以当前地址读的形式展示主机接收

起始条件——从机地址+读——应答——接收数据——应答——接收数据——非应答——终止

代码部分,在硬件中不需要用软件配制I2C协议的内容,全由硬件实现

首先是初始化部分,相对比与软件来说,硬件这部分初始化需要增加部分:1、开启I2C和GPIO口的时钟;2、对GPIO口进行设置并为复用开漏输出模式(复用:GPIO控制权交给外设);3、对I2C进行设置;4、开启I2C使能

对MPU6050的配置保留。

时钟速度在100KHz下是标准模式,高低电平时间一致,占空比为1:1;超过100KHz后,进入快速模式,低/高近似=2:1;400KHz最大时钟速度

和软件一致。

之后是写寄存器的代码需要进行替换:

根据上面的主机发送图可得:

先设置起始条件——EV5事件——发送从机地址并应答——EV6(发送数据的代码)——发送寄存器地址并应答——EV8——发送数据(一个字节)——EV8_2——停止条件

为代码更加简便,增加了一个等待函数,当超时时就不再等待事件的发生,防止卡死

之后是主机接收的过程:

起始条件——EV5——发送从机地址并应答——EV6(发送数据的代码)——发送寄存器地址并应答——EV8_2/8——重新发送起始条件——EV5——发送从机地址并应答——EV6(接收数据的代码)—ACK=0失能(只读取一个字节时)——停止条件——EV7——接收数据——ACK=1使能(默认是1使能)——返回数据

实验结果与上一篇一致

STM32F103中,I2C通信与定时器中断之间没有直接的关联。I2C通信是通过I2C外设进行的,而定时器中断是用于定时器功能的。在使用I2C通信时,并不需要使用定时器中断。 如果你想要在I2C通信中使用定时器,你可以使用定时器来生成时钟信号,以控制I2C通信的时序。在这种情况下,你需要配置定时器的相关参数,如预分频器、自动重装载值等。然后,你可以在定时器中断服务函数中编写相关的代码来控制I2C通信的时序。 具体的步骤如下: 1. 打开定时器时钟,例如TIM6,使用RCC_APB1PeriphClockCmd函数。 2. 初始化定时器,配置相关参数,如预分频器、自动重装载值等,使用TIM_TimeBaseInit函数。 3. 配置定时器中断源,使定时器溢出时产生定时器中断,使用TIM_ITConfig函数。 4. 配置定时器中断优先级,使用NVIC_Init函数。 5. 编写定时器中断服务函数,例如TIM6_IRQHandler函数,在其中编写控制I2C通信时序的代码。 6. 使能定时器,使用TIM_Cmd函数。 需要注意的是,具体的配置参数和代码实现可能会根据你的具体需求和硬件平台而有所不同。你可以参考STM32F103的相关文档和例程来进行具体的配置和编程。 希望以上信息对你有帮助! #### 引用[.reference_title] - *1* *2* [stm32f103——基本定时器与定时器中断](https://blog.csdn.net/qq_39577221/article/details/125360536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32F103通用定时器介绍(中断实验)](https://blog.csdn.net/weixin_46251230/article/details/126761485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hssfscv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值