1. AEK-COM-GNSST31介绍AEK-COM-GNSST31是一款基于Teseo-LIV3F GNSS模块的评估板,基于经过认证的Teseo-LIV3F全球导航卫星系统(GNSS)模块,其中嵌入了TeseoIII单片独立定位接收IC。小巧、便宜、易于开发是该产品的特点,该评估板与X-CUBE-GNSS1固件一起使用,提供必要的采集、跟踪、导航和数据输出功能,无需外部内存支持。也可以方便地与SPC5连接用于汽车应用开发的MCU,作为AutoDevKit™计划的一部分
2.核心模组Teseo-LIV3F
AEK-COM-GNSST31的核心是Teseo-LIV3F,Teseo-LIV3F模块是一个易于使用的全局模块卫星导航系统(GNSS)独立模块,嵌入Teseo III单模,除必要的power supply、RF和天线ANT管理外,它与主控MCU通信采用I2C或UART接口。两种接口均支持GNSS NMEA协议。
X-CUBE-GNSS1固件运行在STM32上,包括用于Teseo-LIV3F全球导航卫星系统(GNSS)设备的驱动程序、用于支持NMEA协议的中间件和用于任务调度的FreeRTOS,以确保更好的异步消息解析,当连接到NUCLEO-F401RE, NUCLEO-L476RG,或NUCLEO-L073RZ板时,该软件带有运行在AEK-COM-GNSST3扩展板上的驱动程序的示例实现。
3. 车载GNSS导航的实现
本方案基于AEK-COM-GNSST31和NUCLEO-F401RE开发板,实现在标准NMEA协议下,主MCU与GNSS模块之间通过I2C实现信息交互
I2C定位传感器是一个平台解决方案,可实现Teseo-LIV3F标准固件。
3.1硬件准备
- AEK-COM-GNSST31评估板
- NUCLEO-F401RE 开发板
- USB-microUSB数据线用于评估板和PC连接
- 3.2软件准备
- TESEO-SUITE
- STM32CUBE-MX
- Atollic-TRUE Studio
3.3通过TESEO SUITE PC工具配置Teseo-LIV3F
①如所示,通过morpho将AEK-COM-GNSST31连接到NUCLEO-F401RE顶部
安装STM32固件
Select Tool->X-NUCLEO-GNSS1A1
The X-NUCLEO-GNSS1A1面板出现
点击Update my STM32-NUCLEO board for X-NUCLEO-GNSS
The STM32 X-Nucleo-GNSS 面板显现
Select the firmware
STM32_Nucleo64-F401RE_UARTBridde.bin
Push the Upload button
②打开TESEO-SUITE PC Tool,使能 UART/COM connection against the NUCLEO-F401RE,使用TESEO-SUITE上的NMEA解码面板发送如下指令
$PSTMCFGMSGL,3,1,0,0
$PSTMSETPAR,1227,1,2
$PSTMSAVEPAR
这些命令会:清空I2C消息列表,关闭eco-ing信息以及将配置保存在flash中
3.4配置NUCLEO-F401RE I2C
按如下图示在STM32CUBEMX中配置I2C外设功能,并生成工程
Enable the I2C-1 bus on NUCLEO-F401RE
Configure the Blue-Button as GPIO_EXTI13
In the configuration TAB press the NVIC button to configure the NVIC
Enable the Blue-Button (EXTI-interrupts) and confirm the configuration pressing the OK button
Enable the USART-2 to enable communication between STM32 and the Terminal-Console running on PC
Configure the USART-2
配置完成,生成C代码
3.5软件实现
通过以上对STM32Cube-MX的配置,生成了所需架构的C代码包括:
I2C总线,UART和PC机通信以及蓝色按钮作为中断按键功能
增加代码以下代码,使PC机显示打印信息
void Console_Write(uint8_t *string){
HAL_UART_Transmit(&huart2, string, strlen((char *)string), 1000);
}
增加蓝色按键回调函数功能
static volatile _read = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
_read = 1;
}
定义NMEA命令相关变量
static const char *gpgll_msg = "$PSTMNMEAREQUEST,100000,0\n\r";
主函数代码
1 while (1) {
2 HAL_I2C_DeInit(&hi2c1);
3 HAL_I2C_Init(&hi2c1);
AN5203 Rev 2 17/23
AN5203 Finalize the C-Code in the project
22
4 if (_read == 1) {
5 _read = 0;
6 Console_Write("Sending commands...");
7 HAL_I2C_Master_Transmit(&hi2c1, 0x3A << 1, (uint8_t
*)gpgll_msg, strlen(gpgll_msg), 2000);
8 Console_Write(" got:... \r\n");
9 for (read_buf[180-1] = 0; read_buf[180-1] != 0xff;) {
10 HAL_I2C_Master_Receive(&hi2c1, 0x3A << 1, read_buf, 180,
2000);
11 for (i = 0; i < 180; ++i)
12 if (read_buf != 0xff)
13 HAL_UART_Transmit(&huart2, &read_buf, 1, 1000);
14 }
15 Console_Write("\r\n");
16 }
17 }
Where in detail:
1. in line-4 the application waits the Blue-button event happens.
2. In line-7 the main-processor send to the Teseo-LIV3F on I2C-bus the
$PSTMNMEAREQUEST command to request a $GPGLL message
3. In line-10 the main processor read the data sent by Teseo-LIV3F on I2C-bus
4. In lines 11-13 the received data are sent on the PC-Terminal console
在终端机上演示结果