
板子早就收到了,但未能及时上传笔记,最近几天学习了STM32F0的I2C硬件编程,整理了一个小的关于I2C结构体初始化中时间寄存器的配置的内容。给大家共享一下,共同学习。- ?4 |: P I' x8 A. V 今天先发一部分使用方法,整理好后给大家发一个完整的程序。 一、问题 在使用STM32F0xx处理器操纵硬件I2C时,在初始化GPIO后要进行I2C结构体初始化,其结构体成员为: uint32_t I2C_Ack //允许或禁止应答2 o' u5 y9 C" |+ d- E uint32_t I2C_AcknowledgedAddress //配置7位或10位地址 uint32_t I2C_AnalogFilter //允许或禁止模拟滤波器 uint32_t I2C_DigitalFilter //允许或禁止7 f1 V- o w6 u: ]" L uint32_t I2C_Mode //设置工作模式 uint32_t I2C_OwnAddress1 //设置自身器件地址' ~8 R7 b! O7 r- B p. X4 E: U uint32_t I2C_Timing //设置I2C时间寄存器的值' W8 k2 m, f' r* f 其中时间寄存器(I2C_TIMINGR_REGISTER)的值的设置需要参考ST公司的配置工具(I2C_Timing_Config_Tool)。 经过查阅资料,本文说明此工具的使用。 二、工具使用 ST公司提供了I2C时间寄存器配置工具帮助我们进行相应的配置,工具使用EXCEL结合VBA写成。打开后界面如下图1所示。. d3 o$ {7 C5 A- N5 O, Q$ F 图1 I2C时间寄存器配置工具界面! c0 q% S k5 a7 J4 L 具体含义及使用步骤如下: 1、选择器件模式:在“Device Mode”中有主模式(Master)和从模式(Slave)两个选项。 2、配置I2C的速度模式:在“I2C Speed Mode”中有标准模式(Standard mode)、快速模式(Fast mode)和增强快速模式(Fast mode Plus)选项。 (1)标准模式:最大时钟频率100KHz。 (2)快速模式:最大时钟频率400KHz。! k+ o% X8 Z/ `6 H* @. r (3)增强快速模式:最大时钟频率1000KHz。 3、如果在主模式(Master)下,设置I2C时钟频率(单位为KHz)。0 e* \) V8 d' q7 { 4、设置I2C时钟源频率(I2C Clock Source Frequency)值(单位为KHz)。 5、确定是否启用模拟滤波器(Analog Filter Delay)。 M$ m1 T, @ Y9 Z* Q5 e9 M% j 6、确定是否使用数字滤波器(Coefficient of Digital Filter,不启用数字滤波器此处设置为0;如果启用数字滤波器,应设置为1-15,表示1到15个I2C外设时钟)。- J* p3 v. t& T8 W5 S 7、设置I2C的上升时间(Rise Time)。4 e7 M4 N; O- _, M% W( V 8、设置I2C的下降时间(Fall Time)。9 ]5 b N0 {) `0 v: w. Q9 u7 W 9、单击运行(RUN)按钮。1 S' x8 T; k# @1 m/ N, Y0 [" ? (1)如果时间寄存器计算完成,则会弹出计算完成提示框,可以使用计算的结果来初始化I2C结构体(双击TIMINGR Register Value可以复制计算出来的值)。 (2)如果时间寄存器计算失败,则会弹出计算失败提示框,需要修改参数重新计算。/ I, G+ N* e! Q O: I2 q 三、实例 若要求STMF0xx处理器I2C工作在: (1)主机标准模式 (2)100KHz频率 (3)I2C时钟频率32000KHz (4)使用模拟滤波器* z& C- l' D7 ]# E (5)不使用数字滤波器% R) q1 p8 Q, ]. F, l0 } (6)上升时间100ns1 [4 D! {4 Q/ S5 N7 D (7)下降时间10ns (8)采用7为地址 (9)允许应答# r- ?6 T! P9 K% W3 m 则按图1参数输入,点击运行(RUN)按钮,时间寄存器需要设置的值即可计算出来(0x20D22E37)。3 ?9 g( h+ m @/ K3 B 则可以用下面代码初始化I2C结构体变量 /*----------------声明I2C初始化结构体----------------------------------*/2 h) H. X3 a# D c* G I2C_InitTypeDef I2C_InitStructure; /*----------------初始化I2C机构体----------------------------------------*/ I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;3 ` }6 b- \2 C7 }7 h5 K- f I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;2 T% a" w/ p9 H$ C. w$ ~9 M I2C_InitStructure.I2C_DigitalFilter = 0x00;4 K$ N: e6 m7 N4 n; ]) H Y& H I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;" c9 k( ?; b+ v4 w2 `% ?) |: H4 I$ K, e I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_Timing = 0x20D22E37; /*----------------调用 I2C_Init() 函数-------------------------------------*/( w: |% P7 @& A; R. D I2C_Init(I2C1, &I2C_InitStructure); |
RE:【STM32F030开发日志/评测/笔记】+(1)STM32F0处理器I2C时间配置工具使用
继续阅读原创汇总: o( T3 `1 @- Y$ a
STM32F030探索套件开发日志,中文教程,使用问答80篇
! V( c: {" {' ?1 R: D
. g" n7 J% ^1 t" N: S- R- j
知道了,原来个 Excel文件就是那个软件..... o9 A8 h$ p, B1 M- u: F* n
我用的Microsoft Office Excel 版本比较低,一直都弄不出来,还以为就是一个图,0 ]4 S ^8 Y& x, P4 u# r
哎,这就坑了...