file-type

C语言项目源码分析:北航声源定位GPS实验程序

版权申诉

ZIP文件

2KB | 更新于2024-11-20 | 129 浏览量 | 0 下载量 举报 收藏
download 限时特惠:#9.90
源码文件主要包括'gpsx'项目的核心实现文件'main.c'以及项目说明文档'readme.txt'。这份源码对于想通过实战项目深入学习C语言的开发者而言,是一个不错的参考案例。" 详细知识点: 1. C语言源码项目 本资源提供了一个C语言的源码项目,对于学习和理解C语言编程有着重要的意义。C语言作为一种广泛使用的编程语言,其底层操作能力强,效率高,是许多软件开发、系统编程以及嵌入式开发的首选语言。通过研究实际项目源码,学习者可以更好地理解C语言的语法结构、函数调用、模块划分等编程技巧。 2. GPS声源定位技术 项目源码的背景是北航物理实验,旨在实现声源定位功能。GPS声源定位技术是一种基于声音信号到达不同传感器(或接收器)的时间差来定位声源位置的技术。这项技术在环境监测、安全监控、声学研究等领域有广泛应用。通过这个项目,学习者可以了解声音信号处理、时间差定位算法等知识。 3. 实战项目学习方法 本源码项目适合作为一个实战学习案例,因为它涉及到了从理论到实践的转换,包括如何根据实验要求设计程序架构、编写代码、调试程序以及最终实现功能。学习者可以在阅读源码的过程中,学习如何将复杂的物理实验问题抽象化为计算机算法,并将其转化成有效的程序代码。 4. 源码文件解析 项目包含两个文件,'main.c'和'readme.txt'。 - 'main.c'是项目的主执行文件,其中应该包含了程序的入口函数main(),以及实现声源定位算法的核心函数和模块。学习者可以通过分析main.c文件,理解C语言编写项目的基本结构,包括程序的流程控制、函数定义和调用、变量作用域和生命周期等。 - 'readme.txt'是项目说明文件,其中应该包含项目的简介、安装和运行指南、功能描述以及代码使用协议等信息。对于学习者而言,这个文件是理解项目背景和具体要求的重要依据,同时也能帮助他们更好地理解源码的具体用途和如何使用项目成果。 通过深入分析这两个文件,学习者可以得到项目设计思想、编程风格、代码优化和错误处理等多方面的知识,从而提高自身编程能力,为从事相关领域的软件开发打下坚实基础。

相关推荐

filetype

