kopia lustrzana https://github.com/Qyon/STM32_RTTY
Poprawiona komunikacja z ubloxem
rodzic
7803f9b43c
commit
fc017337be
3
main.c
3
main.c
|
@ -33,7 +33,7 @@ unsigned int send_cun; //frame counter
|
||||||
char status[2] = {'N'};
|
char status[2] = {'N'};
|
||||||
int napiecie;
|
int napiecie;
|
||||||
|
|
||||||
volatile char flaga = ((((tx_delay / 1000) & 0x0f) << 3) | Smoc);
|
volatile char flaga = 0;//((((tx_delay / 1000) & 0x0f) << 3) | Smoc);
|
||||||
uint16_t CRC_rtty = 0x12ab; //checksum
|
uint16_t CRC_rtty = 0x12ab; //checksum
|
||||||
char buf_rtty[200];
|
char buf_rtty[200];
|
||||||
char menu[] = "$$$$$$STM32 RTTY tracker by Blasiu, enjoy and see you on the HUB... \n\r";
|
char menu[] = "$$$$$$STM32 RTTY tracker by Blasiu, enjoy and see you on the HUB... \n\r";
|
||||||
|
@ -141,7 +141,6 @@ int main(void) {
|
||||||
delay_init();
|
delay_init();
|
||||||
ublox_init();
|
ublox_init();
|
||||||
|
|
||||||
|
|
||||||
GPIO_SetBits(GPIOB, RED);
|
GPIO_SetBits(GPIOB, RED);
|
||||||
USART_SendData(USART3, 0xc);
|
USART_SendData(USART3, 0xc);
|
||||||
radio_rw_register(0x02, 0xff, 0);
|
radio_rw_register(0x02, 0xff, 0);
|
||||||
|
|
64
ublox.c
64
ublox.c
|
@ -10,6 +10,9 @@
|
||||||
|
|
||||||
GPSEntry currentGPSData;
|
GPSEntry currentGPSData;
|
||||||
volatile uint8_t active = 0;
|
volatile uint8_t active = 0;
|
||||||
|
volatile uint8_t ack_received = 0;
|
||||||
|
volatile uint8_t nack_received = 0;
|
||||||
|
|
||||||
void _sendSerialByte(uint8_t message) {
|
void _sendSerialByte(uint8_t message) {
|
||||||
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {
|
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {
|
||||||
}
|
}
|
||||||
|
@ -71,6 +74,12 @@ void ublox_init(){
|
||||||
uBloxPacket msgcfgrst = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x04, .payloadSize=sizeof(uBloxCFGRSTPayload)},
|
uBloxPacket msgcfgrst = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x04, .payloadSize=sizeof(uBloxCFGRSTPayload)},
|
||||||
.data.cfgrst = { .navBbrMask=0xffff, .resetMode=1, .reserved1 = 0}
|
.data.cfgrst = { .navBbrMask=0xffff, .resetMode=1, .reserved1 = 0}
|
||||||
};
|
};
|
||||||
|
init_usart_gps(38400, 1);
|
||||||
|
_delay_ms(10);
|
||||||
|
send_ublox_packet(&msgcfgrst);
|
||||||
|
_delay_ms(800);
|
||||||
|
init_usart_gps(9600, 1);
|
||||||
|
_delay_ms(10);
|
||||||
send_ublox_packet(&msgcfgrst);
|
send_ublox_packet(&msgcfgrst);
|
||||||
_delay_ms(800);
|
_delay_ms(800);
|
||||||
|
|
||||||
|
@ -82,28 +91,36 @@ void ublox_init(){
|
||||||
|
|
||||||
_delay_ms(10);
|
_delay_ms(10);
|
||||||
|
|
||||||
|
uBloxPacket msgcfgrxm = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x11, .payloadSize=sizeof(uBloxCFGRXMPayload)},
|
||||||
|
.data.cfgrxm = {.reserved1=8, .lpMode=4}};
|
||||||
|
|
||||||
|
do {
|
||||||
|
send_ublox_packet(&msgcfgrxm);
|
||||||
|
} while (!ublox_wait_for_ack());
|
||||||
|
|
||||||
uBloxPacket msgcfgmsg = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x01, .payloadSize=sizeof(uBloxCFGMSGPayload)},
|
uBloxPacket msgcfgmsg = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x01, .payloadSize=sizeof(uBloxCFGMSGPayload)},
|
||||||
.data.cfgmsg = {.msgClass=0x01, .msgID=0x02, .rate=1}};
|
.data.cfgmsg = {.msgClass=0x01, .msgID=0x02, .rate=1}};
|
||||||
send_ublox_packet(&msgcfgmsg);
|
|
||||||
_delay_ms(10);
|
do {
|
||||||
uBloxPacket msgcfgrxm = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x11, .payloadSize=sizeof(uBloxCFGRXMPayload)},
|
send_ublox_packet(&msgcfgmsg);
|
||||||
.data.cfgrxm = {.reserved1=8, .lpMode=4}};
|
} while (!ublox_wait_for_ack());
|
||||||
send_ublox_packet(&msgcfgrxm);
|
|
||||||
_delay_ms(10);
|
|
||||||
|
|
||||||
msgcfgmsg.data.cfgmsg.msgID = 0x6;
|
msgcfgmsg.data.cfgmsg.msgID = 0x6;
|
||||||
send_ublox_packet(&msgcfgmsg);
|
do {
|
||||||
_delay_ms(10);
|
send_ublox_packet(&msgcfgmsg);
|
||||||
|
} while (!ublox_wait_for_ack());
|
||||||
|
|
||||||
msgcfgmsg.data.cfgmsg.msgID = 0x21;
|
msgcfgmsg.data.cfgmsg.msgID = 0x21;
|
||||||
send_ublox_packet(&msgcfgmsg);
|
do {
|
||||||
_delay_ms(10);
|
send_ublox_packet(&msgcfgmsg);
|
||||||
|
} while (!ublox_wait_for_ack());
|
||||||
|
|
||||||
uBloxPacket msgcfgnav5 = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x24, .payloadSize=sizeof(uBloxCFGNAV5Payload)},
|
uBloxPacket msgcfgnav5 = {.header = {0xb5, 0x62, .messageClass=0x06, .messageId=0x24, .payloadSize=sizeof(uBloxCFGNAV5Payload)},
|
||||||
.data.cfgnav5={.mask=0b00000001111111111, .dynModel=8, .fixMode=3, .fixedAlt=0, .fixedAltVar=10000, .minElev=15, .drLimit=0, .pDop=60, .tDop=60,
|
.data.cfgnav5={.mask=0b00000001111111111, .dynModel=7, .fixMode=2, .fixedAlt=0, .fixedAltVar=10000, .minElev=5, .drLimit=0, .pDop=25, .tDop=25,
|
||||||
.pAcc=100, .tAcc=300, .staticHoldThresh=0, .dgpsTimeOut=2, .reserved2=0, .reserved3=0, .reserved4=0}};
|
.pAcc=100, .tAcc=300, .staticHoldThresh=0, .dgpsTimeOut=2, .reserved2=0, .reserved3=0, .reserved4=0}};
|
||||||
send_ublox_packet(&msgcfgnav5);
|
do {
|
||||||
_delay_ms(10);
|
send_ublox_packet(&msgcfgnav5);
|
||||||
|
} while (!ublox_wait_for_ack());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ublox_handle_incoming_byte(uint8_t data){
|
void ublox_handle_incoming_byte(uint8_t data){
|
||||||
|
@ -144,8 +161,9 @@ void ublox_handle_packet(uBloxPacket *pkt) {
|
||||||
if (cksum.ck_a != checksum->ck_a || cksum.ck_b != checksum->ck_b) {
|
if (cksum.ck_a != checksum->ck_a || cksum.ck_b != checksum->ck_b) {
|
||||||
currentGPSData.bad_packets += 1;
|
currentGPSData.bad_packets += 1;
|
||||||
} else {
|
} else {
|
||||||
currentGPSData.ok_packets += 1;
|
|
||||||
if (pkt->header.messageClass == 0x01 && pkt->header.messageId == 0x07){
|
if (pkt->header.messageClass == 0x01 && pkt->header.messageId == 0x07){
|
||||||
|
currentGPSData.ok_packets += 1;
|
||||||
currentGPSData.fix = pkt->data.navpvt.fixType;
|
currentGPSData.fix = pkt->data.navpvt.fixType;
|
||||||
currentGPSData.lat_raw = pkt->data.navpvt.lat;
|
currentGPSData.lat_raw = pkt->data.navpvt.lat;
|
||||||
currentGPSData.lon_raw = pkt->data.navpvt.lon;
|
currentGPSData.lon_raw = pkt->data.navpvt.lon;
|
||||||
|
@ -157,6 +175,7 @@ void ublox_handle_packet(uBloxPacket *pkt) {
|
||||||
currentGPSData.speed_raw = pkt->data.navpvt.gSpeed;
|
currentGPSData.speed_raw = pkt->data.navpvt.gSpeed;
|
||||||
|
|
||||||
} else if (pkt->header.messageClass == 0x01 && pkt->header.messageId == 0x02){
|
} else if (pkt->header.messageClass == 0x01 && pkt->header.messageId == 0x02){
|
||||||
|
currentGPSData.ok_packets += 1;
|
||||||
currentGPSData.lat_raw = pkt->data.navposllh.lat;
|
currentGPSData.lat_raw = pkt->data.navposllh.lat;
|
||||||
currentGPSData.lon_raw = pkt->data.navposllh.lon;
|
currentGPSData.lon_raw = pkt->data.navposllh.lon;
|
||||||
currentGPSData.alt_raw = pkt->data.navposllh.hMSL;
|
currentGPSData.alt_raw = pkt->data.navposllh.hMSL;
|
||||||
|
@ -168,12 +187,25 @@ void ublox_handle_packet(uBloxPacket *pkt) {
|
||||||
currentGPSData.minutes = pkt->data.navtimeutc.min;
|
currentGPSData.minutes = pkt->data.navtimeutc.min;
|
||||||
currentGPSData.seconds = pkt->data.navtimeutc.sec;
|
currentGPSData.seconds = pkt->data.navtimeutc.sec;
|
||||||
} else if (pkt->header.messageClass == 0x05 && pkt->header.messageId == 0x01){
|
} else if (pkt->header.messageClass == 0x05 && pkt->header.messageId == 0x01){
|
||||||
currentGPSData.fix += 1;
|
ack_received = 1;
|
||||||
} else if (pkt->header.messageClass == 0x05 && pkt->header.messageId == 0x00){
|
} else if (pkt->header.messageClass == 0x05 && pkt->header.messageId == 0x00){
|
||||||
currentGPSData.fix += 30;
|
nack_received = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
uint8_t ublox_wait_for_ack() {
|
||||||
|
ack_received = 0;
|
||||||
|
nack_received = 0;
|
||||||
|
uint8_t timeout = 200;
|
||||||
|
while(!ack_received && !nack_received){
|
||||||
|
_delay_ms(1);
|
||||||
|
if (!timeout--){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ack_received;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
1
ublox.h
1
ublox.h
|
@ -205,5 +205,6 @@ void ublox_get_last_data(GPSEntry * gpsEntry);
|
||||||
uBloxChecksum ublox_calc_checksum(const uint8_t msgClass, const uint8_t msgId, const uint8_t *message, uint16_t size);
|
uBloxChecksum ublox_calc_checksum(const uint8_t msgClass, const uint8_t msgId, const uint8_t *message, uint16_t size);
|
||||||
void ublox_handle_incoming_byte(uint8_t data);
|
void ublox_handle_incoming_byte(uint8_t data);
|
||||||
void ublox_handle_packet(uBloxPacket *pkt);
|
void ublox_handle_packet(uBloxPacket *pkt);
|
||||||
|
uint8_t ublox_wait_for_ack();
|
||||||
|
|
||||||
#endif //STM32_RTTY_UBLOX_H
|
#endif //STM32_RTTY_UBLOX_H
|
||||||
|
|
Ładowanie…
Reference in New Issue