人家都说,写驱动简单,一般网上都有参考程序,或者官网有demo,可是要是看不懂例程代码,怎么办?确实也没什么好办法,只能硬着头皮,自己花时间研究研究喽。
一般看懂代码最起码知道其中的原理,才能推测出每一行代码的作用。今天要写的是I2C作为从机的硬件实现,原理在我上一篇日志中基本上讲得非常清楚了。今天直接上代码。
/*****************首先三个函数为初始化函数****************************/
/*!
* @brief 配置I2C1的GPIO
* @param none
* @return NONE
* @note PB6-SCL,PB7-SDA
* @note 注意函数中的 GPIO_PinSource6 与 GPIO_Pin_6 不是同一个宏定义,
*/
void I2C1_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); //!SR1 &= 0x00FF; //!<清除错误标志
}
}
/*!
* @brief I2C1接收和发送中断
* @param none
* @return NONE
* @note PB6-SCL,PB7-SDA I2C1_EV_IRQHandler
* @note 作为从机的I2C中断处理函数
* @note 这里只涉及到五种事件
*/
void I2C1_EV_IRQHandler(void)
{
switch (I2C_GetLastEvent(I2C1)){//!<获取I2C事件
/*从机发送中断*/
case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED: //!
/********************接下来是中断处理函数**************************/
/*!
* @brief I2C1错误中断
* @param none
* @return NONE
* @note PB6-SCL,PB7-SDA
*/
void I2C1_ER_IRQHandler(void)
{
if ((I2C_ReadRegister(I2C1, I2C_Register_SR1) & 0xFF00) != 0x00){ //!<读状态寄存器,获取I2C错误
I2C1->SR1 &= 0x00FF; //!<清除错误标志
}
}
/*!
* @brief I2C1接收和发送中断
* @param none
* @return NONE
* @note PB6-SCL,PB7-SDA I2C1_EV_IRQHandler
* @note 作为从机的I2C中断处理函数
* @note 这里只涉及到五种事件
*/
void I2C1_EV_IRQHandler(void)
{
switch (I2C_GetLastEvent(I2C1)){//!<获取I2C事件
/*从机发送中断*/
case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED: //! I2C_SendData(I2C1, data[num++]); //!<向主机发送数据 I2C_ITConfig(I2C1, I2C_IT_BUF , ENABLE); //!<做一个使能操作 break; case I2C_EVENT_SLAVE_BYTE_TRANSMITTING: //! case I2C_EVENT_SLAVE_BYTE_TRANSMITTED: //!<并且检测到主机发送过来的ACK后产生中断 I2C_SendData(I2C1, data[num++]); //!<继续向主机发送数据 break; /*从机接收中断*/ case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED: //! num= 0; //!<发送字节数清零 break; case I2C_EVENT_SLAVE_BYTE_RECEIVED: //! case (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_SR1_BTF): num = I2C_ReceiveData(I2C1); break; case I2C_EVENT_SLAVE_STOP_DETECTED: //! I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF); I2C_Cmd(I2C1, ENABLE); num= 0; break; default: break; } }
上一篇:STM32L151 I2C从机实现
下一篇:STM32之I2C例程(24C02)
推荐阅读最新更新时间:2024-03-16 16:18
设计资源 培训 开发板 精华推荐
- 了解ADI电网管理、能源计量方案,答题赢Kindle、《新概念模拟电路》【世健的ADI之路主题游 能源站】
- TI E2E™ 中文社区8周年,8本技术合集送给热爱技术的你!
- 任选下载有礼|《新概念模拟电路》全五册合集/《ADI 参考电路合集》
- 有奖直播:安森美光伏和储能产品介绍
- 阅读 TI工业应用方案(电器、电力传输)精彩专题,挑战你的记忆力!好礼相送
- 下载有礼|是德科技电子书 《通过了解测试精度的基础知识, 提高良率并降低风险》,不做“差不多先生”
- 创通联达高通 IOT 平台解决方案及成功案例|报名直播赢【蓝牙耳机、音箱、京东卡】等好礼
- 一起哇:基于国产芯、便携烙铁系统IronOS(FreeRTOS)的智能烙铁
- 阅读瑞萨电子电源模块系列白皮书,赢双重好礼:提升能量有礼&推荐100%有礼 !
- 闯关赢优惠券,蝴蝶粉最低可29元体验NUCLEO-L452RE