91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【干貨分享】基于瑞薩RA4M2-SENSOR開發(fā)板,實現(xiàn)便攜式 GPS 定位器

電子發(fā)燒友論壇 ? 2025-09-09 08:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文介紹了 RA4M2-SENSOR 通過 IIC 協(xié)議實現(xiàn) OLED 顯示,并結合串口通信讀取 GPS 模塊數(shù)據,實現(xiàn)便攜式 GPS 定位器的項目設計。
https://bbs.elecfans.com/jishu_2500317_1_1.html

RA4M2-SENSOR 是一款基于 RA4M2 系列微控制器的評估套件,支持 TrustZone 技術和片內安全加密引擎(SCE),提供硬件級安全保護,確保敏感數(shù)據安全。RA4M2 MCU 采用 40nm 工藝,具有出色的低功耗性能(CoreMark功耗低至 81μA/MHz)。


目錄

一、硬件連接:GPS 模塊和 OLED 分別與開發(fā)板的 UART0 和 SCI2-IIC 對應引腳連接;

二、工程創(chuàng)建:使用 e^2^ studio 軟件實現(xiàn)空白工程創(chuàng)建;

三、工程配置:包括 GPIO 引腳、時鐘樹、UART堆棧、IIC 堆棧等配置;

四、工程代碼:包括流程圖、主程序代碼、 GPS 解析代碼和 OLED 驅動代碼;

五、效果演示:OLED 顯示實時衛(wèi)星定位經緯度信息、串口打印讀取到的 GPS 原始數(shù)據和解析數(shù)據。


一、硬件連接

1.OLED 與開發(fā)板連接方式如下

OLEDRA4M2Note
SDASDA2 (P302)Serial data
SCLSCL2 (P301)Serial clock
VCC3V3Power
GNDGNDGround

2. GPS 模塊與開發(fā)板連接方式如下

GPS moduleRA4M2Note
RXDTXD0 (P101)Receive data
TXDRXD0 (P100)Transmit data
VCC3V3Power
GNDGNDGround

3.實物連接圖如下

ef1991da-8d10-11f0-8ce9-92fbcf53809c.jpg


二、工程創(chuàng)建

打開e2 studio軟件;

依次點擊文件-新建-瑞薩 C/C++ 項目-Renesas RA;

依次進行工程命名,路徑設置,F(xiàn)SP版本,目標開發(fā)板選擇,Device 選擇R7FA4M2AD3CFL,工具鏈選擇GNU ARM Embedded,調試器選擇J-Link,完成工程創(chuàng)建 ;


三、工程配置

工程配置包括PinsClock、Stacks等配置。


GPIO 引腳

進入 FSP 配置界面,打開 Pins 標簽頁,根據原理圖或開發(fā)板絲印,將 P109 和 P110 引腳分別配置為 TXD9 和 RXD9 串口模式;

同理,將 P101 和 P100 引腳分別配置為 TXD0 和 RXD0 串口模式;

將 SCI2 配置為 Simple I2C 模式,引腳定義為 P302 和 P301 分別對應 SDA2 和 SCL2 ;

ef2a9f48-8d10-11f0-8ce9-92fbcf53809c.jpg


時鐘樹

進入Clock時鐘標簽頁,將XTAL外部高速晶振修改為12MHz,FCLK Div設置為 2 分頻;

ef39dfe4-8d10-11f0-8ce9-92fbcf53809c.png



UART 堆棧

新建串口通信堆棧New Stack-Connectivity-UART (r_sci_uart);

串口屬性配置,General 標簽下的 Channel 改為 9,名稱改為g_uart9,中斷回調函數(shù)命名為user_uart9_callback;

再次新建串口通信堆棧New Stack-Connectivity-UART (r_sci_uart);

串口屬性配置,General 標簽下的 Channel 改為 0,名稱改為g_uart0,中斷回調函數(shù)命名為user_uart0_callback,注意波特率需要修改為 9600 并與 GPS 模塊匹配;


IIC 堆棧

新建 IIC 通信堆棧

Stacks-New Stack-Connectivity-I2C Master (r_sci_i2c)

選中 iic 堆棧方框,打開屬性標簽,配置 IIC 參數(shù);

屬性設置:屬性-Module g_i2c_master0 I2C Master (r_iic_master);

Slave Address設置為0x3C;

回調函數(shù)默認為sci_i2c_master_callback;

點擊Generate Project Content按鈕,生成工程代碼。

