|
Демонстрационная прошивка отладочного комплекта МТС 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
1.8.16