|
板子早就收到了,但未能及时上传笔记,最近几天学习了STM32F0的I2C硬件编程,整理了一个小的关于I2C结构体初始化中时间寄存器的配置的内容。给大家共享一下,共同学习。' N2 y) L% ?+ U9 C" K' a; \- q7 C5 @ 今天先发一部分使用方法,整理好后给大家发一个完整的程序。 一、问题( P& N3 q) ~% m1 n2 d4 r0 A 在使用STM32F0xx处理器操纵硬件I2C时,在初始化GPIO后要进行I2C结构体初始化,其结构体成员为: uint32_t I2C_Ack //允许或禁止应答 uint32_t I2C_AcknowledgedAddress //配置7位或10位地址 uint32_t I2C_AnalogFilter //允许或禁止模拟滤波器2 M8 y4 s2 b+ t+ e, T uint32_t I2C_DigitalFilter //允许或禁止) P( u% R" }' u. u- k: {0 h uint32_t I2C_Mode //设置工作模式 uint32_t I2C_OwnAddress1 //设置自身器件地址4 g L3 c+ ]- W7 F- A# [4 ?; t uint32_t I2C_Timing //设置I2C时间寄存器的值/ H$ C M; \7 c" q 其中时间寄存器(I2C_TIMINGR_REGISTER)的值的设置需要参考ST公司的配置工具(I2C_Timing_Config_Tool)。3 [- B' i; l" w$ }) I. h4 [ k 经过查阅资料,本文说明此工具的使用。( e2 ?/ U( o M$ j 二、工具使用 ST公司提供了I2C时间寄存器配置工具帮助我们进行相应的配置,工具使用EXCEL结合VBA写成。打开后界面如下图1所示。 图1 I2C时间寄存器配置工具界面 具体含义及使用步骤如下:. G9 l, A0 f0 \- B 1、选择器件模式:在“Device Mode”中有主模式(Master)和从模式(Slave)两个选项。 2、配置I2C的速度模式:在“I2C Speed Mode”中有标准模式(Standard mode)、快速模式(Fast mode)和增强快速模式(Fast mode Plus)选项。" X: F+ c v0 j2 Z! S% i1 b (1)标准模式:最大时钟频率100KHz。3 M/ v; [" S4 R! F b; s- a (2)快速模式:最大时钟频率400KHz。, G8 i4 g! h1 t, v4 w (3)增强快速模式:最大时钟频率1000KHz。. f2 n- @* n* X. X9 {0 t9 B 3、如果在主模式(Master)下,设置I2C时钟频率(单位为KHz)。 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)。6 Y: w9 ] L8 z7 m o2 T. k0 K 8、设置I2C的下降时间(Fall Time)。& _2 N0 q) N6 B: c2 h4 X+ }* u 9、单击运行(RUN)按钮。- D) Q n3 s$ | (1)如果时间寄存器计算完成,则会弹出计算完成提示框,可以使用计算的结果来初始化I2C结构体(双击TIMINGR Register Value可以复制计算出来的值)。1 H& @/ r4 a- Q" O( G: g (2)如果时间寄存器计算失败,则会弹出计算失败提示框,需要修改参数重新计算。 三、实例/ E# k: i& {: ]3 Z- x5 ^ B9 W 若要求STMF0xx处理器I2C工作在:2 V2 N6 n" e2 s* D" h' W3 f (1)主机标准模式 (2)100KHz频率: }6 y% V& o+ p% y" ~ (3)I2C时钟频率32000KHz (4)使用模拟滤波器/ o( G$ B n% j1 j9 F8 ] (5)不使用数字滤波器 (6)上升时间100ns (7)下降时间10ns, P% J! [+ ^2 h3 b6 i( | (8)采用7为地址 (9)允许应答9 |% G2 K$ N3 P- f3 w! V# Q5 h# y 则按图1参数输入,点击运行(RUN)按钮,时间寄存器需要设置的值即可计算出来(0x20D22E37)。 则可以用下面代码初始化I2C结构体变量" C2 F) Q0 p. e4 H4 U8 G8 d5 X* U /*----------------声明I2C初始化结构体----------------------------------*/ I2C_InitTypeDef I2C_InitStructure; /*----------------初始化I2C机构体----------------------------------------*/ I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;( C1 j# R6 }+ ~6 B2 ?5 N I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable; F+ {# U8 s' L$ w I2C_InitStructure.I2C_DigitalFilter = 0x00;6 c( s8 h1 `3 } I2C_InitStructure.I2C_OwnAddress1 = 0x00;6 n5 b8 b% u' G I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_Timing = 0x20D22E37;! } R; s! s3 @5 s /*----------------调用 I2C_Init() 函数-------------------------------------*/! W' P) Q2 K: k% O7 _8 Z$ j' I9 z I2C_Init(I2C1, &I2C_InitStructure); |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
小白也能明白的STM32的低功耗与唤醒机制
STM32系统中2种数据掉电保护的方法
分享STM32F051中文参考手册(重制书签版)
AI工具训练营-用ChatGPT解决HID Keyboard实现的问题
STM32固件库分享,超全系列整理
STM32小白入门指南:从基础到OTA实现方案
STM32超详细学习笔记
新手必看!STM32单片机应该怎么学?
如果你解决了这些问题,就可以直接学STM32
微信公众号
手机版
RE:【STM32F030开发日志/评测/笔记】+(1)STM32F0处理器I2C时间配置工具使用
继续阅读原创汇总:- `# D( O1 S; b, I
STM32F030探索套件开发日志,中文教程,使用问答80篇
e& W0 G3 h: B6 N
# X, D2 J& B/ y0 Z! z
. X. E; J/ @7 w# J# p
知道了,原来个 Excel文件就是那个软件..../ d6 p# T% v; u X* K& @, x
我用的Microsoft Office Excel 版本比较低,一直都弄不出来,还以为就是一个图,
哎,这就坑了...