STM32 I2C配置

发布者:知音学友最新更新时间:2016-10-17 来源: eefocus关键字:STM32  I2C配置 手机看文章 扫描二维码
随时随地手机看文章
首先配置 I2C

1. 通过 APB 复位 I2C, 使能 I2C 时钟

2. 使能 GPIO 时钟, 配置 GPIO 在 AF OD 模式

3. 使能 I2C ( PE="1")

4. 设置速度参数 FREQ CCR F/S DUTY TRISE

A : CR2.FREQR = 期望的I2C时钟, 一般设置为最大的时钟 36 MHz

确定了 Tck = 1 / FREQ -- 类似于 CANBus 的时间片 Tq

B : PE="0", 设置适当的 CCR F/S DUTY 以及 TRISE, PE="1"

标准模式 Tlow : Thigh = 1 : 1

快速模式 Tlow : Thigh = 2 : 1 ( DUTY="0")

快速模式 Tlow : Thigh = 16 : 9 ( DUTY="1")

以上类似于 CANBus 的 Tseg1, Tseg2

设置 CCR 决定了时钟高低占用的 Tck 个数, 同时确定了时钟的Tbus

标准模式 Tbus = 2 Tck * CCR

快速模式 Tbus = 3 Tck * CCR

快速模式 Tbus = 25 Tck * CCR

首先设置 Tck, 然后根据期望的 TBus 设置 CCR F/S DUTY

假设 Tck = 125ns ( FREQ = 8 Mhz), 期望 100 khz Tbus="10us", 上升时间 Tr = 1000 ns

采用标准模式 F/S = 0 : CCR = Tbus / 2 / Tck = 10 000 / (1+1) / 125 = 40 = 0x28

TRISE = ( Tr / Tck ) + 1 = ( 1000 / 125 ) + 1 = 0x09

5. 配置 I2C 模式 : CR1 = ( ACK="1", SMBUS="0", PE="1" )

现在可以正常通讯了

1 发送开始位 ( BUSY = not ( SDA and SCL) ) 只有BUSY = 0 时, 可以发送开始位

A 首先等到 SR2.Busy = 0 ( 总线空闲)

B. 产生开始位(自动切换到主机模式) 设置 CR1.START = 1 后,

C 等待 SR1.SB = 1 (开始位已经发送) -- 通过写入 DR 清除, 或者 PE="0" 清除 SB 位

SR2.BUSY=1 (总线不在空闲)

SR2.MSL=1 (已经切换到主机模式)

2. 发送地址 ( Addr<<1 or R/W) ( 7位地址模式)

首先清除 AF ( Ack Fail ) 然后设置 DR = ( Addr<<1 or R/W) 然后等待

1.SR1.AF = 1 -- 没有从设备响应

2. SR1.ADDR = 1 -- 从设备响应

首先读取 SR1 : ADDR, TXE = 1 ( 发送地址时, TXE不会设置为 1 ?)

然后读取 SR2 : BUSY MSL TRA = 1

关键字:STM32  I2C配置 引用地址:STM32 I2C配置

上一篇:在MDK开发环境下的STM32工程结构
下一篇:STM32端口时钟

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

