Цитата(an24 @ May 19 2016, 11:06)

Я хотел, как мне казалось, сделать простую
вещь. Работая c UART в полудуплексе включить питание на SIM800, прочесть SMS, инициировать GPRS,
выполнить HTTP запрос, выключить питание.
P.S. Особую признательность вызывает URC. Если бы какой-нибудь программист с которым я работал сделал бы такое я бы его просто прибил. Надо же додуматься до такого - посылать неожидаемую нотификацию в последовательный порт, который работает в полудуплексе!
Чего-то я вас не пойму: какой-такой
"UART в полудуплексе" ?
Если вы решили придумать себе проблемы и потом их героически решать, то зачем обвинять разработчиков ?
Полудуплекс возможен только после управляющего МК, где будет ваш собственный простенький протокол.
Цитата(an24 @ May 19 2016, 17:51)

Если без прерываний и ухищрений типа DMA то не получится создать надежный код, который будет писать в UART и читать оттуда. Потому что в любой момент вам может приехать URC и заблокирует запись. Чтобы повысить надежность мне пришлось перед записью проверять RXNE и читать. Короче, костыль.
В нормальном дуплексном режиме, да еще с сигналами управления потоком, все будет нормально работать.
Мухи(прием) отдельно, котлеты(передача) отдельно. Буферы отдельные. Управление потоком отдельно для обоих направлений.
Где проблемы?
DMA есть далеко не у всех МК, но и без него все работает.
Цитата
А для чего сделали два UART? Не для того ли, чтобы сделать нормальный full duplex?
Два УАРТА
- или один только для отладки.
- или один для команд управления модемом, а второй для данных (хотя и данные могут быть многопоточные, т.к. возможно несколько параллельных подключений, которые обслуживаются мультиплексным протоколом).