ef47463e-8d10-11f0-8ce9-92fbcf53809c.jpg


流程圖

ef53bc16-8d10-11f0-8ce9-92fbcf53809c.jpg


四、工程代碼

.../src目錄下新建源文件gps_parser.c和頭文件gps_parser.h用于配置 GPS 相關解析函數(shù)。


1. hal_entry.c

#include"hal_data.h"#include"oled.h"#include"bmp.h"#include"gps_parser.h"#include#includeFSP_CPP_HEADERvoidR_BSP_WarmStart(bsp_warm_start_event_tevent);FSP_CPP_FOOTERfsp_err_terr = FSP_SUCCESS;volatilebooluart_send_complete_flag =false;voiduser_uart9_callback(uart_callback_args_t* p_args){ if(p_args->event == UART_EVENT_TX_COMPLETE) { uart_send_complete_flag =true; }}/*------------- 串口重定向 -------------*/#ifdef__GNUC__ #definePUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#endifPUTCHAR_PROTOTYPE{ err =R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t*)&ch,1); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag ==false){} uart_send_complete_flag =false; returnch;}int_write(intfd,char*pBuffer,intsize){ for(inti=0;i { __io_putchar(*pBuffer++); } returnsize;}// 全局變量volatileuint8_tgps_rx_buffer[256];volatileuint16_tgps_rx_index =0;volatileboolgps_line_ready =false;gps_data_tcurrent_gps_data;// SCI0回調函數(shù)(GPS數(shù)據接收)voiduser_uart0_callback(uart_callback_args_t* p_args){ if(p_args->event == UART_EVENT_RX_CHAR) { uint8_trx_char = (uint8_t)p_args->data; // 存儲接收到的字符 if(gps_rx_index < (sizeof(gps_rx_buffer) -?1))? ? ? ? {? ? ? ? ? ? gps_rx_buffer[gps_rx_index++] = rx_char;? ? ? ? ? ? // 檢查是否收到換行符(一行結束)? ? ? ? ? ? if?(rx_char ==?'\n')? ? ? ? ? ? {? ? ? ? ? ? ? ? gps_rx_buffer[gps_rx_index] =?'\0';? ? ? ? ? ? ? ? gps_line_ready =?true;? ? ? ? ? ? ? ? gps_rx_index =?0;? ? ? ? ? ? }? ? ? ? }? ? ? ? else? ? ? ? {? ? ? ? ? ? // 緩沖區(qū)溢出,重置? ? ? ? ? ? gps_rx_index =?0;? ? ? ? }? ? }}// 初始化函數(shù)void?init_system(void){? ? fsp_err_t?err;? ? printf("=== RA4M2 GPS Receiver ===\r\n");? ? printf("Initializing system...\r\n");? ? // 初始化GPS解析器? ? gps_parser_init();? ? // 打開SCI9(printf輸出)? ? err =?R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);? ? if?(FSP_SUCCESS != err)? ? {? ? ? ? while(1);?// 初始化失敗? ? }? ? printf("SCI9 (printf) initialized at 115200 baud\r\n");? ? // 打開SCI0(GPS數(shù)據接收)? ? err =?R_SCI_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);? ? if?(FSP_SUCCESS != err)? ? {? ? ? ? printf("Error: Failed to initialize SCI0 for GPS\r\n");? ? ? ? while(1);? ? }? ? printf("SCI0 (GPS) initialized at 9600 baud\r\n");? ? printf("Waiting for GPS data...\r\n\r\n");}// 處理GPS數(shù)據void?process_gps_data(void){? ? if?(gps_line_ready)? ? {? ? ? ? // 禁用中斷以防數(shù)據被修改? ? ? ? __disable_irq();? ? ? ? // 復制數(shù)據到本地緩沖區(qū)? ? ? ? char?nmea_line[256];? ? ? ? strncpy(nmea_line, (char?*)gps_rx_buffer,?sizeof(nmea_line));? ? ? ? nmea_line[sizeof(nmea_line) -?1] =?'\0';? ? ? ? gps_line_ready =?false;? ? ? ? // 使能中斷? ? ? ? __enable_irq();? ? ? ? // 打印原始NMEA數(shù)據? ? ? ? printf("RAW: %s", nmea_line);? ? ? ? // 解析GPGGA語句? ? ? ? if?(strstr(nmea_line,?"$GPGGA"))? ? ? ? {? ? ? ? ? ? if?(parse_gpgga(nmea_line, ¤t_gps_data))? ? ? ? ? ? {? ? ? ? ? ? ? ? print_gps_data(¤t_gps_data);? ? ? ? ? ? }? ? ? ? ? ? else? ? ? ? ? ? {? ? ? ? ? ? ? ? printf("Failed to parse GPGGA data\r\n");? ? ? ? ? ? }? ? ? ? }? ? ? ? // 可以添加其他NMEA語句的解析? ? ? ? else?if?(strstr(nmea_line,?"$GPRMC"))? ? ? ? {? ? ? ? ? ? gps_time_t?rmc_time;? ? ? ? ? ? if?(parse_gprmc(nmea_line, ¤t_gps_data, &rmc_time))? ? ? ? ? ? {? ? ? ? ? ? ? ? // 如果GPGGA沒有提供時間,使用GPRMC的時間? ? ? ? ? ? ? ? if?(current_gps_data.time.hour ==?0?&&? ? ? ? ? ? ? ? ? ? current_gps_data.time.minute ==?0?&&? ? ? ? ? ? ? ? ? ? current_gps_data.time.second ==?0)? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? current_gps_data.time = rmc_time;? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? ? ? //printf("GPRMC sentence received\r\n");? ? ? ? }? ? ? ? printf("\r\n");? ? }}// 打印解析后的GPS數(shù)據void?print_parsed_gps_data(void){? ? static?uint32_t?last_print_time =?0;? ? static?uint32_t?current_time =?0;? ? current_time++;? ? // 每2秒打印一次解析結果? ? if?(current_time - last_print_time >=200) { last_print_time = current_time; printf("\r\n=== PARSED GPS DATA ===\r\n"); if(current_gps_data.is_valid) { // 打印時間信息 print_gps_time(¤t_gps_data.time); printf("\r\n"); // 打印位置信息 printf("Latitude: %.6f°\r\n", current_gps_data.latitude);// 緯度 OLED_ShowDecimal(48,6, current_gps_data.latitude,2,4,16,0); printf("Longitude: %.6f°\r\n", current_gps_data.longitude);//經度 OLED_ShowDecimal(48,3, current_gps_data.longitude,3,4,16,0); printf("Altitude: %.1f m\r\n", current_gps_data.altitude); printf("Satellites: %d\r\n", current_gps_data.satellites); printf("Fix Quality: %d\r\n", current_gps_data.fix_quality); // 根據定位質量顯示狀態(tài) switch(current_gps_data.fix_quality) { case0:printf("Status: Invalid fix\r\n");break; case1:printf("Status: GPS fix\r\n");break; case2:printf("Status: DGPS fix\r\n");break; default:printf("Status: Other fix (%d)\r\n", current_gps_data.fix_quality);break; } } else { // 即使沒有有效定位,也顯示時間和衛(wèi)星信息 if(current_gps_data.time.hour !=0|| current_gps_data.time.minute !=0|| current_gps_data.time.second !=0) { print_gps_time(¤t_gps_data.time); printf("\r\n"); } printf("No valid GPS fix\r\n"); OLED_ShowString(60,6,"None",16,0); OLED_ShowString(60,3,"None",16,0); printf("Satellites in view: %d\r\n", current_gps_data.satellites); printf("Waiting for satellite lock...\r\n"); } printf("==========================\r\n"); }}i2c_master_event_ti2c_event = I2C_MASTER_EVENT_ABORTED;voidsci_i2c_master_callback(i2c_master_callback_args_t*p_args){ i2c_event = I2C_MASTER_EVENT_ABORTED; if(NULL!= p_args) { /* capture callback event for validating the i2c transfer event*/ i2c_event = p_args->event; }}//fsp_err_t err = FSP_SUCCESS;int timeout_ms =100;voidhal_entry(void){ /*TODO:add your own code here */ err =R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg); assert(FSP_SUCCESS == err); printf("RA4M2 GPS Reader Started\r\n"); // 系統(tǒng)初始化 init_system(); uint32_tstatus_counter =0; /* Initialize IIC OLED */ err =R_SCI_I2C_Open(&g_i2c2_ctrl, &g_i2c2_cfg); assert(FSP_SUCCESS == err); OLED_Init(); OLED_Clear(); OLED_DrawBMP(0,0,128,8,BMP1,0);// initialized page -> Renesas logo R_BSP_SoftwareDelay(200, BSP_DELAY_UNITS_MILLISECONDS); /*----------- Frame ------------*/ OLED_Clear(); OLED_ShowString(0,0," GPS ",16,1); OLED_ShowCHinese(56,0,0,1);//定 OLED_ShowCHinese(72,0,1,1);//位 OLED_ShowCHinese(88,0,2,1);//器 OLED_ShowString(104,0," ",16,1); //OLED_ShowString(4,3,"ADC",16,0); OLED_ShowCHinese(0,3,3,0);//經 OLED_ShowCHinese(16,3,5,0);//度 OLED_ShowChar(32,3,':',16,0); OLED_ShowCHinese(112,3,6,0);// ° OLED_ShowCHinese(0,6,4,0);//緯 OLED_ShowCHinese(16,6,5,0);//度 OLED_ShowChar(32,6,':',16,0); OLED_ShowCHinese(112,6,6,0);// °
while(1){ process_gps_data();// 原始GPS數(shù)據 print_parsed_gps_data();// 解析GPS數(shù)據 // 每隔一段時間打印狀態(tài) status_counter++; if(status_counter >=1000)// 約每10秒 { printf("[Status] System running...\r\n"); if(current_gps_data.is_valid) { printf("[Status] GPS fix acquired\r\n"); } else { printf("[Status] Waiting for GPS fix\r\n"); } status_counter =0; }
R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);// 延時 }#ifBSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter();#endif}

