Перейти к содержанию

    

Spider

Свой
  • Публикаций

    431
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Spider

  • Звание
    В поисках истины
  • День рождения 03.10.1984

Контакты

  • Сайт
    http://
  • ICQ
    597644
  • Yahoo
    spider_omsk

Информация

  • Город
    Россия

Старые поля

  • skype
    spider_omsk
  • Vkontakte
    spider84
  • G+
    spiderphone84

Посетители профиля

2 992 просмотра профиля
  1. Всем привет! Писал я писал прошивку и написал. Теперь захотелось сделать бутлоадер. Взял готовый бутлоадер, и подправил пару мест в своей прошивке: В Ld скрипте заменил FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 128K на FLASH (rx) : ORIGIN = 0x8002000, LENGTH = 120K В system_stm32f1xx.c убрал строки: #ifdef VECT_TAB_SRAM SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ #else SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ #endif а добавил их в самом начале main() SCB->VTOR = FLASH_BASE + 0x2000; /* Vector Table Relocation in Internal FLASH. */ На этом казалось бы и всё. Если стартовать прошивку отладчиком - всё работает. Линковщик собирает адреса начиная с 0х08002000 и так далее. В таком случае Reset_Handler находится по смещению 0x0800db7c, а main() в 0x0800bb7c Теперь немного о способе запуска основного кода из Bootloader: Первое что делаю перед запуском это: - Останавливаю используемый бутлоадером SysTick таймер: SysTick->CTRL = SysTick->LOAD = SysTick->VAL = 0; - запрещаю прерывания: __asm volatile ("cpsid i"); Уже от отчаянья сбрасываю NVIC: NVIC->ICER[0] = 0xFFFFFFFF; NVIC->ICER[1] = 0xFFFFFFFF; NVIC->ICER[2] = 0xFFFFFFFF; NVIC->ICPR[0] = 0xFFFFFFFF; NVIC->ICPR[1] = 0xFFFFFFFF; NVIC->ICPR[2] = 0xFFFFFFFF; Отключаю периферию: RCC->APB1RSTR = 0; RCC->APB2RSTR = 0; RCC->APB1ENR = 0; RCC->APB2ENR = 0; Сбрасываю RCC: RCC_DeInit(); Далее стандартные шаги расчёта вектора перехода: pProgResetHandler = (void(*)(void))(*((blt_addr *)(*(FLASH_BASE+0x2000)+0x00000004))); //Тут получается 0x0800db7c - та же цифра что и .Reset_Handler __set_MSP(FLASH_BASE+0x2000); pProgResetHandler(); while(1); // Это строка вроде как никогда не достижима И вот тут самое интересное. Вектор переходит на .Reset_Handler и идёт исполнять его код, но к моменту когда надо прыгнуть на main() в отладке видно что строка имеет положенный ей вид: bl 0x0800bb7c и он даже прыгает туда, и попадает по нужному адресу, но о УЖАС в окне отладки совсем другой код. Какой-то вырванный из середины прошивки код. НО ОН ПО ЭТОМУ АДРЕСУ. а сам main() где-то в другом месте. Совсем в другом месте. Как так то? Что я делаю не так? И естественно исполняя этот код процессор попадает в жуткие состояния. Помогите чем нить :) ЗЫ. Основная прошивка построена на FreeRTOS, но я не могу связать FreeRTOS и это состояние, т.к. до неё дело даже не доходит.
  2. Всем привет. Вот понадобилось написать сенсор давления в BLE. Взял я CC2541 модуль для обучения себя любимого и на базе примера Температурного датчика запилил Environment service с датчиком давления. Всё бы ничего и всё работает. Теперь я хочу понять как экономить батарейку. есть такой чудный метод как osal_pwrmgr_device( PWRMGR_BATTERY ); но как он работает? Когда она уходит в сон и на какое время? опять же, как проредить потребление? Я подумал что можно отключать Advertise на какие-нить 2-3 минуты, затем его включать на 10-15 секунд и по новой. Особой "динамики" не требуется. В свою очередь если кто-то успел зацепиться в эти 10-15 секунд, то уже не отключаться до конца сессии. Так вот. если я взведу таймер средствами osal_start_timerEx() на какие-нить 2-3 минуты, будет ли это корректно? Уснёт ли она на это время пока я всё отключил и жду события от таймера? Если не уснёт, то как уснуть?
  3. Цитата(Ruman @ Jun 21 2016, 15:24) Есть радиоканал на 860 МГц , безлицензионный диапазон, цифровой , на модуле от Silicon Labs. бла бла бла.. Всё это делает тот же nRF24LE1 с ценой значительно ниже. Если лень думать, там даже есть стек с борьбой с коллизиями и прыгание по каналам. У меня на батарейках работают датчики температуры и счётчики импульсов уже скоро ГОД непрерывно.
  4. Цитата(OKF @ Jun 19 2016, 07:46) nRf24L01 + CR2032. Минимум-минимор. А в пистолете что имеется. Контроллер какой? А в жилете? А я бы сказал nrf24le1 и на этом всё.
  5. bootlader для STM32M4

    dfu bootloader есть от самого STM32 в исходниках. Там, вроде, даже встречались с шифрованиями.
  6. Всем привет! Вот хочется освоить BLE (BT 4.x) для связи между поделками и "большим братом". Прикупил макеток с чипом cc2640 от Ti. Из коробки макетки определяются как BT-UART мосты и даже работают. Видны телефоном и компьютером по BT. Всё вроде хорошо. Скачал значит я с сайта Ti предложенную ими же CCS (это IDE на базе Eclipse с компилятором и отладчиком), скачал к ней BLE STACK 2.1 от туда же. Открыл даже любезно предложенный пример, собрал и залил в чип. И вот тут не понятно. Вроде как чип прошивку съел и заработал - отладчик по коду ходит, диоды моргают. Но вот в эфире BLE его не видать. Может ещё какие действия надо произвести? Я уже что только не делал, какие примеры не пробовал - ничего. Не получается и всё
  7. В stm8 вообще сложно добиться нужных задержек даже с nop, в виду особенностей работы внутреннего конвейера. Много интересного описано тут. с картинками и пояснениями.
  8. Не могу пробудить из сна nrf24le1

    Всем привет! Нарыл и оттёр от пыли 3 стареньких nrf24le1 модулька дабы реализовать на них дистанционный съём данных. Всё шло хорошо, пока я не попытался начать экономить батарейку и не начал усыплять проц. Сразу оговорюсь - усыплять пытаюсь в Memory retention, timers on. В документации сказано буквально следующее: ЦитатаWakeup source(s): From pin, wakeup TICK from timer or voltage level on pin (analog comparator wakeup) Для этого делаю такое: КодPWRDWN = 0x03; while(1); в результате оно вроде засыпает. Но вот разбудить не могу. А бужу так, точнее настраиваю: КодWUCON = 0x08; //Принудительно разрешить WUOPIRQ WUOPC0 = 0x40; //Внешнее прерывание по P0.6 IEN0 = 0x81; IEN1 = 0x08; // Wakeup on pin (WUOPIRQ) interrupt enable INTEXP =0x08; //Enable GP INT0 (from pin) 0 to IFP В результате прерывание приходит, но стоит усыпить проц, то всё - обратно только ресетом. Что я не так делаю то?
  9. Ну , что прощаемся с Atmel ?

    Дык давно пора... Они уверенно вели себя к вымиранию. Этого и стоило ожидать.
  10. Прописывание версии ПО (прошивки)

    Раз уж такая пьянка, а не расскажете как заставить make пересобирать конкретный *.c даже если в нём не было изменений?
  11. Прописывание версии ПО (прошивки)

    Цитата(ЯadiatoR @ Sep 7 2015, 11:45) Да что вы мучаетесь? напишите const volatile и будет вам счастье Опередил +1
  12. stm32f103 ADC?

    Конечно можно. 76 страница гласит ЦитатаIn devices delivered in VFQFPN and LQFP packages, VREF+ is internally connected to VDDA and VREF- is internally connected to VSSA. Devices that come in the TFBGA64 package have a VREF+ pin but no VREF- pin (VREF- is internally connected to VSSA), see Table 5 and Figure 7.
  13. Цитата(mcheb @ Aug 9 2015, 15:30) На столе рядом с друг другом, модули находятся в состоянии насыщения. Разнесите их метров на 10 Если речь идёт о том что затыкается, то увы. Он сам по себе такой оказался. Если оставить только его один в "эфире" то он всё равно затыкается. Перешил его в "сервер", теперь он больше слушает, всё работает. Хотя совершенно такой же модуль в режиме постоянной передачи прекрасно себя чувствует.