1、硬件选型(GPS模块)
2、STM32基于HAL实现过程
第一部分:CubeMX配置过程
第一步:打开CubeMX工具:
第二步:创建一个工程:搜索一下需要的芯片。
第三步:配置调试器
第四步:配置时钟
第五步: 配置时钟树,在下图所示出输入,点击回车即可。
第六步:配置串口
第七步:
第二部分: 代码编写
第一步:定义一个用于存放经度纬度的缓存结构体
struct student
{
uint8_t longitude[9];//经度
uint8_t latitude[9];//纬度
uint8_t time[6];//时间
bool connect;//连接
};
struct student demo;//经度纬度等信息
第二步:定义所需要的变量以及数组
uint8_t message[200] = {0}; //接收字符串缓冲区
uint8_t offset; //接收字符串缓冲区的下标及大小
uint8_t mesg; //用于中断时,接收单个字符
uint8_t RX_Flag; //发生中断的标志
uint8_t data[500];
uint8_t dem[10];
第三步:编写接收解析GPS的函数
/*GPS解析采集*/
void gather_GPS(){
HAL_UART_Receive(&huart2,data,500,1000);
for(int i=0;i<500;i++){
if(data[i]=='$'&&data[i+1]=='G'&&data[i+2]=='N'&&data[i+3]=='R'&&data[i+4]=='M'&&data[i+5]=='C'){
if(i+42>=500){
break;
}
/*北纬转化*/
OLED_ShowChar(0,0,data[i+20]);
OLED_ShowChar(0+8,0,data[i+21]);
OLED_ShowChar(0+8+8,0,data[i+22]);
OLED_ShowChar(0+8+8+8,0,data[i+23]);
OLED_ShowChar(0+8+8+8+8,0,data[i+24]);
OLED_ShowChar(0+8+8+8+8+8,0,data[i+25]);
OLED_ShowChar(0+8+8+8+8+8+8,0,data[i+26]);
OLED_ShowChar(0+8+8+8+8+8+8+8,0,data[i+27]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8,0,data[i+28]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8+8,0,data[i+29]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8,0,data[i+19]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8+8,0,data[i+18]);
demo.latitude[0]=data[i+20];
demo.latitude[0]=data[i+21];
demo.latitude[0]=data[i+22];
demo.latitude[0]=data[i+23];
demo.latitude[0]=data[i+24];
demo.latitude[0]=data[i+25];
demo.latitude[0]=data[i+26];
demo.latitude[0]=data[i+27];
demo.latitude[0]=data[i+28];
demo.latitude[0]=data[i+29];
/*东经转化*/
// OLED_ShowChar(0,2,data[i+30]);
OLED_ShowChar(0,2,data[i+31]);
OLED_ShowChar(0+8,2,data[i+32]);
OLED_ShowChar(0+8+8,2,data[i+33]);
OLED_ShowChar(0+8+8+8,2,data[i+34]);
OLED_ShowChar(0+8+8+8+8,2,data[i+35]);
OLED_ShowChar(0+8+8+8+8+8,2,data[i+36]);
OLED_ShowChar(0+8+8+8+8+8+8,2,data[i+37]);
OLED_ShowChar(0+8+8+8+8+8+8+8,2,data[i+38]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8,2,data[i+39]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8+8,2,data[i+40]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8,2,data[i+41]);
OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8+8,2,data[i+42]);
demo.longitude[0]=data[i+33];
demo.longitude[0]=data[i+34];
demo.longitude[0]=data[i+35];
demo.longitude[0]=data[i+36];
demo.longitude[0]=data[i+37];
demo.longitude[0]=data[i+38];
demo.longitude[0]=data[i+39];
demo.longitude[0]=data[i+40];
demo.longitude[0]=data[i+41];
demo.longitude[0]=data[i+42];
/*时间转化*/
OLED_ShowChar(0,4,data[i+7]);
OLED_ShowChar(0+8,4,data[i+8]);
OLED_ShowChar(0+8+8,4,data[i+9]);
OLED_ShowChar(0+8+8+8,4,data[i+10]);
OLED_ShowChar(0+8+8+8+8,4,data[i+11]);
OLED_ShowChar(0+8+8+8+8+8,4,data[i+12]);
demo.time[0]=data[i+7];
demo.time[0]=data[i+8];
demo.time[0]=data[i+9];
demo.time[0]=data[i+10];
demo.time[0]=data[i+11];
demo.time[0]=data[i+12];
HAL_Delay(10);
break;
}
if(data[i]=='$'&&data[i+1]=='G'&&data[i+2]=='P'&&data[i+3]=='T'&&data[i+4]=='X'&&data[i+5]=='T'&&data[i+24]=='O'&&data[i+25]=='K'){
if(i>25){break;}
demo.connect=true;
break;
}
else{
demo.connect=false;
break;
}
}
}
第四步:在while中调用
/* USER CODE BEGIN WHILE */
while (1)
{
gather_GPS();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
然后编译下载到板子里即可完成,文章来源:https://www.toymoban.com/news/detail-844773.html
工程是通过OLED显示的,有需要大家可以自行下载文章来源地址https://www.toymoban.com/news/detail-844773.html
到了这里,关于STM32基于HAL解析GPS经度纬度以及时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!