GPS 模塊解析代碼gps_parser.cgps_parser.h詳見:【RA4M2-SENSOR】串口讀取 GPS.

OLED 驅動代碼oled.c、oled.h、bmp.holedfont.h詳見:【RA2E1開發(fā)板】 - IIC 通信的 OLED 顯示.


2. 漢字取模

下載 并運行PC2LCD2018軟件 ;

菜單欄模式設置為字符模式;

點擊工具欄中的設置按鈕,配置字模選項:列行式取模、低位在前等,設置完成后點擊確定保存配置;

ef664430-8d10-11f0-8ce9-92fbcf53809c.jpg


在文字輸入選框輸入目標漢字,點擊生成字模;

選中復制或保存字模,代碼添加至oledfont.h文件。


五、效果演示

串口調試助手接收 GPS 原始數(shù)據和解析數(shù)據;

ef7ab30c-8d10-11f0-8ce9-92fbcf53809c.jpg

使用移動電源供電,實現(xiàn)便攜式 GPS 定位器設計;

OLED 顯示實時衛(wèi)星定位經緯度信息

ef896bfe-8d10-11f0-8ce9-92fbcf53809c.jpg

將上述采集得到的經緯坐標 (121,31) 輸入網址 經緯度定位 ,點擊 查詢 按鈕,可獲得對應的地理位置

