板子早就收到了,但未能及时上传笔记,最近几天学习了STM32F0的I2C硬件编程,整理了一个小的关于I2C结构体初始化中时间寄存器的配置的内容。给大家共享一下,共同学习。 今天先发一部分使用方法,整理好后给大家发一个完整的程序。/ i; f v* T4 r/ O+ ^ 一、问题 在使用STM32F0xx处理器操纵硬件I2C时,在初始化GPIO后要进行I2C结构体初始化,其结构体成员为: uint32_t I2C_Ack //允许或禁止应答 uint32_t I2C_AcknowledgedAddress //配置7位或10位地址8 B$ S4 g5 L$ \ V9 R uint32_t I2C_AnalogFilter //允许或禁止模拟滤波器 @$ T- d' ~3 z q5 l( Q uint32_t I2C_DigitalFilter //允许或禁止 uint32_t I2C_Mode //设置工作模式 uint32_t I2C_OwnAddress1 //设置自身器件地址6 I. j. ]- _: a3 \ uint32_t I2C_Timing //设置I2C时间寄存器的值& ?/ N- z4 w& p9 H& V 其中时间寄存器(I2C_TIMINGR_REGISTER)的值的设置需要参考ST公司的配置工具(I2C_Timing_Config_Tool)。/ t; u( O- h: o2 H) K 经过查阅资料,本文说明此工具的使用。 二、工具使用 ST公司提供了I2C时间寄存器配置工具帮助我们进行相应的配置,工具使用EXCEL结合VBA写成。打开后界面如下图1所示。 " a0 I% A' E: X4 Z! U# _ 图1 I2C时间寄存器配置工具界面 具体含义及使用步骤如下:1 \) P$ g$ ]& E9 o, f3 g 1、选择器件模式:在“Device Mode”中有主模式(Master)和从模式(Slave)两个选项。% n7 k2 X+ Q% G& h 2、配置I2C的速度模式:在“I2C Speed Mode”中有标准模式(Standard mode)、快速模式(Fast mode)和增强快速模式(Fast mode Plus)选项。+ _- N/ c4 q( b! {& E6 L: R (1)标准模式:最大时钟频率100KHz。 (2)快速模式:最大时钟频率400KHz。 (3)增强快速模式:最大时钟频率1000KHz。. O7 W9 S0 a s6 X3 w 3、如果在主模式(Master)下,设置I2C时钟频率(单位为KHz)。: G5 i# v2 T! }1 X) C1 m2 p) x 4、设置I2C时钟源频率(I2C Clock Source Frequency)值(单位为KHz)。 5、确定是否启用模拟滤波器(Analog Filter Delay)。 6、确定是否使用数字滤波器(Coefficient of Digital Filter,不启用数字滤波器此处设置为0;如果启用数字滤波器,应设置为1-15,表示1到15个I2C外设时钟)。 7、设置I2C的上升时间(Rise Time)。 8、设置I2C的下降时间(Fall Time)。) T% [; F# g3 r2 ^3 A+ i' L! I 9、单击运行(RUN)按钮。- U) w5 @+ v" L5 d (1)如果时间寄存器计算完成,则会弹出计算完成提示框,可以使用计算的结果来初始化I2C结构体(双击TIMINGR Register Value可以复制计算出来的值)。 (2)如果时间寄存器计算失败,则会弹出计算失败提示框,需要修改参数重新计算。0 [. W. F8 c6 W7 E+ i0 N 三、实例 若要求STMF0xx处理器I2C工作在: (1)主机标准模式1 B6 \" T& G9 K+ a (2)100KHz频率 (3)I2C时钟频率32000KHz7 b- a4 W9 [2 x/ P, c3 [8 \ (4)使用模拟滤波器 E' N0 \. u% a( u8 C. f. W' h% \ (5)不使用数字滤波器 x) ^' m Q# e f (6)上升时间100ns7 [1 h1 M. ?$ f (7)下降时间10ns2 Z4 |4 T4 {0 d/ T& G3 e8 w2 P (8)采用7为地址 (9)允许应答: \$ X- M" k) l 则按图1参数输入,点击运行(RUN)按钮,时间寄存器需要设置的值即可计算出来(0x20D22E37)。 则可以用下面代码初始化I2C结构体变量 /*----------------声明I2C初始化结构体----------------------------------*/0 N2 n. S0 w# w2 c) N I2C_InitTypeDef I2C_InitStructure; /*----------------初始化I2C机构体----------------------------------------*/ I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable; I2C_InitStructure.I2C_DigitalFilter = 0x00; i# b2 B# { { R; F I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;4 [8 n+ B$ N7 W) N* n I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_Timing = 0x20D22E37; {7 P; k# e5 {; L. l /*----------------调用 I2C_Init() 函数-------------------------------------*/, C6 G) V+ T9 o! l4 |$ J I2C_Init(I2C1, &I2C_InitStructure); |
STM32固件库分享,超全系列整理
三创电子(Tcreate)-STM32F030核心板代码
STM32F0 ADC(DMA中断)多通道,注释超详细
FreeRTOS在STM32F030上的移植
基于STM32移植而引发的疑问经验分享
分享STM32F051中文参考手册(重制书签版)
游名:STM32F0+Trinamic智能步进驱动芯片TMC5160(最高20A)参考原...
【MCU实战经验】+STM32F030的步进电机加减速
STM32F0的中文技术参考手册(标签处理过)
基于STM32F030硬件SPI经验分享
RE:【STM32F030开发日志/评测/笔记】+(1)STM32F0处理器I2C时间配置工具使用
继续阅读原创汇总:
STM32F030探索套件开发日志,中文教程,使用问答80篇
0 p) M' J& ~# v: T) X: c. z
( h7 d% E o2 f5 [( |" L
知道了,原来个 Excel文件就是那个软件....) G3 k" r2 i! E0 l+ @
我用的Microsoft Office Excel 版本比较低,一直都弄不出来,还以为就是一个图,
哎,这就坑了...