Reference Manual中的第25章介绍I2C接口,工作于主机模式时的设置过程如下:
原文:
The following is the required sequence in master mode.
● Program the peripheral input clock in I2C_CR2 Register in order to generate correct
timings
● Configure the clock control registers
● Configure the rise time register
● Program the I2C_CR1 register to enable the peripheral
● Set the START bit in the I2C_CR1 register to generate a Start condition
The peripheral input clock frequency must be at least:
● 2 MHz in Standard mode
● 4 MHz in Fast mode
前面4个过程是在一个初始化函数中完成的,原型是:
void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);
第一步就是要对外设输入时钟编程,也就是I2C_CR2寄存中的FREQ[5:0]。
第二步配置时钟控制寄存器I2C_CCR。注意:要在禁止I2C外设后再配置此寄存器,配置完重新使能。
第三步配置上升时间最大值,在I2C_TRISE寄存中配置。
/* Set Maximum Rise Time for fast mode */
I2Cx->TRISE = (uint16_t)(((freqrange * (uint16_t)300) / (uint16_t)1000) + (uint16_t)1);
第四步在I2C_CR1寄存器中使能I2C外设,还包括应答位、模式等的设置。
初始化函数中还有一个OAR1寄存器的配置,7位地址模式和从机地址设置。
/* Set I2Cx Own Address1 and acknowledged address */
I2Cx->OAR1 = (I2C_InitStruct->I2C_AcknowledgedAddress |
I2C_InitStruct->I2C_OwnAddress1);
只要给I2C_InitStruct结构体中成员赋上合适的值,然后调用初始化函数即可完成。I2C寄存器总共有下面几种:
控制寄存器(2个)、Own address 寄存器(2个)、数据寄存器、状态寄存器(2个)、时钟控制寄存器和上升时间寄存器。
文章评论(0条评论)
登录后参与讨论