我可以使用 libopencm3 在我的 STM32L0 上编写 i2c 程序吗?
Can I use libopencm3 to write an i2c program on my STM32L0?
我正在尝试在我的 STM32L0(发现套件)上为 运行 创建一个非常简单的 i2c 测试程序。我修改了libopencm3-examples/examples/stm32/l0/stm32l0538-disco.
中的miniblink程序
但是如果我只包含 i2c 头文件:
#include <libopencm3/stm32/i2c.h>
和运行让我得到错误:
../../../../../libopencm3//include/libopencm3/stm32/i2c.h:36:9: error: #error "stm32 family not defined."
调查此文件后,似乎为每个其他模型定义了规则,但没有为 l0 定义,这是为什么? STM32L0系列libopencm3不支持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 库吗?
谢谢
STM32L0具体header需要补充
虽然(可以使用 i2c 通用 header 文件)。
不打算直接包含常见的 header(为了安全和减少头痛)。 (它有包含检查)
解决方案:
您应该检查 "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
如果需要,请发送拉取请求
破解:(不推荐)
#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
。
我正在尝试在我的 STM32L0(发现套件)上为 运行 创建一个非常简单的 i2c 测试程序。我修改了libopencm3-examples/examples/stm32/l0/stm32l0538-disco.
中的miniblink程序但是如果我只包含 i2c 头文件:
#include <libopencm3/stm32/i2c.h>
和运行让我得到错误:
../../../../../libopencm3//include/libopencm3/stm32/i2c.h:36:9: error: #error "stm32 family not defined."
调查此文件后,似乎为每个其他模型定义了规则,但没有为 l0 定义,这是为什么? STM32L0系列libopencm3不支持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 库吗?
谢谢
STM32L0具体header需要补充
虽然(可以使用 i2c 通用 header 文件)。
不打算直接包含常见的 header(为了安全和减少头痛)。 (它有包含检查)
解决方案:
您应该检查 "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
如果需要,请发送拉取请求
破解:(不推荐)
#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
。