概述
本文是对 ATGM336H-5N GNSS模块的发送功能实现,已经验证过功能,供大家参考
配置的目标:
- 只使用北斗定位;
- 只接收RMC类型的数据帧
说明:
- 使用芯片为 STMF103C8T6芯片
- 使用芯片为了 杭州中科微电子有限公司 的因此发送的属于私有协议内容,不能套用在其它公司的GNSS模块上。
- 原理是相同的;
文档说明
配置发送帧使用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模块输出控制实现文档说明代码实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复