06 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序

CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序

首先,用cube新建一个工程,选择芯片型号,这里我选择了“STM32F103C8T6”作为I2C从机,封装为LQFP48

在这里插入图片描述

一.设置烧录模式

在这里插入图片描述

二.使用外部晶振

在这里插入图片描述

三.开启IIC中断

在这里插入图片描述

开启IIC事件中断用于接收数据,同时开始错误中断,当发生I2C错误时打印错误类型,处理错误

四.设置IIC参数

在这里插入图片描述

五.配置外部时钟

在这里插入图片描述
我板子上外部晶振采用8MHz

六.设置工程信息

在这里插入图片描述

尽量使用最新版本的 STM32Cube FW_Fx_Vx.x库

七.代码生成项配置

在这里插入图片描述

八.在Keil中打开工程,修改部分代码

在main.c中设置数据缓存区,启动数据接收

uint8_t 	RE_BUFF[SIZE];     //  数据存储区, 数据长度与主机发送数据长度保持一致
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_WWDG_Init();
  MX_I2C1_Init();
  HAL_I2C_Slave_Receive_IT(&hi2c1, RE_BUFF, sizeof(RE_BUFF));    // 启动中断接受
  while (1)
  {
   /* USER CODE BEGIN 3 */
		HAL_Delay(1);
    /* USER CODE END 3 */
  }
}

九.加入中断回调函数

void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c)
{
		{
		   // 数据处理
		}
		for(uint8_t i=0;i<11;i++)
		{
		   // 清空缓存
			RE_BUFF[i] = 0;
		}
		HAL_I2C_Slave_Receive_IT(&hi2c1, RE_BUFF, sizeof(RE_BUFF));
}

十.加入错误回调函数


void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *I2cHandle)
{
// 打印I2C错误类型  
//	error type 1:  HAL_I2C_ERROR_BEER    Bus error	 		总线错误			   
//	error type 4:  HAL_I2C_ERROR_AF  	 Acknowledge failure 应答错误
	printf("error type  %x \n",HAL_I2C_GetError(I2cHandle));
// 先注销I2C硬件,释放I2C接口,再重启I2C
	HAL_I2C_DeInit(I2cHandle);
	MX_I2C1_Init();
	HAL_I2C_Slave_Receive_IT(I2cHandle, RE_BUFF, sizeof(RE_BUFF));
}

使用注意事项

  • i2c.c中从机地址最好为偶数,调试过程中发现设置成0x41以奇数结尾时,无法正常通信. 因为硬件I2C主机发送函数,部分模拟I2C发送函数 在发送地址会<<1左移一位 然后在末尾补0
    解决办法如下, 在i2c.c文件中 从机地址也左移一位在这里插入图片描述

  • 数据线SDA 与GND地接触 或者总线端子接触不良可能会报 HAL_I2C_ERROR_AF 错误 和HAL_I2C_ERROR_BEER 错误

  • 从机用STM32硬件I2C,主机最好不要用STM32硬件I2C,否者出BUG不好查找

  • 在main.c中加入中断回调函数处理数据和错误回调函数 ,无需对回调函数声明

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值