我是靠谱客的博主 开朗草莓,最近开发中收集的这篇文章主要介绍STM32 GPS模块输出控制实现文档说明代码实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文是对 ATGM336H-5N GNSS模块的发送功能实现,已经验证过功能,供大家参考
在这里插入图片描述
配置的目标:

  1. 只使用北斗定位;
  2. 只接收RMC类型的数据帧

说明:

  1. 使用芯片为 STMF103C8T6芯片
  2. 使用芯片为了 杭州中科微电子有限公司 的因此发送的属于私有协议内容,不能套用在其它公司的GNSS模块上。
  3. 原理是相同的;

文档说明

配置发送帧使用CAS03标识:
在这里插入图片描述
设置更新频率使用GAS02标识:
在这里插入图片描述
配置使用的定位系统使用CAS04标识:
在这里插入图片描述

代码实现

宏定义

#define USARTx
USART3
#define USARTx_CLK_ENABLE()
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE)
#define USARTx_TX_GPIO_CLK_ENABLE()
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE)
#define USARTx_TX_GPIO_PORT
GPIOB
#define USARTx_TX_PIN
GPIO_Pin_10
#define USARTx_RX_GPIO_CLK_ENABLE()
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE)
#define USARTx_RX_GPIO_PORT
GPIOB
#define USARTx_RX_PIN
GPIO_Pin_11
#define USARTx_IRQn
USART3_IRQn
#define USARTx_IRQHanlder
USART3_IRQHandler

发送函数

void GPS_SendBuffer(char *str, uint8_t len)
{
uint8_t i;
for (i = 0; i < len; ++i)
{
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
USART_SendData(USARTx, str[i]);
}
}

GPS配置

/*
* 消息接收控制,0表示不接收,1~9表示每秒接收几次
*/
#define nGGA	0
#define nGLL	0
#define nGSA	0
#define nGSV	0
#define nRMC	1
#define nVTG	0
#define nZDA	0
#define nANT	0
#define nDHV	0
#define nLPS	0
#define nUTC	0
#define nGST	0
#define nTIM	0
#define PCAS02	0
#define PCAS03	1
#define PCAS04	2
#define PCALEN
PCAS04 + 1
uint8_t CheckSum(uint8_t *data, uint8_t length);
void GPS_Config(void)
{
static char *initStr[] = {
"$PCAS02,1000*%Xrn",
/* 设置发送频率为每秒一次 */
"$PCAS03,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,,,%d,%d,,,,%d*%srn",
/* 设置接收消息的类型 */
"$PCAS04,2*%Xrn",
/* 仅使用北斗定位 */
};
uint8_t i;
uint8_t strLen = 0, checkSum = 0;
char sendStr1[70] = {0};
char sendStr2[70] = {0};
for (i = 0; i < PCALEN; ++i)
{
switch (i)
{
case PCAS03:
sprintf(sendStr1, initStr[i], nGGA, nGLL, nGSA, nGSV, nRMC, nVTG, nZDA, nANT, nDHV, nLPS, nUTC, nGST, nTIM, "%X");
checkSum = CheckSum(sendStr1 + 1, strlen(sendStr1) - 6);
sprintf(sendStr2, sendStr1, checkSum);
break;
default:
checkSum = CheckSum(initStr[i] + 1, strlen(initStr[i]) - 6);
sprintf(sendStr2, initStr[i], checkSum);
break;
}
GPS_SendBuffer(sendStr2, strlen(sendStr2));
}
}
uint8_t CheckSum(uint8_t *data, uint8_t length)
{
uint8_t usBcc = 0;
// Initial value
while(length--)
{
usBcc ^= *data++;
}
return usBcc;
}

其它省略实现省略。最后效果如下:
在这里插入图片描述

最后

以上就是开朗草莓为你收集整理的STM32 GPS模块输出控制实现文档说明代码实现的全部内容,希望文章能够帮你解决STM32 GPS模块输出控制实现文档说明代码实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部