0. куски кода —
habrahabr.ru/post/139760/ — раздел «Список литературы». Также стоит скачать библиотеку для Ардуино — там уже есть работа с GPRS, можно посмотреть логику работы.
По части работы с UART рекомендую почитать
mycontroller.ru/category/mikrokontrolleryi-stm32/usart/
Еще стоит почитать форум разработчиков устройств сотовой связи:
electronix.ru/forum/index.php?s=655eb0cdb872286f07c344e441dfa245&showforum=130
1. Поставьте аппаратное.
2. При работе с модемом использовать таймауты ожидания — ждать ответа на свою команду не более N секунд. Также стоит учитывать, что в готовом изделии возможна ситуация, при котором ваш модем банально зависнет, лечиться передергиванием им питания со стороны микроконтроллера. Т.е. не рассчитывайте на надёжность модема и на то, что в конечном устройстве все будет также хорошо работать, как и у вас на столе. Ну и базовые рекомендации: не забывайте проверять уровень сгигнала (at+csq), состояние gprs-соединения и т.д…