2015-06-29 44 views
0

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

但如果我只包括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库。有没有什么办法可以在l1上使用i2c库?

谢谢

+0

也许它还没有实现? – leppie

+0

这是我怀疑...但我不确定 – k212

+0

该文件似乎暗示,它已经虽然... http://libopencm3.github.io/docs/latest/stm32l0/html/group__i2c__defines.html – k212

回答

0

需要添加STM32L0特定标头。
虽然(i2c公共头文件可以探测使用)。
公共标题的目的不是直接包括在内(为了安全和减少头痛)。 (有包入检查)

解决方案:
你应该检查“i2c_common_all.h”如果有10(probebly是),然后复制STM32/L1/i2c.h中到STM32/10定位准确认定中/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/10/Makefile中OBJS += i2c_common_all.o

,如果你想,发送pull请求

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

相关问题