STM32F0 LL库IIC第二地址配置错误
最近在做F0项目要用到多个IIC地址,使用Cube生成的LL库,第二地址进不了中断
F0版本:1.11.0
STM32CubeX生成的LL库代码为:
1 static void MX_I2C1_Init(void)
2 {
3
4 /* USER CODE BEGIN I2C1_Init 0 */
5
6 /* USER CODE END I2C1_Init 0 */
7
8 LL_I2C_InitTypeDef I2C_InitStruct = {0};
9
10 LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
11
12 LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
13 /**I2C1 GPIO Configuration
14 PB6 ------> I2C1_SCL
15 PB7 ------> I2C1_SDA
16 */
17 GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
18 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
19 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
20 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
21 GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
22 GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
23 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
24
25 GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
26 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
27 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
28 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
29 GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
30 GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
31 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
32
33 /* Peripheral clock enable */
34 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
35
36 /* I2C1 interrupt Init */
37 NVIC_SetPriority(I2C1_IRQn, 3);
38 NVIC_EnableIRQ(I2C1_IRQn);
39
40 /* USER CODE BEGIN I2C1_Init 1 */
41
42 /* USER CODE END I2C1_Init 1 */
43 /** I2C Initialization
44 */
45 LL_I2C_EnableOwnAddress2(I2C1);
46 LL_I2C_DisableGeneralCall(I2C1);
47 LL_I2C_EnableClockStretching(I2C1);
48 I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
49 I2C_InitStruct.Timing = 0x2000090E;
50 I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
51 I2C_InitStruct.DigitalFilter = 0;
52 I2C_InitStruct.OwnAddress1 = 214;
53 I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
54 I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
55 LL_I2C_Init(I2C1, &I2C_InitStruct);
56 LL_I2C_EnableAutoEndMode(I2C1);
57 LL_I2C_SetOwnAddress2(I2C1, 182, LL_I2C_OWNADDRESS2_NOMASK);
58 /* USER CODE BEGIN I2C1_Init 2 */
59
60 /* USER CODE END I2C1_Init 2 */
61
62 }
对比HAL库,发现LL库在配置第二地址时,先使能了第二地址:
LL_I2C_EnableOwnAddress2(I2C1);
导致第二地址配置失败。
更改代码如下:
1 static void MX_I2C1_Init(void)
2 {
3
4 /* USER CODE BEGIN I2C1_Init 0 */
5
6 /* USER CODE END I2C1_Init 0 */
7
8 LL_I2C_InitTypeDef I2C_InitStruct = {0};
9
10 LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
11
12 LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
13 /**I2C1 GPIO Configuration
14 PB6 ------> I2C1_SCL
15 PB7 ------> I2C1_SDA
16 */
17 GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
18 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
19 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
20 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
21 GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
22 GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
23 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
24
25 GPIO_InitStruct.Pin = LL_GPIO_PIN_7;
26 GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
27 GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
28 GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
29 GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
30 GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
31 LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
32
33 /* Peripheral clock enable */
34 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
35
36 /* I2C1 interrupt Init */
37 NVIC_SetPriority(I2C1_IRQn, 3);
38 NVIC_EnableIRQ(I2C1_IRQn);
39
40 /* USER CODE BEGIN I2C1_Init 1 */
41
42 /* USER CODE END I2C1_Init 1 */
43 /** I2C Initialization
44 */
45 LL_I2C_DableOwnAddress2(I2C1);
46 LL_I2C_SetOwnAddress2(I2C1, 182, LL_I2C_OWNADDRESS2_NOMASK);
47 LL_I2C_EnableOwnAddress2(I2C1);
48 LL_I2C_DisableGeneralCall(I2C1);
49 LL_I2C_EnableClockStretching(I2C1);
50 I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
51 I2C_InitStruct.Timing = 0x2000090E;
52 I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
53 I2C_InitStruct.DigitalFilter = 0;
54 I2C_InitStruct.OwnAddress1 = 214;
55 I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
56 I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
57 LL_I2C_Init(I2C1, &I2C_InitStruct);
58 LL_I2C_EnableAutoEndMode(I2C1);
59
60 /* USER CODE BEGIN I2C1_Init 2 */
61
62 /* USER CODE END I2C1_Init 2 */
63
64 }
STM32F0 LL库IIC第二地址配置错误的更多相关文章
- "网络适配器本地连接没有有效ip地址配置"错误的解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 win server2008通过一台win xp的共享网络来上网,采用ipv4,网址设置如下: win xp是可以上网 ...
- 算法库:OpenCV3编译配置
2016-01-20 23:55 更新: 关于Opencv3.1的lib文件 opencv_aruco310d.libopencv_bgsegm310d.libopencv_bioinspired3 ...
- hadoop地址配置、内存配置、守护进程设置、环境设置
1.1 hadoop配置 hadoop配置文件在安装包的etc/hadoop目录下,但是为了方便升级,配置不被覆盖一般放在其他地方,并用环境变量HADOOP_CONF_DIR指定目录. 1.1.1 ...
- Redrain个人维护并使用的DuiLib和UiLib库源代码下载地址
转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/40740353,谢谢~~ 首先说明一下Duilib和Uilib的差别:UiLIb是D ...
- Oracle数据库学习1------数据库安装及客户端配置
1.注册Oracle账户: 注册地址:https://login.oracle.com/mysso/signon.jsp 注意:注册的时候尽量使用外国的邮箱,因为使用国内的邮箱可能收不到Oracle发 ...
- Linux在fstab中因配置错误导致服务器主机无法重启的问题应该如何解决
fstab中配置错误导致系统无法启动的恢复方案 1制造错误的案例发生,在/etc/fstab中配置如下内容 结尾的倒数第一个为1表示进行磁盘检查,为0表示不进行磁盘检查,倒数第二个为0表示不备份,为1 ...
- Ubuntu下删除配置错误或者失败的安装包
aptitude purge $(dpkg -l|grep ^rc|awk '{ print $2 }') 解释:dpkg -l 列出系统中所有安装的软件,如果是已经删除的软件(有残存的配置文件),那 ...
- [老老实实学WCF] 第二篇 配置WCF
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...
- 老老实实学习WCF[第二篇] 配置wcf
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...
- 两个由于php.ini配置错误导致的报错:ajax图片上传报错和exec报错
遇到了两个由于php.ini配置错误导致的报错:ajax图片上传报错和exec报错 首先第一个: 在做一个用ajax图片上传的功能中,php报了这样一个错误:File upload error - u ...
随机推荐
- pat 乙级 1025 反转链表
目前无法ac过最后一个测试点,其余ac,原因是有无效节点存在,但这个代码加上去除无效节点函数时便会运行超时 还没想出来怎么做,先这样吧 #include <stdio.h> #includ ...
- [Linux系统]安装时出现Requires: libc.so.6(GLIBC_2.17)(64bit) Requires: systemd Requires: libstdc++.so时解决办法
yum install glibc.i686 yum list libstdc++*
- Software_C#_grammer_Deletegate--Strategy
2018-04-30 18:59:04. 由 委托的 动态选择方法 联想到的 Strategy Pattern 一 : 策略模式 将 宿主 与 算法 分离, 算法被封装为对象, 客户端代码用 ...
- 使用stream流对数据进行处理
1. 使用场景 本次使用是通过条件查询出所需要的多个字段后,对其进行处理(一个条件查询多个下拉框内容,并对每个下拉框内容封装对象,进行返回) 2. 代码 点击查看代码 //获取所有需要的数据 List ...
- ubuntu18.04 安装 opencv(版本4.5.5) cmake(版本3.25)
参考链接:安装cmake https://blog.csdn.net/Man_1man/article/details/126467371 安装 opencv https://blog. ...
- 【杂项】瞎玩——suhr RIOT单块制作流程
难得的周末,在家上课似乎丝毫没有轻松多少,然而专业课任务的ddl远在天边,上午赶赶进度似乎稍微闲下来了点,正好前几天找电路的时候看到一个非常nice的效果器制作网站,国内少有深入研究效果器电路的文章, ...
- Ubuntu 20.04 :“a start job is running for hold until boot process finishes”
A start job is running for Hold until boot process finishes up (xxx min xxx s/no limit) ubuntu20.04开 ...
- Markdown的在线使用
欢迎使用 Markdown在线编辑器 MdEditor Markdown是一种轻量级的「标记语言」 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容 ...
- Java 根据模板导出PDF
目录 前言 思路一:直接导出pdf 使用itext模板导出pdf 思路二:先导出word再转成pdf 1)导出word 2)word转pdf 最终方案 docx4j spire.doc.free + ...
- 《Makefile中DEP_LIBRARIES变量的作用》
1.例子 DEP_LIBRARIES := lib@InfoSDK_api lib@WMTMedia lib@WMTUtil lib@curl 该变量是Makefile里面内置的变量,作用是指定依赖的 ...