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

Bil

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

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

  • Посещение

Репутация

0 Обычный

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

Блок последних пользователей отключён и не показывается другим пользователям.

  1. В программе оно когда от порта используется только приемо/передатчик. 2.2 нельзя, китайский модуль sim800l не имеет соответствующих дырок, иначе вопрос и не появился бы. А вот 0, 0 ЕЩЕ раз попробовал. И офигел, и контроллер все понимал, и ксоны кончились... С этого, от безысходности, начинал. Похоже, я настраивал поток в начальный затуп, так как из последних изменений только начальная пауза. Ибо положенных мне после старта RDY и других URC я в отладчике так и не увидел. Слишком медлеено он стартует, походу. Натолкнула на паузу странная работа с оповещением о смс. Под отладчиком приходят ожидаемые +CMT. А без отладчика (в реале) присовывал мне +CMTI. В листинге видно сколько всего надо сделать до управления форматом оповещения. Только с большой паузой на старте модем адекватно съел команды когда они ему приходили без паузы отладчика. Кстати, про сон. Общее потребление приблуды в работе 27мА. При засыпании sim потребление падает до 18мА. При засыпании контроллера - до 13мА. Питая контроллер отлельно, определил, что он жрет в работе около 8мА. То есть, засыпает до 3мА. А вот sim никак на заявленный 1мА близко не выходит. Кроме них есть два dc-dc и два делителя на пол мА в сумме. Всем спасибо, все , что хотел, получил.
  2. Зачем он сообщает при "отключенном" по даташиту порте? Модуль кастрат. Аппаратного управления сделать не могу. Без контроля модуль может, контроллер - нет. Да и не знаю что из этого вышло бы. С другой стороны, почему контроллер не режет управляющие символы?.. Revision:1418B04SIM800L24
  3. Настройка модуля. Условно. Контроль удален. Все выполняется без ошибок Put_Modem ( "AT+IFC=1,1", 0, TRUE ); Put_Modem ( "AT+IPR=4800", 0, TRUE ); Put_Modem ( "ATE0", 0, TRUE ); Put_Modem ( "ATV1", 0, TRUE ); Put_Modem ( "AT+CMEE=1", 0, TRUE ); Put_Modem ( "AT+CLIP=1", 0, TRUE ); Put_Modem ( "AT+CMGF=0", 0, TRUE ); Put_Modem ( "AT+CSCS=\"UCS2\"", 0, TRUE ); Put_Modem ( "AT+CSCB=1", 0, TRUE ); Put_Modem ( "AT+CPMS=\"ME_P\",\"ME_P\",\"ME_P\"", 0, TRUE ); Put_Modem ( "AT+CMGDA=6", 0, TRUE ); Put_Modem ( "AT+CNMI=3,2", 0, TRUE ); Put_Modem ( "AT+DDET=1,100,0,0", 0, TRUE ); Put_Modem ( "AT+CSGS=0", 0, TRUE ); Put_Modem ( "AT+CNETLIGHT=0", 0, TRUE ); Put_Modem ( "AT+CSCLK=1", 0, TRUE ); Перевод модуля в спать void Set_Modem_Low_Power ( void ) { GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_SET ); } Вывод модуля из спать void Set_Modem_Std_еPower ( void ) { uint32_t Time = RTC_GetCounter (); GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_RESET ); while ( ( RTC_GetCounter () - Time ) < 2 ); } Извлечение байта void USART1_IRQHandler ( void ) { if ( USART_GetFlagStatus ( USART1, USART_FLAG_RXNE ) != RESET ) { uint8_t Byte = USART_ReceiveData ( USART1 ); if ( ( Byte != 0x11 ) && ( Byte != 0x13 ) ) { *USART_Write_Pointer++ = Byte; if ( USART_Write_Pointer == ( USART_Buffer + USART_BUFFER_SIZE ) ) USART_Write_Pointer = USART_Buffer; } } } Настройка околомодульного железа GPIO_StructInit ( &GPIO_InitStruct ); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init ( GPIOA, &GPIO_InitStruct ); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_Init ( GPIOA, &GPIO_InitStruct ); USART_StructInit ( &USART_InitStruct ); USART_InitStruct.USART_BaudRate = 4800; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init ( USART1, &USART_InitStruct ); USART_Cmd ( USART1, ENABLE ); USART_ITConfig ( USART1, USART_IT_RXNE, ENABLE ); Сейчас не могу сказать версию, забыл посмотреть. Но. Заменил позапрошлогодний модуль 800l на модуль, купленный в этом году. Никакой разницы. Сейчас подключил RI от модуля. Перед переводом в сон контроллера перевожу ноги rx и tx в вывод и верхнее состояние. Чтобы не прерываться от этих ксонов. По прерыванию от RI перенастраиваю ноги в правильный режим и включаю тактирование usart контроллера. С удивлением вижу, что ничего не теряю. Для этого, на всякий, максимально понизил скорость порта. Задачу решил. От ксонов не избавился. Что-то я с портом контроллера или модулем не доделал.
  4. Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает. Ксоны-ксофы так и сыпятся. Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.
  5. Можно. Но. Чтение все равно придется сделать по прерыванию. А это будет будить контроллер. По опросу, как оказалось, не успеваю вычитывать. Да и безобразно это по логике. Через dma буду постоянно забивать буфер этими xon'ами. Попробую уводить в сон sim800 по первому варианту - через dtr. Там прозрачнее пробуждение и, судя по описанию, другой вариант мониторинга порта для сна. Может он совсем заснет...
  6. 11h - 13h это XON - XOFF. Откуда они берутся по-прежнему не понятно. Флагов ошибок нет. Отключить управление потоком на stm32, насколько я понимаю, нельзя.
  7. Добрый день. Имеется китайская платка с обвесом sim800l. В целом, все, что хотел получить от модуля через stm32f1x, получил. Осталось заставить модуль уходить в сон когда ему нечего делать. Судя по амперметру, модуль вполне уменьшает потреблние вдвойку через 5 сек неактивности в режиме "AT+CSCLK=2". Но! Модуль непрерывно мечет байты 0x11, 0x13 на вход контроллера по USART. Без сна все работает идеально, никакой левоты, после вывода из сна все также работает корректно. Что за мусор идет в порт во сне? Наводки от отключенного передатчика? Пробовал подсунуть резистор 10к с RX контроллера на землю. Никого не впечатлил :) Есть ли ответ/идеи по подавлению мусора? Спасибо. PS. Мусор не дает перевести контроллер в сон. Работе, в принципе, не мешает.
×
×
  • Создать...