[Решенная] проблема с прочтением сериала от STM32L053R8

Borombo96
Вторник 21 августа 2018 г. 15:14
Привет,
Я работаю над приложением, в котором используется плата прорыва SIM7000 и STM32L053R8 (с платой расширения I-NUCLEO-LRWAN1).
Теперь я должен прочитать данные из GPS с SIM7000 в сериале STM32L0.
Когда чип соединяется со спутником, я прочитал это в сериале:

AT+CGNSINF

+Cgnsinf: 0,,,,,,,,,,,,,,,,,,,,

ХОРОШО

Команд отправить
AT+CGNSINF

+CNGSINF: 1,0 ,,,,,, 0 ,,,,, 1 ,,, 49,,

ХОРОШО

Команд отправить

Муравей, это нормально.. Но когда он подключается к спутнику, я прочитал на сериале:


Команд отправить
AT+CGNSINF

+CGNSINF: 1,1,20180821145743.000,38.121140,15.666
Команд отправить
AT+CGNSINF

+CGNSINF: 1,120180821145745.000,38.121241,15.665
Команд отправить
AT+CGNSINF

+CGNSINF: 1,1,20180821145747.000,38.121229,15.665



Я не понимаю, почему данные после +cgnsinf не полны, на самом деле это должно быть что -то вроде:

AT+CGNSINF
+CGNSINF: 1,1,20180821151003.000,38.121095,15.666267,80.200,0.00,0.0,1, 0.7,1.0,0.7, 18,10 ,,, 46,,


Код, который я использую, это: HardwareSerial SerialForSim7000(PA_10, PA_9); HardwareSerial SerialLora(PC_11, PC_10); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); SerialForSim7000.begin(9600); SerialForSim7000.write("AT+CGNSCFG=1 \r\n"); delay(500); SerialForSim7000.write("AT+CGNSPWR=1 \r\n"); delay(500); } void loop() // run over and over { SerialForSim7000.write("AT+CGNSINF \r\n"); while(SerialForSim7000.available()) Serial.write(SerialForSim7000.read()); Serial.println(); Serial.write("comand send"); Serial.println(); delay(2000); }

Эдогальдо
Вторник 21 августа 2018 г. 15:39
Попробуйте проверить размер буфера для чтения SerialForsIm7000.

Borombo96
Вторник 21 августа 2018 г. 18:46
[Эдогальдо - Вторник 21 августа 2018 г. 15:39] - Попробуйте проверить размер буфера для чтения SerialForsIm7000.
Как я могу проверить это?

Могу ли я исправить это с более низкой скоростью бода?

Тай

Borombo96
Чт 23 августа 2018 г., 11:25
Кто -то может мне помочь, как я могу увеличить размер буфера? Я читаю, что модификация библиотеки не очень хорошая вещь..
Тай 4 Помощь 😊

