Могу ли я использовать libopencm3 для написания программы i2c на моем STM32L0?
Я пытаюсь создать очень простую тестовую программу i2c для запуска на моем STM32L0 (комплект для обнаружения). Я изменил программу minilink в libopencm3-examples/examples/stm32/l0/stm32l0538-disco.
Но если я просто включу заголовочный файл i2c:
#include <libopencm3/stm32/i2c.h>
И запустить make я получаю ошибку:
../../../../../libopencm3//include/libopencm3/stm32/i2c.h:36:9: error: #error "stm32 family not defined."
После изучения этого файла выясняется, что существуют правила, определенные для каждой из других моделей, но не для l0, почему это так? Libopencm3 не поддерживает i2c в серии STM32L0?
#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?
Спасибо
1 ответ
Необходимо добавить специальный заголовок 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>
и включите исходный файл lib/stm32/common/i2c_common_all.c
вручную.