Демонстрационная прошивка отладочного комплекта МТС NB-IoT
|
См. документацию.
10 volatile uint32_t uptime_counter=0;
12 volatile uint32_t button_press_counter=0;
13 volatile uint8_t button_press_detected=0;
24 int _write(
int fd,
const void *buf,
size_t count)
28 for (k=0; k<count; k++)
39 int _read(
int fd,
const void *buf,
size_t count)
43 for (k=0; k<count; k++)
46 #if ECHO_INPUT_CHARS == 1
48 #warning Firmware compiled with console echo option turned ON; this may cause problems with rapid input.
55 void TIM9_IRQHandler(
void)
57 if (TIM9->SR & TIM_SR_CC1IF)
64 if (TIM9->SR & TIM_SR_CC2IF)
67 if ((!(GPIOC->IDR &
PIN_MASK(USER_SW_PC))) && (!button_press_detected))
69 button_press_counter++;
72 if ((GPIOC->IDR &
PIN_MASK(USER_SW_PC)) && (!button_press_detected) && (button_press_counter!=0))
74 button_press_detected = 1;
85 return uptime_counter;
103 if (button_press_detected)
105 tmp = button_press_counter;
106 button_press_counter = 0;
107 button_press_detected = 0;
121 GPIOA->BSRRH =
PIN_MASK(USER_LED_PA);
125 GPIOA->BSRRL =
PIN_MASK(USER_LED_PA);
143 void FLASH_WriteEEPROM(
volatile uint32_t *eeprom_ptr,uint32_t *data_ptr,uint16_t data_size_words)
147 FLASH->PEKEYR = 0x89ABCDEF;
148 FLASH->PEKEYR = 0x02030405;
150 for (k=0; k<data_size_words; k++)
152 eeprom_ptr[k] = data_ptr[k];
155 FLASH->PECR = FLASH_PECR_PELOCK;
178 while ((str[ptr_r]!=0) && (ptr_r<max_length))
180 if (str[ptr_r]==0x7F)
195 str[ptr_w] = str[ptr_r];
209 volatile uint32_t safety_counter;
210 uint32_t calib_start;
217 RCC->CR |= RCC_CR_HSION;
226 RCC->CFGR |= RCC_CFGR_SW_HSI;
231 RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN;
232 RCC->APB1ENR |= RCC_APB1ENR_I2C1EN | RCC_APB1ENR_USART2EN | RCC_APB1ENR_USART3EN;
233 RCC->APB2ENR |= RCC_APB2ENR_TIM9EN | RCC_APB2ENR_TIM10EN | RCC_APB2ENR_USART1EN;
252 NVIC_EnableIRQ(USART2_IRQn);
258 printf(
"\r\n\r\nBoard started, console initialized.\r\n");
260 RCC->APB1ENR |= RCC_APB1ENR_PWREN;
263 if (!(RCC->CSR & RCC_CSR_LSERDY))
265 printf(
"Starting LSE...\r\n");
267 PWR->CR |= PWR_CR_DBP;
270 RCC->CSR |= RCC_CSR_LSEON;
288 RCC->CSR |= RCC_CSR_RTCEN | RCC_CSR_RTCSEL_0;
291 PWR->CR &= ~PWR_CR_DBP;
296 printf(
"Found LSE already running.\r\n");
301 printf(
"(!) Failed to start LSE.\r\n");
304 #ifdef CONFIGURE_CLOCK_OUT
306 #if defined(OBSERVE_LSE) && defined(OBSERVE_SYSCLK)
307 #error Only one clock source can be monitored at once
311 RCC->CFGR |= RCC_CFGR_MCO_LSE;
312 #warning Pin PA8 (Arduino-compatible: D7) is configured as MCO for LSE clock observation
313 printf(
"NOTICE: PA8 (Arduino D7) is configured to output LSE clock.\r\n");
315 #ifdef OBSERVE_SYSCLK
316 RCC->CFGR |= RCC_CFGR_MCO_SYSCLK;
317 #warning Pin PA8 (Arduino-compatible: D7) is configured as MCO for SYSCLK clock observation
318 printf(
"NOTICE: PA8 (Arduino D7) is configured to output SYSCLK.\r\n");
336 printf(
"I2C configured.\r\n");
352 NVIC_EnableIRQ(USART3_IRQn);
354 printf(
"USART3 configured.\r\n");
363 TIM9->DIER = TIM_DIER_CC1IE | TIM_DIER_CC2IE;
364 TIM9->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN;
365 TIM9->EGR = TIM_EGR_UG;
367 NVIC_EnableIRQ(TIM9_IRQn);
369 printf(
"Uptime timer started.\r\n");
371 printf(
"Calibrating delay loop value...\r\n");
volatile uint32_t CYCLES_PER_1SEC
Калиброванное значение: количество итераций пустого цикла за 1 секунду при текущей тактовой частоте....
#define USART123_AF_NO
Номер альтернативной функции, соответствующей USART1/2/3, согласно документации
#define OSC_STARTUP_CYCLES_MAX
#define PIN_MASK(pin_no)
Преобразует номер бита в битовую маску
int _read(int fd, const void *buf, size_t count)
Переопределение функции работы со входным потоком для использования scanf() с USART2.
uint32_t get_uptime_ms(void)
Возвращает время с момента начала работы прошивки
int _write(int fd, const void *buf, size_t count)
Переопределение функции работы с выходным потоком для использования printf() c USART2.
#define USART1_TX_PA
USART1 используется для реализации вывода printf()
void FLASH_WriteEEPROM(volatile uint32_t *eeprom_ptr, uint32_t *data_ptr, uint16_t data_size_words)
Запись в EEPROM.
#define PIN_AFRH(pin_no, af_no)
Формирует битовую маску для записи в регистр AFRH.
uint8_t UART_WaitRxByte(USART_TypeDef *uart_inst)
Ожидает приема байта через указанный USART.
volatile uint8_t LSE_failed
В случае, если генератор LSE запустить не удалось, значение этой переменной будет ненулевым.
#define GNSS_BAUDRATE
По умолчанию модули EVA M8 выдают данные на скорости 9600 бит/с
#define DEFAULT_CLOCK_FREQ
Значение тактовой частоты, на которой работает контроллер
void UART_SendByte(USART_TypeDef *uart_inst, uint8_t b)
Посылает байт через указанный USART.
void init_i2c(I2C_TypeDef *i2c_inst, uint32_t sys_clk)
Выполняет настройку модуля I2C для работы на стандартной частоте SDA, равной 100 кГц.
Структура, хранящая настройки работы основного демонстрационного приложения
#define MODE_GPIN
Режим цифрового входа
#define PIN_MODE(pin_no, pin_mode)
Формирует битовую маску для записи в регистр MODER.
void recall_device_settings(device_setup_data_t *data)
Загрузка настроек устройства из области EEPROM.
#define USART2_TX_PA
USART2 используется для приема данных от модуля GNSS.
void init_board(void)
Функция выполняет настройку тактирования и инициализацию периферии, используемой демонстрационным при...
void delay_ms(uint32_t N)
Приостанавливает выполнение программы на заданное время. Значение задержки задается в миллисекундах.
#define NB_PWR_ON_PC
Вывод порта, включающий питание модуля NB-IoT.
#define PIN_AFRL(pin_no, af_no)
Формирует битовую маску для записи в регистр AFRL.
#define SARA_R410M_DEFAULT_BAUDRATE
Скорость обмена с радиомодулем
#define MODE_GPOUT
Режим цифрового выхода
#define BTN_POLL_PERIOD
Интервал опроса кнопки, выраженный в отсчетах таймера.
uint32_t get_button_press(void)
Возвращает время удержания кнопки нажатой с момента предыдущего вызова функции.
#define NB_RESET_PC
Вывод порта, перезагружающий модуль NB-IoT.
void SARA_R410_PWR_ON_pulse(void)
Генерирует импульс низкого уровня продолжительностью примерно 500 мс на линии PWR_ON радиомодуля.
#define USART3_TX_PC
USART3 подключен к модулю NB-IoT.
void switch_LED(uint8_t state)
Включает или выключает светодиод на плате.
void store_device_settings(device_setup_data_t *data)
Сохранение настроек устройства в область EEPROM.
void init_uart(USART_TypeDef *uart_inst, const uint32_t baudrate, const uint32_t sys_clk, uint8_t enable_rxne_int)
Настройка модуля USART для работы с указанной скоростью.
#define CONSOLE_BAUDRATE
Значение скорости обмена для консоли (вывод printf() через USART1 и встроенный в плату USB-UART конве...
#define I2C1_AF_NO
Номер альтернативной функции, соответствующей I2C1, согласно документации
#define MODE_AF
Режим альтернативной функции
void apply_backspace(uint8_t *str, uint16_t max_length)
Модифицирует строку с учетом символов backspace.
#define TMR_CNT_1MSEC
Количество отсчетов таймера за 1 мс.