ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
559168
BaRaGoZ (12.11.2014 21:52, просмотров: 10157)
USART+STOP mode на STM32f405  Cитуация такая, в МК крутится программка которая опрашивает акс-р, и далее по USART1 скидывает результаты опроса "выше", также принимая команды "свыше" ) Вроде ничего сложного, если не одно но, надо снижать потребление, для этого сделано так: акселерометр накапливает 32 отсчета, генерит прерывание, МК в этот момент пробуждается забирает 32 отсчета, выполняет математику и опять в СТОП режим, после просчета математики МК в зависимости от результатов сообщает об этом "наверх", а вот обратная связь "ОТ ВЕРХНЕГО" уровня не работает, т.к. мы большую часть времени в СТОПе(где то 97%), а в этом режиме не работает тактирование перефирии(ХСЕ и ХСИ отключены) и мы не можем ловить прерывания. Из-за этого надо по приходу от УАРТ команды надо проснуться "от СТОПа", но в даташите сказана, что из СТОП режима выходим только по внешним прерываниям и событиям, просматривая главу про внешние прер-ия и события находим, что прерыания внешние можно настроить на срабатывание некоторых модулей(Ethernet, USB, RTC), УАРТА нет в списке... Решаю так, делаю ногу RX перед входом в СТОП как внешнее прерывание, входим в СТОП, просыпаемся по "действию" на RX ножке от верхнего уровня(например байт 0xFF перед байтами посылки команды). Затем иниц-ем УАРТ обратно, пытаемся принять пакет до конца, отрабатываем и т.д. Но вот не работает до конца такая концепция: 1)Например надо послать сверху 0x55 0x1 0x70 0x45, шлем 0xFF 0x55 0x1 0x70 0x45, расчитываем что по FF сработает внешнее прерывание, настроится УСАРТ и мы посылку остальную примем, но посылка теряется, начиная уже со второй посылки все нормально. Включил ЭХО(по приему сразу шлю этот байт) шлем 0xFF 0x55 0x1 0x70 0x45, получаем что то типа 0xFC 0xA8 и все... УСАРТ настроится вроде как успевает, дабы в ф--ии внешнего прерывания сразу после настройки УСАРТ шлю пару байт на верх, все проходит. Выполнение алгоритма делал "100" способами, пробовал и полнустью отрубать УАРТ перед СТОП режимом, и отключать только прерывания и вырубать ногу RX и т.д. Результат один, общение налаживается со второй посылки... 2)Немного пугает то, что после того как пришла команда сверху войти в СТОП, он входит в СТОП, а затем 1-2 раза проваливается в прерывание внешнее по RX(я там программно считаю до 3х, потом только включаю УАРТ обратно, деиницилизирую прерывание внешнее и тд) 3)Не понимаю зачем в регистре УАРТ(по даташиту) есть бит WAKE UP, и LIN режим со своим брейк байтом... может я что то не понимаю просто(не обратил внимание на важную мелочь и верчу себе мозг уже 2 дня))) ) Извиняюсь за отсутствие кода, если надо завтра выложу, пока только концепция, просто его надо нормально причесать, а то там "помойка" уже а не код, после 2 дней мучений) Может есть у кого какие мысли, буду благодарен?