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 ...
随机推荐
- script和template里可选链运算符?.报错Syntax Error: Unexpected token (64:2)
前情:babel-core@6.2.3, vue@2.7.14 试过的方法:1.安装@babel/plugin-proposal-optional-chaining,设置.babelrc文件如下,报 ...
- EF Corexxxxnstance with the same key value for {'Id'} is already being tracked.
AsNoTracki或者全局禁用 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // ...
- HashMap排序题
HashMap排序题 题目 已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性. 请写一个方法实现对HashMap ...
- HttpClient 提交 JSON数据
常见数据格式 application/x-www-form-urlencoded 这也是最常见的 POST 提交数据的方式,一般是用来提交表单. multipart/form-data 上传文件时通常 ...
- tasklist
tasklist是windows下列出进程信息的指令,可配合taskKill来关毕进程 https://learn.microsoft.com/zh-cn/windows-server/adminis ...
- VUE学习-自定义指令
自定义指令 有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令. <div id="directive-demo"> <input ...
- killall: command not found
centos7精简安装后,使用中发现没有killall命令.经查找,可以通过以下命令解决:yum install psmisc -y 简单介绍一下 psmisc :Psmisc软件包包含三个帮助管理/ ...
- mysql应用程序无法正常启动0xc000007b错误解决方法
一般大家从mysql官网下载mysql安装包是一个zip压缩文件,照着网上步骤,操作mysqld --initialize,却发现系统报错, 其实是因为缺少一些C++组件以及python组件引起的,如 ...
- 2022-05-24内部群每日三题-清辉PMP
1.一家公司具有一项变更控制委员会(CCB)政策,规定其每月举行一次会议来评估和审查变更请求.一个项目正在执行过程中,由于时间表和目标较为激进,需要更快的响应时间.项目经理应该怎么做? A.更新风险登 ...
- MC 咖啡杯
#include <iostream> #include "minecraft.h" #include <windows.h> using namespac ...