最近在做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第二地址配置错误的更多相关文章

  1. "网络适配器本地连接没有有效ip地址配置"错误的解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 win server2008通过一台win xp的共享网络来上网,采用ipv4,网址设置如下: win xp是可以上网 ...

  2. 算法库:OpenCV3编译配置

    2016-01-20  23:55 更新: 关于Opencv3.1的lib文件 opencv_aruco310d.libopencv_bgsegm310d.libopencv_bioinspired3 ...

  3. hadoop地址配置、内存配置、守护进程设置、环境设置

    1.1  hadoop配置 hadoop配置文件在安装包的etc/hadoop目录下,但是为了方便升级,配置不被覆盖一般放在其他地方,并用环境变量HADOOP_CONF_DIR指定目录. 1.1.1  ...

  4. Redrain个人维护并使用的DuiLib和UiLib库源代码下载地址

    转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/40740353,谢谢~~ 首先说明一下Duilib和Uilib的差别:UiLIb是D ...

  5. Oracle数据库学习1------数据库安装及客户端配置

    1.注册Oracle账户: 注册地址:https://login.oracle.com/mysso/signon.jsp 注意:注册的时候尽量使用外国的邮箱,因为使用国内的邮箱可能收不到Oracle发 ...

  6. Linux在fstab中因配置错误导致服务器主机无法重启的问题应该如何解决

    fstab中配置错误导致系统无法启动的恢复方案 1制造错误的案例发生,在/etc/fstab中配置如下内容 结尾的倒数第一个为1表示进行磁盘检查,为0表示不进行磁盘检查,倒数第二个为0表示不备份,为1 ...

  7. Ubuntu下删除配置错误或者失败的安装包

    aptitude purge $(dpkg -l|grep ^rc|awk '{ print $2 }') 解释:dpkg -l 列出系统中所有安装的软件,如果是已经删除的软件(有残存的配置文件),那 ...

  8. [老老实实学WCF] 第二篇 配置WCF

    老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...

  9. 老老实实学习WCF[第二篇] 配置wcf

    老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...

  10. 两个由于php.ini配置错误导致的报错:ajax图片上传报错和exec报错

    遇到了两个由于php.ini配置错误导致的报错:ajax图片上传报错和exec报错 首先第一个: 在做一个用ajax图片上传的功能中,php报了这样一个错误:File upload error - u ...

随机推荐

  1. LeetCode-1601 最多可达成的换楼请求数目

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-number-of-achievable-transfer-requests 题目 ...

  2. 溢出标志位OF与进位标志位CF判断

    1.OF与CF概述 OF(Overflow Flag,溢出标志位):有符号数之间加减运算的溢出标志 CF(Carry Flag,进位标志位):无符号数之间加减运算的溢出标志 快速判断(加法)(减法可转 ...

  3. eclipse项目转idea项目

    背景:用习惯了idea再去用eclipse实在用的不习惯,于是将老的eclipse项目导入到eclipse,网上有很多教程,看了很多博客都不行,一直报错,各种报错,现在终于好了,我们一起来看看怎么将e ...

  4. elasticsearch 安装与配置

    一.JAVA 与 elasticsearch 的版本对应 个人实测能够对应起来的版本: elasticsearch-rtf-2.2.1 需要 JDK7 或更低的版本,推荐使用 7 elasticsea ...

  5. list变成String类型

    list变成String类型 CollectionUtils.isEmpty(vo.getImgs())?"" : String.join(";", (Stri ...

  6. MDK GCC调试

    openocd调试 https://blog.csdn.net/chunyexixiaoyu/article/details/120448515

  7. Windows10安装VMware

    系统环境: Windows 10 安装步骤: 1.下载vmware https://my.vmware.com/cn/web/vmware/downloads 2.安装(这里安装语言我选择的是中文) ...

  8. Spring的IOC源码分析

    Spring IOC 容器源码分析 Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器.既然大家平时都要用到 Spring,怎么可以不 ...

  9. 068_Apex&Page中的ReadOnly 使用方式

    一.page页面遇到需要检索大量数据的处理方式需要时会用Readonly 通常,对单个Visualforce页面请求的查询可能无法检索超过50,000行. 在Read only模式下,此限制将放宽允许 ...

  10. ROS多机通信

    嵌入式开发板端: export ROS_IP=`hostname -I | awk '{print $1}'`export ROS_HOSTNAME=`hostname -I | awk '{prin ...