#include "gps.h" #include "sys.h" #include "string.h" #include "oled.h" #include "delay.h" #include "stdio.h" //Ԯࠚע̍ۺզȸ __align(8) uint8_t USART2_TX_BUF[USART_MAX_SEND_LEN]; //ע̍ۺԥ,خճUSART_MAX_SEND_LENؖޚ uint8_t USART2_RX_BUF[USART_MAX_RECV_LEN]; //ޓ˕ۺԥ,خճUSART_MAX_RECV_LENٶؖޚ. //Ԯࠚע̍һٶؖޚ static void Com_SendData(uint8_t data) { USART_SendData(USART2, data);//ע̍˽ߝ while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); } void HAL_UART_Transmit(USART_TypeDef* USARTx, uint8_t *pData, uint16_t Size) { uint16_t i; for(i=0;i<Size;i++) { Com_SendData(*(pData+i)); } } uint8_t NMEA_Comma_Pos(uint8_t *buf,uint8_t cx) { uint8_t *p=buf; while(cx) { if(*buf=='*'||*buf<' '||*buf>'z')return 0XFF;//Զս'*'ܲ֟؇רؖػ,ղһզ՚֚cxٶֺۅ if(*buf==',')cx--; buf++; } return buf-p; } //m^nگ˽ //׵ܘֵ:m^nՎ׽. uint32_t NMEA_Pow(uint8_t m,uint8_t n) { uint32_t result=1; while(n--)result*=m; return result; } //strתۻΪ˽ؖ,Ӕ','ܲ֟'*'ޡ˸ //buf:˽ؖզԢȸ //dx:С˽֣λ˽,׵ܘٸַԃگ˽ //׵ܘֵ:תۻ۳ք˽ֵ int NMEA_Str2num(uint8_t *buf,uint8_t*dx) { uint8_t *p=buf; uint32_t ires=0,fres=0; uint8_t ilen=0,flen=0,i; uint8_t mask=0; int res; while(1) //փսֻ˽ۍС˽քӤ׈ { if(*p=='-'){mask|=0X02;p++;}//ˇغ˽ if(*p==','||(*p=='*'))break;//Զսޡ˸‹ if(*p=='.'){mask|=0X01;p++;}//ԶսС˽֣‹ else if(*p>'9'||(*p<'0')) //Ԑ؇רؖػ { ilen=0; flen=0; break; } if(mask&0X01)flen++; else ilen++; p++; } if(mask&0X02)buf++; //ȥִغۅ for(i=0;i<ilen;i++) //փսֻ˽ҿؖ˽ߝ { ires+=NMEA_Pow(10,ilen-1-i)*(buf[i]-'0'); } if(flen>5)flen=5; //خנȡ5λС˽ *dx=flen; //С˽֣λ˽ for(i=0;i<flen;i++) //փսС˽ҿؖ˽ߝ { fres+=NMEA_Pow(10,flen-1-i)*(buf[ilen+1+i]-'0'); } res=ires*NMEA_Pow(10,flen)+fres; if(mask&0X02)res=-res; return res; } //ؖ϶GPGSVхϢ //gpsx:nmeaхϢޡٹͥ //buf:ޓ˕սքGPS˽ߝۺԥȸ˗ַ֘ void NMEA_GPGSV_Analysis(nmea_msg *gpsx,uint8_t *buf) { uint8_t *p,*p1,dx; uint8_t len,i,j,slx=0; uint8_t posx; p=buf; p1=(uint8_t*)strstr((const char *)p,"$GPGSV"); len=p1[7]-'0'; //փսGPGSVք͵˽ posx=NMEA_Comma_Pos(p1,3); //փսࠉݻπч؜˽ if(posx!=0XFF)gpsx->svnum=NMEA_Str2num(p1+posx,&dx); for(i=0;i<len;i++) { p1=(uint8_t*)strstr((const char *)p,"$GPGSV"); for(j=0;j<4;j++) { posx=NMEA_Comma_Pos(p1,4+j*4); if(posx!=0XFF)gpsx->slmsg[slx].num=NMEA_Str2num(p1+posx,&dx); //փսπчҠۅ else break; posx=NMEA_Comma_Pos(p1,5+j*4); if(posx!=0XFF)gpsx->slmsg[slx].eledeg=NMEA_Str2num(p1+posx,&dx);//փսπчҶއ else break; posx=NMEA_Comma_Pos(p1,6+j*4); if(posx!=0XFF)gpsx->slmsg[slx].azideg=NMEA_Str2num(p1+posx,&dx);//փսπч׽λއ else break; posx=NMEA_Comma_Pos(p1,7+j*4); if(posx!=0XFF)gpsx->slmsg[slx].sn=NMEA_Str2num(p1+posx,&dx); //փսπчхի҈ else break; slx++; } p=p1+1;//ȐۻսЂһٶGPGSVхϢ } } //ؖ϶GPGGAхϢ //gpsx:nmeaхϢޡٹͥ //buf:ޓ˕սքGPS˽ߝۺԥȸ˗ַ֘ void NMEA_GPGGA_Analysis(nmea_msg *gpsx,uint8_t *buf) { uint8_t *p1,dx; uint8_t posx; p1=(uint8_t*)strstr((const char *)buf,"$GPGGA"); posx=NMEA_Comma_Pos(p1,6); //փսGPS״̬ if(posx!=0XFF)gpsx->gpssta=NMEA_Str2num(p1+posx,&dx); posx=NMEA_Comma_Pos(p1,7); //փսԃԚ֨λքπч˽ if(posx!=0XFF)gpsx->posslnum=NMEA_Str2num(p1+posx,&dx); posx=NMEA_Comma_Pos(p1,9); //փսڣюٟ׈ if(posx!=0XFF)gpsx->altitude=NMEA_Str2num(p1+posx,&dx); } //ؖ϶GPGSAхϢ //gpsx:nmeaхϢޡٹͥ //buf:ޓ˕սքGPS˽ߝۺԥȸ˗ַ֘ void NMEA_GPGSA_Analysis(nmea_msg *gpsx,uint8_t *buf) { uint8_t *p1,dx; uint8_t posx; uint8_t i; p1=(uint8_t*)strstr((const char *)buf,"$GPGSA"); posx=NMEA_Comma_Pos(p1,2); //փս֨λ`э if(posx!=0XFF)gpsx->fixmode=NMEA_Str2num(p1+posx,&dx); for(i=0;i<12;i++) //փս֨λπчҠۅ { posx=NMEA_Comma_Pos(p1,3+i); if(posx!=0XFF)gpsx->possl[i]=NMEA_Str2num(p1+posx,&dx); else break; } posx=NMEA_Comma_Pos(p1,15); //փսPDOPλ׃ޫ׈Ӳؓ if(posx!=0XFF)gpsx->pdop=NMEA_Str2num(p1+posx,&dx); posx=NMEA_Comma_Pos(p1,16); //փսHDOPλ׃ޫ׈Ӳؓ if(posx!=0XFF)gpsx->hdop=NMEA_Str2num(p1+posx,&dx); posx=NMEA_Comma_Pos(p1,17); //փսVDOPλ׃ޫ׈Ӳؓ if(posx!=0XFF)gpsx->vdop=NMEA_Str2num(p1+posx,&dx); } //ؖ϶GPRMCхϢ //gpsx:nmeaхϢޡٹͥ //buf:ޓ˕սքGPS˽ߝۺԥȸ˗ַ֘ void NMEA_GPRMC_Analysis(nmea_msg *gpsx,uint8_t *buf) { uint8_t *p1,dx; uint8_t posx; uint32_t temp; float rs; p1=(uint8_t*)strstr((const char *)buf,"GPRMC");//"$GPRMC",ޭӣԐ&ۍGPRMCؖߪքȩ࠶,ڊֻƐ׏GPRMC. posx=NMEA_Comma_Pos(p1,1); //փսUTCʱݤ if(posx!=0XFF) { temp=NMEA_Str2num(p1+posx,&dx)/NMEA_Pow(10,dx); //փսUTCʱݤ,ȥִms gpsx->utc.hour=temp/10000; gpsx->utc.min=(temp/100)%100; gpsx->utc.sec=temp%100; } posx=NMEA_Comma_Pos(p1,3); //փսγ׈ if(posx!=0XFF) { temp=NMEA_Str2num(p1+posx,&dx); gpsx->latitude=temp/NMEA_Pow(10,dx+2); //փս£ rs=temp%NMEA_Pow(10,dx+2); //փս' gpsx->latitude=gpsx->latitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx))/60;//תۻΪ£ } posx=NMEA_Comma_Pos(p1,4); //ŏγ۹ˇѱγ if(posx!=0XFF)gpsx->nshemi=*(p1+posx); posx=NMEA_Comma_Pos(p1,5); //փսޭ׈ if(posx!=0XFF) { temp=NMEA_Str2num(p1+posx,&dx); gpsx->longitude=temp/NMEA_Pow(10,dx+2); //փս£ rs=temp%NMEA_Pow(10,dx+2); //փս' gpsx->longitude=gpsx->longitude*NMEA_Pow(10,5)+(rs*NMEA_Pow(10,5-dx))/60;//תۻΪ£ } posx=NMEA_Comma_Pos(p1,6); //֫ޭ۹ˇϷޭ if(posx!=0XFF)gpsx->ewhemi=*(p1+posx); posx=NMEA_Comma_Pos(p1,9); //փսUTCɕǚ if(posx!=0XFF) { temp=NMEA_Str2num(p1+posx,&dx); //փսUTCɕǚ gpsx->utc.date=temp/10000; gpsx->utc.month=(temp/100)%100; gpsx->utc.year=2000+temp%100; } } //ؖ϶GPVTGхϢ //gpsx:nmeaхϢޡٹͥ //buf:ޓ˕սքGPS˽ߝۺԥȸ˗ַ֘ void NMEA_GPVTG_Analysis(nmea_msg *gpsx,uint8_t *buf) { uint8_t *p1,dx; uint8_t posx; p1=(uint8_t*)strstr((const char *)buf,"$GPVTG"); posx=NMEA_Comma_Pos(p1,7); //փս֘Ħ̙Ê if(posx!=0XFF) { gpsx->speed=NMEA_Str2num(p1+posx,&dx); if(dx<3)gpsx->speed*=NMEA_Pow(10,3-dx); //ȷѣ)ճ1000Ѷ } } //͡ȡNMEA-0183хϢ //gpsx:nmeaхϢޡٹͥ //buf:ޓ˕սքGPS˽ߝۺԥȸ˗ַ֘ void GPS_Analysis(nmea_msg *gpsx,uint8_t *buf) { NMEA_GPGSV_Analysis(gpsx,buf); //GPGSVޢ϶ NMEA_GPGGA_Analysis(gpsx,buf); //GPGGAޢ϶ NMEA_GPGSA_Analysis(gpsx,buf); //GPGSAޢ϶ NMEA_GPRMC_Analysis(gpsx,buf); //GPRMCޢ϶ NMEA_GPVTG_Analysis(gpsx,buf); //GPVTGޢ϶ } //GPSУҩۍ݆̣ //buf:˽ߝۺզȸ˗ַ֘ //len:˽ߝӤ׈ //cka,ckb:}ٶУҩޡڻ. void Ublox_CheckSum(uint8_t *buf,uint16_t len,uint8_t* cka,uint8_t*ckb) { uint16_t i; *cka=0;*ckb=0; for(i=0;i<len;i++) { *cka=*cka+buf[i]; *ckb=*ckb+*cka; } } extern uint16_t RX_len;//ޓ˕ؖޚ݆˽ extern void USART_BaudRate_Init(uint32_t Data); /////////////////////////////////////////UBLOX Ƥ׃պë///////////////////////////////////// //ݬөCFGƤ׃ִѐȩ࠶ //׵ܘֵ:0,ACKԉ٦ // 1,ޓ˕Ӭʱխϳ // 2,ûԐ֒սͬҽؖػ // 3,ޓ˕սNACKӦհ uint8_t Ublox_Cfg_Ack_Check(void) { uint16_t len=0,i; uint8_t rval=0; while(RX_len==0 && len<100)//ֈսޓ˕սӦհ { len++; delay_ms(5); } if(RX_len) { len=RX_len; for(i=0;i<len;i++)if(USART2_RX_BUF[i]==0XB5)break;//ө֒ͬҽؖػ 0XB5 if(i==len)rval=2; //ûԐ֒սͬҽؖػ else if(USART2_RX_BUF[i+3]==0X00)rval=3;//ޓ˕սNACKӦհ else rval=0; //ޓ˕սACKӦհ }else rval=1; return rval; } //Ƥ׃ѣզ //ݫձǰƤ׃ѣզ՚΢ҿEEPROMoĦ //׵ܘֵ:0,ִѐԉ٦;1,ִѐʧќ. uint8_t Ublox_Cfg_Cfg_Save(void) { uint8_t i; _ublox_cfg_cfg *cfg_cfg=(_ublox_cfg_cfg *)USART2_TX_BUF; cfg_cfg->header=0X62B5; //cfg header cfg_cfg->id=0X0906; //cfg cfg id cfg_cfg->dlength=13; //˽ߝȸӤ׈Ϊ13ٶؖޚ. cfg_cfg->clearmask=0; //ȥԽҚëΪ0 cfg_cfg->savemask=0XFFFF; //ѣզҚëΪ0XFFFF cfg_cfg->loadmask=0; //ݓ՘ҚëΪ0 cfg_cfg->devicemask=4; //ѣզ՚EEPROMoĦ Ublox_CheckSum((uint8_t*)(&cfg_cfg->id),sizeof(_ublox_cfg_cfg)-4,&cfg_cfg->cka,&cfg_cfg->ckb); HAL_UART_Transmit(USART2, (uint8_t *)&USART2_TX_BUF, sizeof(_ublox_cfg_cfg)); for(i=0;i<6;i++)if(Ublox_Cfg_Ack_Check()==0)break; //EEPROMдɫѨҪ҈ޏ߃ʱݤ,̹ӔlѸƐ׏נՎ return i==6?1:0; } //Ƥ׃NMEAˤԶхϢٱʽ //msgid:ҪәطքNMEAлϢ͵Ŀ,ߟͥݻЂĦքӎ˽ҭ // 00,GPGGA;01,GPGLL;02,GPGSA; // 03,GPGSV;04,GPRMC;05,GPVTG; // 06,GPGRS;07,GPGST;08,GPZDA; // 09,GPGBS;0A,GPDTM;0D,GPGNS; //uart1set:0,ˤԶژҕ;1,ˤԶߪǴ. //׵ܘֵ:0,ִѐԉ٦;Ǥ̻,ִѐʧќ. uint8_t Ublox_Cfg_Msg(uint8_t msgid,uint8_t uart1set) { _ublox_cfg_msg *cfg_msg=(_ublox_cfg_msg *)USART2_TX_BUF; cfg_msg->header=0X62B5; //cfg header cfg_msg->id=0X0106; //cfg msg id cfg_msg->dlength=8; //˽ߝȸӤ׈Ϊ8ٶؖޚ. cfg_msg->msgclass=0XF0; //NMEAлϢ cfg_msg->msgid=msgid; //ҪәطքNMEAлϢ͵Ŀ cfg_msg->iicset=1; //ĬɏߪǴ cfg_msg->uart1set=uart1set; //ߪژʨ׃ cfg_msg->uart2set=1; //ĬɏߪǴ cfg_msg->usbset=1; //ĬɏߪǴ cfg_msg->spiset=1; //ĬɏߪǴ cfg_msg->ncset=1; //ĬɏߪǴ Ublox_CheckSum((uint8_t*)(&cfg_msg->id),sizeof(_ublox_cfg_msg)-4,&cfg_msg->cka,&cfg_msg->ckb); HAL_UART_Transmit(USART2, (uint8_t *)&USART2_TX_BUF, sizeof(_ublox_cfg_msg)); return Ublox_Cfg_Ack_Check(); } //Ƥ׃NMEAˤԶхϢٱʽ //baudrate:Ҩ͘Ê,4800/9600/19200/38400/57600/115200/230400 //׵ܘֵ:0,ִѐԉ٦;Ǥ̻,ִѐʧќ(֢oһܡ׵ܘ0‹) uint8_t Ublox_Cfg_Prt(uint32_t baudrate) { _ublox_cfg_prt *cfg_prt=(_ublox_cfg_prt *)USART2_TX_BUF; cfg_prt->header=0X62B5; //cfg header cfg_prt->id=0X0006; //cfg prt id cfg_prt->dlength=20; //˽ߝȸӤ׈Ϊ20ٶؖޚ. cfg_prt->portid=1; //әطԮࠚ1 cfg_prt->reserved=0; //ѣ´ؖޚ,ʨ׃Ϊ0 cfg_prt->txready=0; //TX Readyʨ׃Ϊ0 cfg_prt->mode=0X08D0; //8λ,1ٶֹͣλ,ϞУҩλ cfg_prt->baudrate=baudrate; //Ҩ͘Êʨ׃ cfg_prt->inprotomask=0X0007;//0+1+2 cfg_prt->outprotomask=0X0007;//0+1+2 cfg_prt->reserved4=0; //ѣ´ؖޚ,ʨ׃Ϊ0 cfg_prt->reserved5=0; //ѣ´ؖޚ,ʨ׃Ϊ0 Ublox_CheckSum((uint8_t*)(&cfg_prt->id),sizeof(_ublox_cfg_prt)-4,&cfg_prt->cka,&cfg_prt->ckb); HAL_UART_Transmit(USART2, (uint8_t *)&USART2_TX_BUF, sizeof(_ublox_cfg_prt)); delay_ms(200); //ֈսע̍Ϊԉ USART_BaudRate_Init(baudrate); return Ublox_Cfg_Ack_Check();//֢oһܡ״ܘ0,ӲΪUBLOXעܘ4քӦհ՚ԮࠚטтԵʼۯքʱ۲ӑޭѻ֪Ǻ‹. } //Ƥ׃UBLOX NEO-6քʱדöԥˤԶ //interval:öԥݤٴ(us) //length:öԥ࠭׈(us) //status:öԥƤ׃:1,ٟ֧ƽԐЧ;0,ژҕ;-1,֍֧ƽԐЧ. //׵ܘֵ:0,ע̍ԉ٦;Ǥ̻,ע̍ʧќ. uint8_t Ublox_Cfg_Tp(uint32_t interval,uint32_t length,signed char status) { _ublox_cfg_tp *cfg_tp=(_ublox_cfg_tp *)USART2_TX_BUF; cfg_tp->header=0X62B5; //cfg header cfg_tp->id=0X0706; //cfg tp id cfg_tp->dlength=20; //˽ߝȸӤ׈Ϊ20ٶؖޚ. cfg_tp->interval=interval; //öԥݤٴ,us cfg_tp->length=length; //öԥ࠭׈,us cfg_tp->status=status; //ʱדöԥƤ׃ cfg_tp->timeref=0; //ӎ߼UTC ʱݤ cfg_tp->flags=0; //flagsΪ0 cfg_tp->reserved=0; //ѣ´λΪ0 cfg_tp->antdelay=820; //ͬПғʱΪ820ns cfg_tp->rfdelay=0; //RFғʱΪ0ns cfg_tp->userdelay=0; //ԃۧғʱΪ0ns Ublox_CheckSum((uint8_t*)(&cfg_tp->id),sizeof(_ublox_cfg_tp)-4,&cfg_tp->cka,&cfg_tp->ckb); HAL_UART_Transmit(USART2, (uint8_t *)&USART2_TX_BUF, sizeof(_ublox_cfg_tp)); return Ublox_Cfg_Ack_Check(); } //Ƥ׃UBLOX NEO-6քټт̙Ê //measrate:ӢʱݤݤٴìեλΪmsìخʙһŜСԚ200msè5Hzé //reftime:ӎ߼ʱݤì0=UTC Timeû1=GPS Timeèһѣʨ׃Ϊ1é //׵ܘֵ:0,ע̍ԉ٦;Ǥ̻,ע̍ʧќ. uint8_t Ublox_Cfg_Rate(uint16_t measrate,uint8_t reftime) { _ublox_cfg_rate *cfg_rate=(_ublox_cfg_rate *)USART2_TX_BUF; if(measrate<200)return 1; //СԚ200msìֱޓ΋Զ cfg_rate->header=0X62B5; //cfg header cfg_rate->id=0X0806; //cfg rate id cfg_rate->dlength=6; //˽ߝȸӤ׈Ϊ6ٶؖޚ. cfg_rate->measrate=measrate;//öԥݤٴ,us cfg_rate->navrate=1; //ռڽ̙Êèלǚéìڌ֨Ϊ1 cfg_rate->timeref=reftime; //ӎ߼ʱݤΪGPSʱݤ Ublox_CheckSum((uint8_t*)(&cfg_rate->id),sizeof(_ublox_cfg_rate)-4,&cfg_rate->cka,&cfg_rate->ckb); HAL_UART_Transmit(USART2, (uint8_t *)&USART2_TX_BUF, sizeof(_ublox_cfg_rate)); return Ublox_Cfg_Ack_Check(); } nmea_msg gpsx; __align(4) uint8_t dtbuf[50]; //Дʾۺԥ //ДʾGPS֨λхϢ void Gps_Msg_Show(void) { float tp; tp=gpsx.longitude; sprintf((char *)dtbuf,":%.5f %1c",tp/=100000,gpsx.ewhemi); //փսޭ׈ؖػԮ OLED_ShowCHinese(0,2,5);//ޭ OLED_ShowCHinese(16,2,7);//׈ OLED_ShowString(32,2,dtbuf); tp=gpsx.latitude; sprintf((char *)dtbuf,":%.5f %1c",tp/=100000,gpsx.nshemi); //փսγ׈ؖػԮ OLED_ShowCHinese(0,4,6);//γ OLED_ShowCHinese(16,4,7);//׈ OLED_ShowString(32,4,dtbuf); if(gpsx.fixmode<=3) //֨λ״̬ { gpsx.utc.hour = gpsx.utc.hour + 8; //ӑ֪քUTCʱݤìתۻԉѱީʱݤìӮ8Сʱ if(gpsx.utc.hour>=24) { gpsx.utc.hour-=24; } sprintf((char *)dtbuf,":%02d:%02d:%02d",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //Дʾѱީʱݤ OLED_ShowCHinese(0,6,8);//ʱ OLED_ShowCHinese(16,6,9);//ݤ OLED_ShowString(32,6,dtbuf); } } void GpsDataRead(void) { uint16_t i,rxlen; if( RX_len) { rxlen=RX_len; for(i=0;i<rxlen;i++)USART2_TX_BUF[i]=USART2_RX_BUF[i]; USART2_TX_BUF[i]=0; //ؔ֯ͭݓޡ˸ػ GPS_Analysis(&gpsx,(uint8_t*)USART2_TX_BUF);//ؖ϶ؖػԮì˽ߝզɫGPSޡٹͥ Gps_Msg_Show(); //Дʾޭγ׈ìʱݤхϢ 请以以上32代码为参考编写基于海思hi3861外接NEO-6M-0-001的VScode代码需要.h文件.c文件template.c(主函数)文件,用的是uart2(io12-RX,io11-TX)在串口助手上显示出当前经纬度,并注释若想要与其他功能如倾斜传感器之类的连接需要修改哪些地方

filetype
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
鸦杀已尽
  • 粉丝: 394
上传资源 快速赚钱