0

我正在尝试创建一个非常简单的 i2c 测试程序以在我的 STM32L0(发现套件)上运行。我已经修改了 libopencm3-examples/examples/stm32/l0/stm32l0538-disco 中的 miniblink 程序。

但如果我只包含 i2c 头文件:

#include <libopencm3/stm32/i2c.h>

并运行 make 我得到错误:

 ../../../../../libopencm3//include/libopencm3/stm32/i2c.h:36:9: error: #error "stm32 family not defined."

在调查此文件后,似乎为每个其他模型定义了规则,但没有为 l0 定义规则,这是为什么呢?libopencm3在STM32L0系列上不支持i2c吗?

#if defined(STM32F0)
#       include <libopencm3/stm32/f0/i2c.h>
#elif defined(STM32F1)
#       include <libopencm3/stm32/f1/i2c.h>
#elif defined(STM32F2)
#       include <libopencm3/stm32/f2/i2c.h>
#elif defined(STM32F3)
#       include <libopencm3/stm32/f3/i2c.h>
#elif defined(STM32F4)
#       include <libopencm3/stm32/f4/i2c.h>
#elif defined(STM32L1)
#       include <libopencm3/stm32/l1/i2c.h>
#else
#       error "stm32 family not defined."
#endif

我查看了 libopencm3/stm32/l1/i2c.h ,它似乎所做的只是导入通用 i2c 库。有什么办法可以只使用 l1 的 i2c 库吗?

谢谢

4

1 回答 1

0

需要添加 STM32L0 特定的头文件。
虽然(可以使用 i2c 通用头文件)。
不打算直接包含公共标题(为了安全和减少头痛)。(它有包括检查)

解决方案:
您应该检查“i2c_common_all.h”是否具有正确的 l0 寄存器定义(可能是),然后将 stm32/l1/i2c.h 复制到 stm32/l0/i2c.h 并添加(最后两行)到stm32/i2c.h

#elif defined(STM32L1)
#       include <libopencm3/stm32/l1/i2c.h>
#elif defined(STM32L0)
#       include <libopencm3/stm32/l0/i2c.h>

并对 lib/stm32/l0/Makefile 进行修改OBJS += i2c_common_all.o

如果需要,请发送拉取请求

hack:(不推荐)

#include <libopencm3/cm3/common.h>
#include <libopencm3/stm32/memorymap.h>
#define LIBOPENCM3_I2C_H
#include <libopencm3/stm32/i2c_common_all.h>

lib/stm32/common/i2c_common_all.c并手动包含源文件。

于 2015-08-04T22:44:47.747 回答