Могу ли я использовать 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 вручную.

Другие вопросы по тегам