Borombo96
Вторник 28 августа 2018 г. 8:29
Кто -то может мне помочь? :(

Мадиас
Вторник 28 августа 2018 11:31
Вы можете попытаться наверстать упущенное.читать(); в массив и после окончания просто распечатать массив сериалом.печать

Мадиас
Вторник 28 августа 2018 г. 11:35
Я не владею правлением или LRWAN, но после некоторого Google:
Вы можете попытаться поднять буфер здесь:
https: // github.com/stm32duino/i-nucleo- ... HW_USART.час
Строка 53: #define serial_rx_buffer_size 256
Я бы попробовал 512 или что -то в этом роде.
Если это работает, пожалуйста, откройте проблему на GitHub.

Borombo96
Пт 31 августа 2018 г. 8:29
[Мадиас - Вторник 28 августа 2018 г. 11:35] - Я не владею правлением или LRWAN, но после некоторого Google:
Вы можете попытаться поднять буфер здесь:
https: // github.com/stm32duino/i-nucleo- ... HW_USART.час
Строка 53: #define serial_rx_buffer_size 256
Я бы попробовал 512 или что -то в этом роде.
Если это работает, пожалуйста, откройте проблему на GitHub.
Тай за помощь мадам!
Я пробую это, но это не работает. Это код #include "LoRaRadio.h" #include "lora_driver.h" HardwareSerial SerialForSim7000(PA_10, PA_9); HardwareSerial SerialLora(PC_11, PC_10); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); SerialForSim7000.begin(9600); SerialForSim7000.write("AT+CGNSCFG=1 \r\n"); delay(500); SerialForSim7000.write("AT+CGNSPWR=1 \r\n"); delay(500); } void loop() // run over and over { SerialForSim7000.write("AT+CGNSINF \r\n"); while(SerialForSim7000.available()) Serial.write(SerialForSim7000.read()); Serial.println(); Serial.write("comand send"); Serial.println(); delay(2000); }

fpistm
Пн сентября 03, 2018 8:54 утра
Попробуйте не вызывать Serialforsim7000.Читать в сериале.писать: Serial.write(SerialForSim7000.read());

Borombo96
Пн сентября 03, 2018, 16:06
Я исправил его с небольшой задержкой, поэтому сериал начинает печатать результат после некоторых байтов... char risp[94]; String latval; double lat; String longval; HardwareSerial SerialForSim7000(PA_10, PA_9); HardwareSerial SerialLora(PC_11, PC_10); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); SerialForSim7000.begin(9600); SerialForSim7000.write("AT+CGNSCFG=1 \r\n"); delay(500); SerialForSim7000.write("AT+CGNSPWR=1 \r\n"); delay(500); } void loop() // run over and over { SerialForSim7000.write("AT+CGNSINF \r\n"); delay(30); while(SerialForSim7000.available()){ for(int n=0; n<94; n++) { risp[n] = SerialForSim7000.read(); //here I put the char into array } } Serial.println(); Serial.write("comand send"); Serial.println(); for(int n=36;n<55;n++){ Serial.print(risp[n]); //I print the arry } Serial.println(); for(int n=36; n<45;n++) latval += risp[n]; //I put the firs part ofarray into a String Serial.println(latval); float lat=latval.toFloat(); //convert a string into floa Serial.println(lat); latval=""; //clen string delay(2000); }

fpistm
Вторник 04 сентября 2018 г. 10:16 утра
Я сделал пиар, чтобы добавить к сути:
https: // github.com/stm32duino/arduino_c ... 2/тяга/313

Я тестировал с этим эскизом на основе вашего:
void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); for (uint32_t n = 0; n < sizeof(risp); n++) { Serial.print(risp[n]); //I print the array } Serial.println(); for (uint32_t n = 0; n < 9; n++) latval += risp[n]; //I put the firs part ofarray into a String Serial.println(latval); float flat = latval.toFloat(); //convert a string into float Serial.println(flat); lat = latval.toDouble(); //convert a string into double Serial.println(lat, 6); } void loop() // run over and over { }

Borombo96
Вторник 04 сентября 2018 14:08
Я сделал изменение в библиотеке, но у меня есть эта ошибка:

'Class String' не имеет члена "Toduble"

это код в файле wstring.CPP: (строка 741-750)
float String::toFloat(void) const { return float(toDouble()); } double String::toDouble(void) const { if (buffer) return atof(buffer); return 0; }

fpistm
Вторник 04 сентября 2018 14:28
[Borombo96 - Вторник 04 сентября 2018 г. 14:08] - Это корень файла wstring.H и WSTRING.CPP C: \ Program Files (x86) \ arduino \ ardware \ arduino \ avr \ cores \ arduino
Это не правильное ядро, это AVR Core, а не STM32.

Вы можете найти источник, используя это:
https: // github.com/stm32duino/wiki/wiki ... Повторные находки

Borombo96
Сб 08 сентября 2018 12:03
Тай, это работа 😀

Я думаю, что бод для SIM7000 - 115200. Я видел 9600 в вашем коде и удивился... Я новичок в SIM7000G, но провел весь день сегодня, изучая команды AT...