我可以使用libopencm3在STM32L0上编写i2c程序吗



我正在尝试创建一个非常简单的i2c测试程序,以便在STM32L0(发现工具包)上运行。我修改了libopencm3-examples/examples/stm32/l0/stm32l0538迪斯科中的迷你链接程序。

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

#include <libopencm3/stm32/i2c.h>

然后运行使我得到错误:

 ../../../../../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库。有什么方法可以让我把i2c库用于l1吗?

感谢

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 进行修改

如果你想,发送一个提取请求

破解:(不推荐)

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

并且手动地包括源文件CCD_ 2。

最新更新