最近在做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. Mybatis-概览地图

    思考: "为什么在使用 Mybatis 的时候,只需定义一个接口,不用写实现类就能使用XML中或者注解上配置好的SQL语句,就能完成对数据库 CRUD 的操作呢?" 这是因为用到了 ...

  2. api规范PHP,RESTful API规范(详细版)

    rest 是一种软件架构风格,如果你们的接口是 rest 接口,那么就可被认为你们的的接口是restful的,英文名词和形容词的区别. rest 接口是围绕"资源"展开的,利用HT ...

  3. 信息学奥赛介绍-CSP

    什么是信息学奥赛 信息学奥赛,全称为信息学奥林匹克竞赛,是教育部和中国科协委托中国计算机 学会举办的一项全国青少年计算机程序设计竞赛.主要分为NOIP(全国联赛),夏令营 NOI比赛的扩展赛,也称全国 ...

  4. 「JOI Open 2022」Giraffes 题解

    设我们将要给出的观感好的排列为 \(q\),我们希望求出 \(\sum[p_i=q_i]\) 的最大值(这里指不移动的长颈鹿个数). 结论一:当且仅当左右端点有当前区间最大值或者最小值时条件才能成立. ...

  5. java中overload与override的区别

    1.综述 重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现. override从字面就可以知道,它是覆盖了一个方法并且对其重写 ...

  6. 【SQL Server】按日期分组产品

    1 SELECT sell_date ,COUNT(1) AS num_sold, 2 STUFF(( 3 SELECT ',' + son.product 4 FROM (SELECT DISTIN ...

  7. chrome 检查更新时出错:无法启动更新检查(错误代码为 4: 0xA0430817 -- system level)

    Windows系统谷歌浏览器 Chrome 检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 -- system level)该怎么办? 这很有可能是 Chrome 更新服务被 ...

  8. react知识点-01

    1. 使用 globalContext 进行生产消费.非父子间通信

  9. Go--生成excel表格,读取excel表格数据

    先下载第三方依赖包: go get -u github.com/xuri/excelize/v2 代码: package main import ( "fmt" "git ...

  10. Jmeter:随机类函数

    一.__Random 功能介绍:计算范围内的随机数 ${__Random(参数 1,参数 2,参数 3)} 参数 1:开始数字,包括在内 参数 2:结束数字,包括在内 参数 3:注册变量名称  二._ ...