I have an stm32f103 custom board with a gps attached the scketch below is working ok but i don’t have printf function on this family mcu does someone has a trick to make printf function to work
//#include “stm32f103c8t6.h”
#include <Arduino.h>
//#include <stdio.h>
#include <Adafruit_GPS.h>
#include <HardwareSerial.h>
#include <stdio.h>
// what's the name of the hardware serial port?
#define GPSSerial Serial2
// Connect to the GPS on the hardware port
Adafruit_GPS GPS(&GPSSerial);
// Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
// Set to 'true' if you want to debug and listen to the raw GPS sentences
#define GPSECHO false
uint32_t timer = millis();
void setup() {
//while (!Serial); // uncomment to have the sketch wait until Serial is ready
// connect at 115200 so we can read the GPS fast enough and echo without dropping chars
// also spit it out
Serial.begin(115200);
Serial1.begin(115200);
Serial.println("Adafruit GPS library basic parsing test!");
// 9600 NMEA is the default baud rate for Adafruit MTK GPS's- some use 4800
GPS.begin(115200);
// uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude
//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
// uncomment this line to turn on only the "minimum recommended" data
//GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
// For parsing data, we don't suggest using anything but either RMC only or RMC+GGA since
// the parser doesn't care about other sentences at this time
// Set the update rate
//GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate
// For the parsing code to work nicely and have time to sort thru the data, and
// print it out we don't suggest using anything higher than 1 Hz
// Request updates on antenna status, comment out to keep quiet
//GPS.sendCommand(PGCMD_ANTENNA);
delay(1000);
// Ask for firmware version
// GPSSerial.println(PMTK_Q_RELEASE);
}
void loop() // run over and over again
{
// read data from the GPS in the 'main loop'
char c = GPS.read();
// if you want to debug, this is a good time to do it!
//if (GPSECHO)
//if (c) Serial.print(c);
// if a sentence is received, we can check the checksum, parse it...
if (GPS.newNMEAreceived()) {
// a tricky thing here is if we print the NMEA sentence, or data
// we end up not listening and catching other sentences!
// so be very wary if using OUTPUT_ALLDATA and trying to print out data
Serial.print(GPS.lastNMEA()); // this also sets the newNMEAreceived() flag to false
if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
return; // we can fail to parse a sentence in which case we should just wait for another
}
// approximately every 2 seconds or so, print out the current stats
if (millis() - timer > 1000) {
timer = millis(); // reset the timer
int H = (GPS.hour);
int Mn = (GPS.minute);
int S = (GPS.seconds);
int nb = ((int)GPS.satellites);
String T = (String(H) + ":" + String(Mn) + ":" + String(S));
int Sp = (GPS.speed);
int Cog = (GPS.angle);
float Long = (GPS.longitude);
float LongS = (Long - (Long * 60)) / -1000;
int LongD = (GPS.longitude) / 100;
int LongM = ((GPS.longitude) - (LongD * 100));
char Long1 = (GPS.lon);
int Lat2 = (GPS.latitude);
float Lat = (GPS.latitude);
float LatS = ((Lat2 - Lat) * -60);
int LatD = (GPS.latitude) / 100;
int LatM = ((GPS.latitude) - (LatD * 100));
char Lat1 = (GPS.lat);
//Serial1.println("%.2i-%i'%2.3f%c-%.2i-%i'%2.3f%c-%.2i-%.2i-%i-%.2i-%.2i-%.2i\\n",LatD,LatM,LatS,Lat1,LongD,LongM,LongS,Long1,Sp,nb,Cog,H,Mn,S);
Serial1.printf("%.2i-%i'%2.3f%c-%.2i-%i'%2.3f%c-%.2i-%.2i-%i-%.2i-%.2i-%.2i\\n", LatD, LatM, LatS, Lat1, LongD, LongM, LongS, Long1, Sp, nb, Cog, H, Mn, S);
String message = String(LatD) + "-" + String(LatM) + "-" + String(LatS) + "-" + String(Lat1) + "-" + String(LongD) + "-" + String(LongM) + "-" + String(LongS) + "-" + String(Long1) + "-" + String(Sp) + "-" + String(nb) + "-" + String(Cog) + "-" + String(H) + "-" + String(Mn) + "-" + String(S);
Serial1.println(message);
}
}