打造新一代智能电子产品 ST正式加入ARM mbed项目
近日,ARM®与意法半导体(STMicroelectronics, 以下简称ST) 共同宣布,ST已正式加入ARM mbed™项目。该项合作将允许开发者在使用ST基于ARM Cortex®-M系列处理器STM32微控制器系列产品进行开发的同时,自由获取mbed软件、开发工具及在线合作平台,帮助他们实现打造新一代智能电子产品的愿景。 ARM mbed是一项专为支持物联网发展、满足新一代专业开发者需求而设立的产业合作项目。它提供免费开发工具与基础开源软硬件元件,帮助迅速开发基于ARM架构的创新设备。与此同时,该项目能将连接器、传感器与云端服务软件组件及工具更轻松地加以整合,为开发商和合作伙伴打造一个动态的、合作的生态系统。 S
[单片机]
STM32_按键中断
*************************************************************************************************************************************** 开发板 :奋斗STM32 CPU :STM32F103 开发环境:keil uVsion4 *****************************************************************************************************************************
[单片机]
STM32_按键中断
如何采用STM32单片机读取可变长度数据到内存
首先要解决DMA怎么知道要接收的数据何时开始,何时结束的问题。而且每次传输完数据,要改变下一次数据长度。 如果把DMA设成循环模式肯定是不行的,所以把DMA设置成正常模式。 STM32的串口有监测总线是否处于空闲的功能,我们可以使用这个功能,当数据传输完总线变成空闲状态时产生中断,来对收到的数据进行处理。因此整个过程就变成:当一堆数据开始传输,DMA默默地把数据搬运到内存中,当这堆数据传输完成,总线变成空闲状态时,马上产生中断,在中断服务程序中去做相应处理。 初始化程序: #defineDMA_Rec_Len10//数据缓冲区大小 u8value[DMA_Rec_Len]; voiduart_init_DMA_IN(u
[单片机]
如何采用<font color='red'>STM32</font>单片机读取可变长度数据到内存
STM32菜鸟成长记录---系统滴答定时器(systick)应用
1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。滴答中断?这里来简单地解释一下。操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。只要不把它在S
[单片机]
<font color='red'>STM32</font>菜鸟成长记录---系统滴答定时器(systick)应用
初学stm32-库函数开发步骤及总结
一、外设常具备的几类寄存器 控制寄存器xxx_CR (Control/Configuration Register): 用来配置、控制响应外设的工作方式,如GPIOx_CRL、AFIO_EXTICR1~AFIO_EXTICR4。 数据寄存器xxx_DR (Data Register) : 存储量外设进行输入输出的数据,如GPIOx_IDR、GPIOx_ODR、USART_DR等。 状态寄存器xxx_SR(Status Register): 实时的更新存储着外设的当前运行状态,主要是一些标志位,如USART_SR、ADC_SR等。 二、控制外设的常见操作 设置工作模式、使能外设等----- 常在初始化外设时完成,调用
[单片机]
初学stm32-库函数开发步骤及总结
STM32 NRF24L01实现无线传输
前言 STM32下NRF24L01实现无线传输 一、原理图 1.STM32F103C8T6 2.NRF24L01 NRF24L01是 nordic 的无线通信芯片,它具有以下特点: 1) 2.4G 全球开放的 ISM 频段(2.400 - 2.4835GHz),免许可证使用; 2)最高工作速率 2Mbps,高校的 GFSK 调制,抗干扰能力强; 3) 125 个可选的频道,满足多点通信和调频通信的需要; 4)内置 CRC 检错和点对多点的通信地址控制; 5)低工作电压(1.9~3.6V),待机模式下状态为 26uA;掉电模式下为 900nA; 6)可设置自动应答,确保数据可靠传输; 7)工作于EnhancedSho
[单片机]
<font color='red'>STM32</font> NRF24L01实现无线传输
stm32独立看门狗时间设置
//prer:分频数:0~7(只有低 3 位有效!) rlr:自动重装载值,0~0XFFF. //分频因子=4*2^prer.但最大值只能是 256! //rlr:重装载寄存器值:低 11 位有效 //时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms). void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护 IWDG_SetPrescaler(prer); //设置 IWDG 分频系数 IWDG_SetReload(rlr); //设置 IWDG 装载值 IWDG_Reload
[单片机]
STM32 V3.4库函数使用建立工程方法
清晰地记得刚从51单片机过度到STM32,那种一头雾水的感觉。使用的STM32开发板是非常不适合初学者使用的开发板,它是硬件看上去华丽的神舟开发板。在这里我不评论神舟开发板如何如何,如果你是初学者,建议你不要使用神舟开发板。 拿到神舟开发板的教程,坑爹啊,如何使用STM32库的说明都没有,这对初学者也太不公平了吧。鄙人一个STM32菜鸟在网上花了半天时间才弄明白如何使用这个库,如何建立工程。今天分享我当初是如何使用STM32库文件建立工程的,非常适合初学者。 少废话,上图:
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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