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

data_stack

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
    Участник
  1. да именно это, просто не хочется изобретать велосипед. правильно ли я понимаю что это делается через прерывания alarm?
  2. Запуск таймера от RTC

    Нужно писать wav с настраиваемой частотой дискретизации. Беда в том, что это должно быть жестко привязано к RTC. Началась новая секунда - пошел новый отсчет таймера, а в прерывании таймера уже забираются данные. Хотелось бы чтобы RTC генерил триггер, который бы запускал таймер. Посмотрел апноты на RTC вроде ничего подходящего не нашел. Единственная идея соединить ноги RTC calibration out с какой нибудь ногой внешнего прерывания и внутри внешнего запускать свой таймер. Но прежде чем городить такой огород, хотелось бы понять, что другого выхода нет. Контроллер STM32L1.
  3. Как посчитать сабж для двух байт понятно, вопрос как посчитать его для одного байта. На выходе нужно получить бит
  4. Появились новые вопросы, по той же теме. 1. Записываю один блок на карту SD HC, после этого долго ничего не делаю, чтобы экономить энергию. Наблюдаю следующую ситуацию на осциллографе, сектор записывается 3-4мс, после этого ничего не делаю, но карта все еще жрет ток в течение 150мс и только после этого потребление прекращается. Получается потребление слишком жирное. Тестил много карт, результат одинаковый. Смотрел Simplified Specifications и даташиты разных производителей, явно ничего подобного не указано. Пробовал переводить в standby руками посылая CMD7, не помогает. Рубить питалово не вариант, нужно быстро выходить из сна. Затестил карты SD(которые не HC) у них похожая ситуация только таймаут 50мс. Вопрос, можно ли это время уменьшить или где это в документации описано? 2. Еще одна проблема из той же серии. Юзаю либу ST стираю сектор - стирается, статусы правильные все ок. После выполнения команды карта продолжает жрать ток 20мА, потыкал осциллом такты идут постоянно, пока либо не прочитаешь, либо не запишешь какой нибудь другой сектор. В standby сама не переходит. Собственно юзаю функцию как в примерах SPL, вопрос как выключить тактирование?
  5. STM32L151 режим STOP

    чутье не подвело, существует флаг, который нужно очищать, иначе каждый раз после входа в standby сразу же из него выходит. В SPL делаю так: PWR_ClearFlag(PWR_FLAG_WU);
  6. STM32L151 режим STOP

    не забыл, в любом случае после входа в стендбай контроллер перезагружается
  7. STM32L151 режим STOP

    Поднимаю тему, перетестил много раз - не работает. Упростил задачу, нужно включить контроллер и уйти сразу в standby, если wakeup нажат, то проснуться пересброситься и снова уйти в сон. int main() { RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_WakeUpPinCmd(PWR_WakeUpPin_3, ENABLE); delay_ms(5000); PWR_EnterSTANDBYMode(); } Что выходит на деле: в первый раз все по феньшую - контроллер уходит в сон, жмакаем wakeup и все ломается, контроллер просыпается, тут же засыпает, тут же снова пересбрасывается и так до бесконечности, пока не ресетнешь. Такое впечатление что после того как нажат wakeup нужно сбросить некий бит, что он отработал. Перерыл референс мануал но ничего не нашел похожего
  8. Никогда бы не догадался. Не могу подобрать слов, чтобы выразить благодарность. Огромнейшее спасибо! Заработало!
  9. stm32l1 чтение блока sdio

    Читаю блок с карты памяти sdhc через sdio, с помощью либы из примеров standart periph library. Когда читаю с помощью polling mode, тогда все работает нормально. Когда этой же функцией читаю при помощи DMA, то у меня теряются первые 3 байта. Не понимаю куда рыть...
  10. STM32L151 режим STOP

    Вы издеваетесь надо мной? Так и сделано stop_enable глобальная переменная, если 1 уходим в стоп, проблема в том, что не уходит он так в стоп. Переменная volatile.
  11. STM32L151 режим STOP

    Специально же написал: Ввожу в стоп не в прерывании.
  12. STM32L151 режим STOP

    Мозг дымится, прям беда какая то, никак не приручить STOP режим Есть кнопка 1, на которую нужно однократно нажать и ввести мк в стоп. Будить планирую другой кнопкой. void EXTI2_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line2) != RESET) { NVIC_DisableIRQ(EXTI2_IRQn); stop_enable = 1; LED1_TOGGLE(); EXTI_ClearITPendingBit(EXTI_Line2); } } В основном цикле чекаю флаг кнопки. После его срабатывания ухожу в стоп. Но беда в том, что контроллер не засыпает. Детектирую это светодиодом 2. while(1) { if(stop_enable == 1) { PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); stop_enable = 0; LED2_TOGGLE(); NVIC_EnableIRQ(EXTI2_IRQn); } } Если вводить в сон не по кнопке, то все ок, но нужно именно по кнопке. Создалось впечатление что NVIC_DisableIRQ(EXTI2_IRQn) не отрабатывает, проверил отдельно от этого куска кода - работает. По отдельности все работает, сама проблема в том что именно этот кусок не работает, как сделать по другому не понятно. ЗЫ видел аналогичные темы, выдергивание swd не помогло. Ввожу в стоп не в прерывании.
  13. Просто столкнулся с этой проблемой впервые, поэтому и не знаю как сделать так чтобы не наступать на грабли. По правде смутила плата Nucleo, ей кидаешь bin на флешку без всяких оберток и вроде как все работает. Хотя конечно это не показатель.
  14. Обновление прошивки

    Делаю бут, который будет обновлять прошивку с sd карты. Возникло пару вопросов, поэтому рассуждения вслух. Скомпилировал прошивку, получил bin файл, файл может получиться большого размера, в оперативку возможно не влезет, думаю писать в специально отведенные для этого сектора в начало/конец флеша - пока не понятно куда лучше. Собственно, читаю с карты этот бинарник, записал во флеш, хорошо бы его проверить, думаю использовать CRC. Еще хорошо бы знать отличается ли версия залитой прошивки, от той что на карте. Теперь, внимание вопрос, как вы бы делали это? Пока единственное решение - написать утилиту для пк, которая бы посчитала crc прошивки, и обернуть в какой то новый файл, с полями crc и версией, но почему то есть смутное подозрение что никто так не делает.
  15. Если кому интересно, то в конкретно моем случае оказалось не выгодно использовать DMA. Разница не велика, порядка 400мкА, но все таки в пользу использования прерываний. Кроме того, без ДМА используется меньше оперативной памяти. Уточняю, что это справедливо только для именно моей ситуации.
×
×
  • Создать...