chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

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


目錄

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

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

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

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

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


一、硬件連接

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;

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


三、工程配置

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


GPIO 引腳

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

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

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

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


時鐘樹

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

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



UART 堆棧

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

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

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

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


IIC 堆棧

新建 IIC 通信堆棧

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

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

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

Slave Address設(shè)置為0x3C

回調(diào)函數(shù)默認(rèn)為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 相關(guān)解析函數(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回調(diào)函數(shù)(GPS數(shù)據(jù)接收)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;? ? ? ? ? ? // 檢查是否收到換行符(一行結(jié)束)? ? ? ? ? ? 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ù)據(jù)接收)? ? 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ù)據(jù)void?process_gps_data(void){? ? if?(gps_line_ready)? ? {? ? ? ? // 禁用中斷以防數(shù)據(jù)被修改? ? ? ? __disable_irq();? ? ? ? // 復(fù)制數(shù)據(jù)到本地緩沖區(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ù)據(jù)? ? ? ? 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ù)據(jù)void?print_parsed_gps_data(void){? ? static?uint32_t?last_print_time =?0;? ? static?uint32_t?current_time =?0;? ? current_time++;? ? // 每2秒打印一次解析結(jié)果? ? 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);//經(jīng)度 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); // 根據(jù)定位質(zhì)量顯示狀態(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);//經(jīng) 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ù)據(jù) print_parsed_gps_data();// 解析GPS數(shù)據(jù) // 每隔一段時間打印狀態(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 驅(qū)動代碼oled.c、oled.hbmp.holedfont.h詳見:【RA2E1開發(fā)板】 - IIC 通信的 OLED 顯示.


2. 漢字取模

下載 并運行PC2LCD2018軟件 ;

菜單欄模式設(shè)置為字符模式

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

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


在文字輸入選框輸入目標(biāo)漢字,點擊生成字模

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


五、效果演示

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

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

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

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

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

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

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

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

六、總結(jié)

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

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

    關(guān)注

    22

    文章

    3010

    瀏覽量

    172406
  • 定位器
    +關(guān)注

    關(guān)注

    2

    文章

    190

    瀏覽量

    19996
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    6111

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

    RA4M2-SENSOR開發(fā)板\\\\r\\\\n\"); while(1) { printf(\"RA4M2-SENSOR,永遠(yuǎn)的神
    發(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ā)板的基本信息,包括產(chǎn)品特點、參數(shù)資源、開發(fā)環(huán)境搭建以及工程測試等。 介紹
    發(fā)表于 09-01 12:08

    RA4M2-SENSOR】串口讀取 GPS

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

    RA4M2-SENSOR便攜 GPS 定位器

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

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

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

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

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

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

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

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

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

    RA4系列開發(fā)板體驗】初步認(rèn)識開發(fā)板

    的技術(shù),開始一起研究這個板子??纯催@個開發(fā)板的相關(guān)參數(shù)和性能吧。開發(fā)板的主控MCU是:R
    發(fā)表于 12-10 10:26

    RA4系列開發(fā)板體驗】10. 我的試用總結(jié)

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

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

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

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

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

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

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

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

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