国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

【干貨分享】基于瑞薩RA4M2-SENSOR開發板,實現便攜式 GPS 定位器

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

掃碼添加小助手

加入工程師交流群

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

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


目錄

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

二、工程創建:使用 e^2^ studio 軟件實現空白工程創建;

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

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

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


一、硬件連接

1.OLED 與開發板連接方式如下

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

2. GPS 模塊與開發板連接方式如下

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

3.實物連接圖如下

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


二、工程創建

打開e2 studio軟件;

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

依次進行工程命名,路徑設置,FSP版本,目標開發板選擇,Device 選擇R7FA4M2AD3CFL,工具鏈選擇GNU ARM Embedded,調試器選擇J-Link,完成工程創建 ;


三、工程配置

工程配置包括PinsClockStacks等配置。


GPIO 引腳

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

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

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

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


時鐘樹

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

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



UART 堆棧

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

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

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

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


IIC 堆棧

新建 IIC 通信堆棧

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

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

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

Slave Address設置為0x3C

回調函數默認為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 相關解析函數。


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回調函數(GPS數據接收)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? ? ? ? {? ? ? ? ? ? // 緩沖區溢出,重置? ? ? ? ? ? gps_rx_index =?0;? ? ? ? }? ? }}// 初始化函數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數據接收)? ? 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數據void?process_gps_data(void){? ? if?(gps_line_ready)? ? {? ? ? ? // 禁用中斷以防數據被修改? ? ? ? __disable_irq();? ? ? ? // 復制數據到本地緩沖區? ? ? ? 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數據? ? ? ? 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數據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); // 根據定位質量顯示狀態 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 { // 即使沒有有效定位,也顯示時間和衛星信息 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"); // 系統初始化 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數據 print_parsed_gps_data();// 解析GPS數據 // 每隔一段時間打印狀態 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.coled.hbmp.holedfont.h詳見:【RA2E1開發板】 - IIC 通信的 OLED 顯示.


2. 漢字取模

下載 并運行PC2LCD2018軟件 ;

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

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

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


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

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


五、效果演示

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

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

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

OLED 顯示實時衛星定位經緯度信息

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

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

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

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

六、總結

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

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

    關注

    22

    文章

    3012

    瀏覽量

    172740
  • 定位器
    +關注

    關注

    2

    文章

    191

    瀏覽量

    20061
  • 開發板
    +關注

    關注

    26

    文章

    6161

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RA4M2-SENSOR開發板評測】基礎架構與環境感知

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

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

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

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

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

    RA4M2-SENSOR】介紹、環境搭建、工程測試

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

    RA4M2-SENSOR】串口讀取 GPS

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

    RA4M2-SENSOR便攜 GPS 定位器

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

    RA4M2-SENSOR】 Keil開發環境建立和跑馬燈運行

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

    RA4M2-SENSOR】數字識讀及實現

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

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

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

    RA4系列開發板體驗】+ 3種開發板的比較

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

    RA4系列開發板體驗】10. 我的試用總結

    測量搖桿模塊偏移量【RA4系列開發板體驗】7. 用DAC輸出正弦波以及余弦波【
    發表于 12-10 22:34

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

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

    干貨分享】從零學習使用RA6M4開發板

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

    RA4M2-SENSOR開發板手冊

    RA4M2-SENSOR開發板手冊
    發表于 07-21 14:41 ?19次下載

    【有獎評測 】RA4M2-SENSOR 開發板免費評測

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