Демонстрационная прошивка отладочного комплекта МТС 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 секунду при текущей тактовой частоте. Калибровка значения выполняется при старте платы. | |
#define ECHO_INPUT_CHARS 0 |
Значение 1 включает обратную отсылку принятых символов; обратная отсылка принятых символов снижает скорость обработки ввода и может вызвать проблемы (пропуск символов) при достаточно высокой скорости поступления данных
См. определение в файле board_support_api.h строка 47
#define OSC_STARTUP_CYCLES_MAX 2000000UL |
Максимальное количество тактов ожидания запуска тактовых генераторов. Если запуск займет больше времени, будет принято решение о том, что генератор отказал.
См. определение в файле board_support_api.h строка 74
#define TMR_PRESC 15 |
Предделитель для таймера, сконфигурированного для отсчета времени работы системы и опроса кнопки. Значение по-умолчанию соответствует тактированию таймера на частоте 1 МГц при системной частоте 16 МГц (HSI).
См. определение в файле board_support_api.h строка 80
#define USE_DS1721 1 |
Плата может быть укомплектована термодатчиком TMP75 либо DS1721. Процедуры работы с ними похожи, но не совместимы на 100%. Если макрос имеет значение 1, прошивка будет скомпилирована с поддержкой DS1721; иначе будет использован драйвер для TMP75.
См. определение в файле board_support_api.h строка 60
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
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
uint32_t get_button_press | ( | void | ) |
Возвращает время удержания кнопки нажатой с момента предыдущего вызова функции.
Все время работы прошивки происходит опрос кнопки по таймеру с интервалом BTN_POLL_PERIOD. Если кнопка нажата, каждый интервал опроса происходит инкремент счетчика. Когда кнопку отпускают, значение счетчика сохраняется. Таким образом, можно определить, была ли кнопка нажата, и насколько долго.
См. определение в файле board_support_api.c строка 99
uint32_t get_uptime_ms | ( | void | ) |
Возвращает время с момента начала работы прошивки
См. определение в файле board_support_api.c строка 83
void init_board | ( | void | ) |
Функция выполняет настройку тактирования и инициализацию периферии, используемой демонстрационным приложением.
USART2 используется для реализации консоли с поддержкой printf (перемычки XP4 и XP5 должны стоять в положении 1-2) I2C1 используется для чтения датчика температуры и акселерометра Вывод PA5 подключен к пользовательскому светодиоду, расположенному на плате (перемычка XP8 должна стоять в положении 2-3) USART3 используется для коммуникации с NB-IoT модулем.
См. определение в файле board_support_api.c строка 207
void recall_device_settings | ( | device_setup_data_t * | data | ) |
Загрузка настроек устройства из области EEPROM.
[in] | data | - указатель на структуру, в которую будут скопированы данные из EERPOM |
См. определение в файле board_support_api.c строка 164
void store_device_settings | ( | device_setup_data_t * | data | ) |
Сохранение настроек устройства в область EEPROM.
[in] | data | - указатель на структуру типа device_setup_data_t, данные из которой будут записаны в EEPROM |
См. определение в файле board_support_api.c строка 158
void switch_LED | ( | uint8_t | state | ) |
Включает или выключает светодиод на плате.
[in] | state | 1 - включить светодиод, 0 - выключить светодиод. |
См. определение в файле board_support_api.c строка 117