最近在做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. Js 实现登录框可拖动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. php正方形图片转成成圆形图片-GD

    /** * 剪切图片为圆形 * @param $picture 图片数据流 比如file_get_contents(imageurl)返回的东东 * @return 图片数据流 */ private ...

  3. ES6判断对象是否为空

    1.ES6判断对象是否为空{} let obj = {} if(Object.keys(obj).length == 0){ console.log("对象是空的") }else{ ...

  4. 05 RDD练习:词频统计,学习课程分数

    .词频统计: 1.读文本文件生成RDD lines 2.将一行一行的文本分割成单词 words flatmap() 3.全部转换为小写 lower() 4.去掉长度小于3的单词 filter() 5. ...

  5. MyFreeMarkerConfigurer

    public class MyFreeMarkerConfigurer extends FreeMarkerConfigurer { @Override public void afterProper ...

  6. javaweb常用的配置文件

    1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. cisco的telnet远程登入

    Cisco配置telnet登入 拓扑图: IP地址表: 设备 IP地址 PC0 192.168.1.1 Switch0 vlan1:192.168.1.254 1.不需要用户的telnet登入 Swi ...

  8. 不需要鼠标交互的UI去掉RaycastTarget

    UI事件会在EventSystem在Update的Process触发.UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件 ...

  9. Java密码加密的两种保存方式

    密码加密的两种方式(md5和base64) 常见的加密方式有盐值,md5和jdk自带的base64,这里我记录的是base64如何使用,以及破解的方式,话不多说,直接贴代码! 其实md5和加盐值都差不 ...

  10. JetCache源码整理