Jump to content

    

Mysteo

Свой
  • Content Count

    388
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Mysteo

  • Rank
    Местный
  • Birthday 01/05/1991

Старые поля

  • Vkontakte
    Array

Информация

  • Город
    Array

Контакты

  • Skype
    Array

Recent Profile Visitors

1787 profile views
  1. Здравствуйте! Приобрел данный набор для изучения ZigBee и сразу же попал в какую-то не логичную ситуацию. STM предоставляет в паке STM32Cube_FW_WB примеры приложений ZigBee для Nucleo и USB Dongle. Открываю первый попавшийся пример из P-NUCLEO-WB55.USBDongle - ZigBee_MeterId_Server_Coord. Читаю readme : For this application it is requested to have: - 1 STM32WB55xx (Nucleo or USB dongle) board loaded with: - wireless coprocessor : stm32wb5x_Zigbee_FFD_fw.bin - application : Zigbee_MeterId_Server_Coord - 1 or more STM32WB55xx board loaded with: - wireless coprocessor : stm32wb5x_Zigbee_FFD_fw.bin - application : Zigbee_MeterId_Client_Router Четко сказано , что нужно залить стэк stm32wb5x_ZigBee_FFD_fw.bin в донгл. Но проблема в том , что ZigBee стеки урезанный RFD и полный FFD занимают больше 256 килобайт флэши и в DONGLE данный стек никак не залить, к тому же в документации в радиостекам написано, что нельзя ZigBee прошить. Получается, что на одном наборе нельзя ничего с ZigBee провернуть ?
  2. Уже нашел, не хватало выхода из данной функции при закрытии TCP. Почему то без оптимизации нормально работало все) tcp_recv_func(void *arg, struct altcp_pcb *pcb, struct pbuf *p, err_t r) { if (p == NULL) { r = altcp_close(pcb); if (r != 0) { return r; } return ERR_OK; }
  3. В общем проблема то была не в буте , а в том что когда билд создается под Release , была включена оптимизация по скорости, а когда Debug то оптимизация отключена. Вот собственно и все)
  4. Что то совсем ничего не понимаю. Убрал условие if (updateKey == START_FIRMWARE_SIGNATURE) и сразу прыгаю в основное приложение. В основном приложении снова ловлю hard fault после того как TCP соединение закроется. Закомменчу MX_USART3_UART и SystemClock_Config , код уменьшается до 6 килобайт FLASH и все работает нормально. Создаю переменную в программе Boot static const uint8_t test[4000] , размер FLASH программы бут 10 килобайт, заливаю. С основной программой никаких проблем нет. Адреса BOOT и основной программы не переплетаются ни сколько.....не пойму что за фигня.
  5. В общем добавил я _no_init переменную все работает. Но опять основная программа в hard fault падает после того как TCP соединение закроется. if (updateKey == START_FIRMWARE_SIGNATURE) { JumpToApplication(); } /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART3_UART_Init(); MX_CRC_Init(); /* USER CODE BEGIN 2 */ HAL_UART_Transmit(&huart3, bootHelloWord, (sizeof(bootHelloWord)-1),1000); updateKey = START_FIRMWARE_SIGNATURE; HAL_NVIC_SystemReset(); Вот сейчас элементарно вот такой кусок программы работает. По идее после HAL_NVIC_SystemReset вся периферия должна была сброситься и никаких проблем в основной программе не должно быть. Но если я закомменчу SystemClock_Config , MX_GPIO, MX_USART3 то все работает нормально
  6. Вот как , не знал о такой фишке. Спасибо. И что если значение в данной секции изменить и сделать перезагрузку МК , значение не изменится?
  7. данная секция noinit находится во FLASH? Если же эта секция в SRAM то после перезагрузки же там снова появится дефолтное значение?
  8. Спасибо, да заметил, что дело в SystemClock_Config(); не смотря на то что в Bootloader'е и основной программе одно и тоже сконфигурированно, но если закомментить в буте настройку тактирования SystemClock_Config(); то основная программа работает нормально. Да вроде бы правильно перенос векторов выполнил. В файле основной программы в system_stm32f4xx.c указал #define VECT_TAB_OFFSET 0x8000 Я использую CLion , раньше трудился в Keil Uvision
  9. Что-то у меня большие проблемы все равно после перехода из бута в основную программу. Не понимаю как нормально отдебажиться. Так как бутлоадер и основная программа по сути два разных проекта. Вижу только что в hard fault программа падает после того как TCP соединение закроется. А что не так, не пойму. Если загружаться без бутлоадера, то программа работает без проблем. В основной программе FreeRTOS используется, может что не учел после перехода из бут ? То есть у Вас алгоритм примерно такой: Основное приложение хочет обновиться и в RAM выставляет определенные значения, после чего выполняется переход в Boot без сброса микроконтроллера?
  10. Потрите пожалуйста сообщение, не в той теме отписался
  11. А откуда берется это число после сброса МК, если в SRAM после сброса ничего нету?
  12. Спасибо! Что-то сразу так и не догадался сделать, ну впервый раз с загрузчиком дело имею, еще ни на одни грабли наступлю
  13. Спасибо, а как это сделать? Ведь после reset MK опять Boot запустится
  14. Разобрался, конфликт GPIO был. Хоть в основной программе GPIO заново инициализируется, но что то все равно из бута осталось в регистрах GPIO .
  15. Всех с наступившим новым годом! Дорогие форумчане ситуация следующая. Добавил кастомный бутлоадер, размер его 6 килобайт. Бутлоадер по адресу 0x08000000 , основная программа по адресу 0x08008000. Функция перехода в основную программу: uint32_t test; test = *(__IO uint32_t*)APPLICATION_START_ADDRESS; if ((test & 0x2FFF0000 ) == 0x20030000) { /* First, disable all IRQs */ __disable_irq(); uint32_t jump_address = *(__IO uint32_t *)(APPLICATION_START_ADDRESS + 4); /* Set the main stack pointer to to the application start address */ __set_MSP(*(__IO uint32_t *)APPLICATION_START_ADDRESS); // Create function pointer for the main application void (*pmain_app)(void) = (void (*)(void))(jump_address); HAL_FLASH_Lock(); // Now jump to the main application pmain_app(); } Переход осуществляется, основная программа запускается. В основной программе добавил в файле system_stm32f4xx.c добавил следующее: #ifdef DEBUG #define VECT_TAB_OFFSET 0x0000 /*!< Vector Table base offset field. This value must be a multiple of 0x200. */ #elif RELEASE #define VECT_TAB_OFFSET 0x8000 /*!< Vector Table base offset field. This value must be a multiple of 0x200. */ /******************************************************************************/ #endif и в cmake файле соответственно разные линкер скрипты исходя из DEBUG либо RELEASE. Все работает, только FreeRTOS задачи стали неадекватно работать. Пока не пойму в чем причина, не знаю как запустить отладку если билд под RELEASE. Может есть какие то соображения опытных пользователей?