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

2023-11-19

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中加入中断回调函数处理数据和错误回调函数 ,无需对回调函数声明

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

06 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序 的相关文章

随机推荐

  • Windows下Git及TortoiseGit安装、配置及使用

    文章目录 1 Git TortoiseGit安装及配置 2 Git 常用命令 2 1 新建代码库 2 2 配置 2 3 增加 删除文件 2 4 代码提交 2 5 分支 2 6 查看信息 3 Git 样例 3 1 首次提交本地代码至远程仓库
  • AD22PCB库增大黑色区域的面积

  • 运维常用面试题及答案

    介绍一下你的运维经验和技能 答案 在回答这个问题时 可以简要概述你的运维经验和技能 包括你的工作经历 参与的项目 使用的工具和技术等 重点突出你在系统监控 故障排除 自动化部署 容量规划和安全性等方面的经验和技能 你在日常工作中使用过哪些自
  • 【C++11】shared_ptr

    1 shared ptr内存模型 shared ptr 包含了一个指向对象的指针和一个指向控制块的指针 每一个由 shared ptr 管理的对象都有一个控制块 它除了包含强引用计数 弱引用计数之外 还包含了自定义删除器的副本和分配器的副本
  • 剑指 Offer 58 - I. 翻转单词顺序--学到点小知识

    class Solution public String reverseWords String s String strings s trim split StringBuilder sb new StringBuilder for in
  • Angular开发(十八)-路由的基本认识

    一 学单词 angular路由中涉及到很多新单词词汇 单词 说明 使用场景 Routes 配置路由 保存URL对应的组件 以及在哪个RouterOutlet中展现 RouterOutlet 在html中标记挂载路由的占位容器 Router
  • 什么是hive的静态分区和动态分区,hive动态分区详解

    面试官问我 什么是hive的静态分区和动态分区 这题我会 欢迎点击此处关注我的个人公众号 交流更多知识 简述 分区是hive存放数据的一种方式 将列值作为目录来存放数据 就是一个分区 可以有多列 这样查询时使用分区列进行过滤 只需根据列值直
  • 如何通过DOI号来获取相关文献并下载?

    上一篇博客分享了如何利用PMID来获取相关的文献 这篇博客就对如何利用DOI号获取并下载相关文献做简单讲解 1 打开网址 链接为 https sci hub shop 2 在输入框中输入相关的DOI号 输入格式为DOI xxxxx 其次点击
  • 【电赛-软件】CCS安装教程

    CCS安装教程 下载 下载地址 下载地址 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img WhFWuuUy 1679146802762 ccspicture ccs download png 选择第二个CCSTU
  • CSDN-markdown编辑器使用说明

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 用它写博客 将会带来全新的体验哦 Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列
  • 从mpeg ts文件中提取I帧(6):I帧的显示

    I帧的显示依赖于opencv 这里用到的版本是3 4 0 显示的数据是pes解码后的rgb数据 代码比较简单 用opencv主要考虑到以后可以对ts流进行一些特征识别 include
  • 7-43 查询水果价格

    给定四种水果 分别是苹果 apple 梨 pear 桔子 orange 葡萄 grape 单价分别对应为3 00元 公斤 2 50元 公斤 4 10元 公斤 10 20元 公斤 首先在屏幕上显示以下菜单 1 apple 2 pear 3 o
  • 各种协议

    百度百科http baike baidu com view 16603 htm fromtitle E8 AE A1 E7 AE 97 E6 9C BA E7 BD 91 E7 BB 9C E5 8D 8F E8 AE AE fromid
  • json.decoder.JSONDecodeError: Invalid control character at: line 1 column 3,python中str与json类型转换报错如何解

    使用json转 json数据保密 再此不展示 判断类型 print type str json json dump json loads str json 报错如下 json decoder JSONDecodeError Invalid
  • 【Data Mining】【第五章作业】

    文章目录 一 单选题 二 多选题 三 填空题 一 单选题 1 回归分析中使用的距离是点到直线的垂直坐标距离 最小二乘准则是指 A B C D 正确答案 D 2 回归分析的步骤为 进行相关分析 建立预测模型 确定变量 确定预测值 计算预测误差
  • yolov4训练自己的数据集

    YOLOv4训练自己的数据集 1 电脑配置 2 下载并配置 3 测试 4 训练 1 电脑配置 win10 OpenCV4 1 VS2019 cuda10 2 2 下载并配置 1 YOLOv4网址 https github com Alexe
  • aix升级openssh_AIX6.1上源码编译升级openssh6.6p1

    最近因为绿盟扫描到AIX5 3 AIX6 1系统有openssh高危漏洞 OPENSSH6 4之前的都报高危漏洞 IBM官网上也只有最新的openssh6 0安装文件供下载 没办法只有自己试验的用源码来安装升级 期间各种报错 搞了差不多一周
  • educoder答案pythonnumpy_Educoder 题解

    Solution 4 2 第一关 求个导发现有两个根 分别二分就行了 importnumpy as np E 1e 6 begin 请在此填写代码 计算6 np exp x 113 x 17 0的根 deff x return 6 np e
  • 语义分割实践—耕地提取(二分类)

    开篇 感谢李沐老师团队为深度学习教学做出的巨大贡献 对李沐老师及团队致以深深的敬意 同时 对技术开发社区以及编程技术网站的优质创作者们 Jack Cui等 表示深深的感谢 一 深度学习网络中的常见概念 一 Ground Truth 通常指人
  • 06 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序

    文章目录 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序 一 设置烧录模式 二 使用外部晶振 三 开启IIC中断 四 设置IIC参数 五 配置外部时钟 六 设置工程信息 七 代码生成项配置 八 在Keil中打开工程