Демонстрационная прошивка отладочного комплекта МТС NB-IoT
Группы | Файлы | Структуры данных | Макросы | Функции | Переменные
Код поддержки платформы

Группы

 Сопоставление выводов контроллера их функциям на плате
 Константы записаны в виде < назначение="" ножки>="">_< порт="" ножки>="">. Подключение Arduino-совместимых выходов платы к контроллеру STM32L152RE совместимо со схемой платы Nucleo, основанной на этом контроллере.
 
 Драйвера используемых устройств
 
 Макросы для человекочитаемого обращения к регистрам настройки портов STM32
 
 Код поддержки базовых интерфейсов
 Драйвера для периферии контроллера. Реализация драйверов с нуля на уровне регистров позволяет выполнить оптимизации, приводящие к ускорению кода, снижению его сложности и размера по сравнению со случаем использования сторонних библиотек. Кроме того, достигается унификация API с вышележащими слоями, что положительно сказывается на структуре кода.
 

Файлы

файл  board_support_api.h
 

Структуры данных

struct  device_setup_data_t
 Структура, хранящая настройки работы основного демонстрационного приложения Подробнее...
 

Макросы

#define FIRMWARE_VERSION   "2.4 beta 2, 22.01.2021"
 
#define MTS_COAP_SERVER_IP   "195.34.49.22"
 
#define MTS_COAP_SERVER_PORT   6683
 
#define DEFAULT_CLOCK_FREQ   16000000UL
 Значение тактовой частоты, на которой работает контроллер
 
#define CONSOLE_BAUDRATE   115200UL
 Значение скорости обмена для консоли (вывод printf() через USART1 и встроенный в плату USB-UART конвертер)
 
#define GNSS_BAUDRATE   9600UL
 По умолчанию модули EVA M8 выдают данные на скорости 9600 бит/с
 
#define ECHO_INPUT_CHARS   0
 
#define SARA_R410M_DEFAULT_BAUDRATE   115200UL
 Скорость обмена с радиомодулем
 
#define LOCAL_TSENSOR_I2C_ADDR   0x48
 Адрес термодатчика TMP75, установленного на плате
 
#define LOCAL_ACCEL_I2C_ADDR   0x18
 Адрес акселерометра LIS3DH, установленного на плате
 
#define USE_DS1721   1
 
#define MCU_UNIQUE_IDENTIFIER_ADDRESS   ((uint32_t *)0x1FF800CC)
 
#define OSC_STARTUP_CYCLES_MAX   2000000UL
 
#define TMR_PRESC   15
 
#define TMR_CNT_1MSEC   1000
 Количество отсчетов таймера за 1 мс.
 
#define BTN_POLL_PERIOD   50000
 Интервал опроса кнопки, выраженный в отсчетах таймера.
 
#define LOGGER_MODE_VALUE   15
 См. описание device_setup_data_t.
 
#define SETTINGS_SIGNATURE_0   0xA5
 См. описание поля reserved структуры device_setup_data_t.
 
#define SETTINGS_SIGNATURE_1   0x55
 См. описание поля reserved структуры device_setup_data_t.
 
#define SETTINGS_SIGNATURE_2   0xAA
 См. описание поля reserved структуры device_setup_data_t.
 
#define EEPROM_START_ADDRESS   ((uint32_t *)0x08080000)
 

Функции

void init_board (void)
 Функция выполняет настройку тактирования и инициализацию периферии, используемой демонстрационным приложением. Подробнее...
 
uint32_t get_uptime_ms (void)
 Возвращает время с момента начала работы прошивки Подробнее...
 
void delay_ms (uint32_t N)
 Приостанавливает выполнение программы на заданное время. Значение задержки задается в миллисекундах.
 
uint32_t get_button_press (void)
 Возвращает время удержания кнопки нажатой с момента предыдущего вызова функции. Подробнее...
 
void switch_LED (uint8_t state)
 Включает или выключает светодиод на плате. Подробнее...
 
void SARA_R410_PWR_ON_pulse (void)
 Генерирует импульс низкого уровня продолжительностью примерно 500 мс на линии PWR_ON радиомодуля.
 
void FLASH_WriteEEPROM (volatile uint32_t *eeprom_ptr, uint32_t *data_ptr, uint16_t data_size_words)
 Запись в EEPROM. Подробнее...
 
void store_device_settings (device_setup_data_t *data)
 Сохранение настроек устройства в область EEPROM. Подробнее...
 
void recall_device_settings (device_setup_data_t *data)
 Загрузка настроек устройства из области EEPROM. Подробнее...
 
void apply_backspace (uint8_t *str, uint16_t max_length)
 Модифицирует строку с учетом символов backspace. Подробнее...
 

Переменные

volatile uint8_t LSE_failed
 В случае, если генератор LSE запустить не удалось, значение этой переменной будет ненулевым.
 
volatile uint32_t CYCLES_PER_1SEC
 Калиброванное значение: количество итераций пустого цикла за 1 секунду при текущей тактовой частоте. Калибровка значения выполняется при старте платы.
 