定位結果與實際位置 (121.45,31.03) 較為接近。

ef93ba8c-8d10-11f0-8ce9-92fbcf53809c.jpg

六、總結

本文介紹了 RA4M2-SENSOR 通過 IIC 協(xié)議實現(xiàn) OLED 顯示,并結合串口通信讀取 GPS 模塊數(shù)據,實現(xiàn)便攜式衛(wèi)星定位器的項目設計,為該產品的相關開發(fā)設計與快速應用提供了參考。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • gps
    gps
    +關注

    關注

    22

    文章

    3027

    瀏覽量

    173489
  • 定位器
    +關注

    關注

    2

    文章

    191

    瀏覽量

    20166
  • 開發(fā)板
    +關注

    關注

    26

    文章

    6288

    瀏覽量

    117999
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RA4M2-SENSOR開發(fā)板評測】基礎架構與環(huán)境感知

    收到了 RA 生態(tài)工作室寄來的 RA4M2-SENSOR 開發(fā)板,主控芯片為 R7FA4M2AD3CFL 本系列評測的第一篇,我們將啟動 “數(shù)據采集系統(tǒng)” 項目。本文將詳細介紹如何在
    的頭像 發(fā)表于 12-10 17:13 ?2137次閱讀
    【<b class='flag-5'>RA4M2-SENSOR</b><b class='flag-5'>開發(fā)板</b>評測】基礎架構與環(huán)境感知

    FPB-RA0E2開發(fā)板的批量加載例程

    RA MCU眾測寶典”環(huán)境搭建專題再添實用干貨!上一篇我們搞定了【FPB-RA0E2開發(fā)板
    的頭像 發(fā)表于 01-29 17:52 ?6822次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>FPB-<b class='flag-5'>RA0E2</b><b class='flag-5'>開發(fā)板</b>的批量加載例程

    RA4M2-SENSOR】—— 2.串口通訊測試

    RA4M2-SENSOR開發(fā)板\\\\r\\\\n\"); while(1) { printf(\"RA4M2-SENSOR,永遠的神
    發(fā)表于 08-31 15:21

    RA4M2-SENSOR】1、開箱+新建模板工程

    1 簡介 今天收到了來自RA生態(tài)工作室寄來的RA4M2-SENSOR開發(fā)板。 RA4M2-SENSOR 是一款基于RA4M2系列微控制
    發(fā)表于 08-31 20:50

    RA4M2-SENSOR】介紹、環(huán)境搭建、工程測試

    RA4M2-SENSOR】介紹、環(huán)境搭建、工程測試 本文介紹了 RA4M2-SENSOR 開發(fā)板的基本信息,包括產品特點、參數(shù)資源、開發(fā)環(huán)境搭建以及工程測試等。 介紹
    發(fā)表于 09-01 12:08

    RA4M2-SENSOR】串口讀取 GPS

    代碼和 GPS 函數(shù)定義頭文件和源文件; 效果演示:串口打印讀取到的 GPS 原始數(shù)據和解析數(shù)據。 硬件連接 GPS 模塊與開發(fā)板連接方式如下 GP
    發(fā)表于 09-05 13:01

    RA4M2-SENSOR便攜 GPS 定位器

    對應的地理位置 定位結果與實際位置 (121.45,31.03) 較為接近。 動態(tài)效果見底部視頻。 總結 本文介紹了 RA4M2-SENSOR 通過 IIC 協(xié)議實現(xiàn) OLED 顯示,并結合串口通信讀取
    發(fā)表于 09-07 21:28

    RA4M2-SENSOR】 Keil開發(fā)環(huán)境建立和跑馬燈運行

    芯片,因此花了很多時間來探索和試錯,特別是·看了很多此網站大佬的測試報告,受益很多。 1.開發(fā)板簡介 RA4M2-SENSOR 是一款基于 RA4M2 系列微控制的評估套件,支持
    發(fā)表于 09-11 07:53

    RA4M2-SENSOR】數(shù)字識讀及實現(xiàn)

    這里就介紹一種在RA4M2-SENSOR 開發(fā)板實現(xiàn)數(shù)字識讀的方法,其實現(xiàn)的思路就是在給定數(shù)據的情況下,通過相應的功能函數(shù)來自動提取各數(shù)據位的值及權重,進而通過串口向語音模塊發(fā)送指令
    發(fā)表于 09-15 22:47

    【精品聚合】RA-Eco-RA4M2-100PIN開發(fā)板試用報告作品匯總

    體驗】1.外界SHT20傳感RA4系列開發(fā)板體驗】2.RA4M2串口打印數(shù)據試用者:秦天
    發(fā)表于 12-02 16:43

    RA4系列開發(fā)板體驗】+ 3種開發(fā)板的比較

    在使用RA-Eco-RA4M2-100PIN之前,也曾使用過開發(fā)板,為此將它們放在一起做了一下簡單的對比,其外觀如圖1和圖2所示。盡管
    發(fā)表于 12-09 22:39

    【野火啟明6M5開發(fā)板體驗】野火啟明開發(fā)板RA MCU介紹

    首先感謝電子發(fā)燒友和野火,已經收到野火啟明6M5開發(fā)板。野火啟明6M5開發(fā)板包裝野火啟明6M5開發(fā)板
    發(fā)表于 12-14 22:31

    干貨分享】從零學習使用RA6M4開發(fā)板

    干貨分享 點擊下方小程序卡片查看從零開始學習使用RA6M4開發(fā)板的演示視頻。 更多內容歡迎掃描下方二維碼查看: 1 END 1 往期推薦 1
    的頭像 發(fā)表于 11-25 12:30 ?1988次閱讀

    RA4M2-SENSOR開發(fā)板手冊

    RA4M2-SENSOR開發(fā)板手冊
    發(fā)表于 07-21 14:41 ?22次下載

    【有獎評測 】RA4M2-SENSOR 開發(fā)板免費評測

    RA4M2-SENSOR是一款基于RA4M2系列微控制的評估套件,支持TrustZone技術和片內安全加密引擎(SCE),提供硬件級安全保護,確保敏感數(shù)據安全。RA4M2MCU采用4
    的頭像 發(fā)表于 08-12 08:07 ?1254次閱讀
    【有獎評測 】<b class='flag-5'>RA4M2-SENSOR</b> <b class='flag-5'>開發(fā)板</b>免費評測