Подробное описание

Макросы

◆ ECHO_INPUT_CHARS

#define ECHO_INPUT_CHARS   0

Значение 1 включает обратную отсылку принятых символов; обратная отсылка принятых символов снижает скорость обработки ввода и может вызвать проблемы (пропуск символов) при достаточно высокой скорости поступления данных

См. определение в файле board_support_api.h строка 47

◆ OSC_STARTUP_CYCLES_MAX

#define OSC_STARTUP_CYCLES_MAX   2000000UL

Максимальное количество тактов ожидания запуска тактовых генераторов. Если запуск займет больше времени, будет принято решение о том, что генератор отказал.

См. определение в файле board_support_api.h строка 74

◆ TMR_PRESC

#define TMR_PRESC   15

Предделитель для таймера, сконфигурированного для отсчета времени работы системы и опроса кнопки. Значение по-умолчанию соответствует тактированию таймера на частоте 1 МГц при системной частоте 16 МГц (HSI).

См. определение в файле board_support_api.h строка 80

◆ USE_DS1721

#define USE_DS1721   1

Плата может быть укомплектована термодатчиком TMP75 либо DS1721. Процедуры работы с ними похожи, но не совместимы на 100%. Если макрос имеет значение 1, прошивка будет скомпилирована с поддержкой DS1721; иначе будет использован драйвер для TMP75.

См. определение в файле board_support_api.h строка 60

Функции

◆ apply_backspace()

void apply_backspace ( uint8_t *  str,
uint16_t  max_length 
)

Модифицирует строку с учетом символов backspace.

Реализация scanf() в newlib не обрабатывает символы backspace. Вводимые символы возврата просто записываются в строку вместе с предыдущими символами; apply_backspace() выполняет замену согласно введенным символам возврата.

Аргументы
[in]strСтрока, котороую необходимо скорректировать; замена выполняется на месте
[in]max_lengthМаксимальная длина строки (размер буфера)

См. определение в файле board_support_api.c строка 170

◆ FLASH_WriteEEPROM()

void FLASH_WriteEEPROM ( volatile uint32_t *  eeprom_ptr,
uint32_t *  data_ptr,
uint16_t  data_size_words 
)

Запись в EEPROM.

Аргументы
[in]eeprom_ptrУказатель на адрес в EEPROM, с которого следует начать запись
[in]data_ptrУказатель на массив данных в виде тридцатидвухбитных слов
[in]data_size_wordsРазмер массива данных в тридцатидвухбитных словах
Предупреждения
Данные должны быть выровнены по границе слова.

См. определение в файле board_support_api.c строка 143

◆ get_button_press()

uint32_t get_button_press ( void  )

Возвращает время удержания кнопки нажатой с момента предыдущего вызова функции.

Все время работы прошивки происходит опрос кнопки по таймеру с интервалом BTN_POLL_PERIOD. Если кнопка нажата, каждый интервал опроса происходит инкремент счетчика. Когда кнопку отпускают, значение счетчика сохраняется. Таким образом, можно определить, была ли кнопка нажата, и насколько долго.

Предупреждения
После того, как кнопка была отпущена, и до вызова get_button_press(), система не реагирует на нажатия кнопки.
Возвращает
Время, которое кнопка была нажата, в единицах BTN_POLL_PERIOD. Если кнопка не была нажата с момента предыдущего вызова функции, возвращается ноль.

См. определение в файле board_support_api.c строка 99

◆ get_uptime_ms()

uint32_t get_uptime_ms ( void  )

Возвращает время с момента начала работы прошивки

Возвращает
Время с момента начала работы прошивки, в миллисекундах.

См. определение в файле board_support_api.c строка 83

◆ init_board()

void init_board ( void  )

Функция выполняет настройку тактирования и инициализацию периферии, используемой демонстрационным приложением.

USART2 используется для реализации консоли с поддержкой printf (перемычки XP4 и XP5 должны стоять в положении 1-2) I2C1 используется для чтения датчика температуры и акселерометра Вывод PA5 подключен к пользовательскому светодиоду, расположенному на плате (перемычка XP8 должна стоять в положении 2-3) USART3 используется для коммуникации с NB-IoT модулем.

См. определение в файле board_support_api.c строка 207

◆ recall_device_settings()

void recall_device_settings ( device_setup_data_t data)

Загрузка настроек устройства из области EEPROM.

Аргументы
[in]data- указатель на структуру, в которую будут скопированы данные из EERPOM

См. определение в файле board_support_api.c строка 164

◆ store_device_settings()

void store_device_settings ( device_setup_data_t data)

Сохранение настроек устройства в область EEPROM.

Аргументы
[in]data- указатель на структуру типа device_setup_data_t, данные из которой будут записаны в EEPROM

См. определение в файле board_support_api.c строка 158

◆ switch_LED()

void switch_LED ( uint8_t  state)

Включает или выключает светодиод на плате.

Аргументы
[in]state1 - включить светодиод, 0 - выключить светодиод.

См. определение в файле board_support_api.c строка 117