《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于STM32微處理器的GPRS數(shù)據(jù)傳輸技術(shù)的研究
基于STM32微處理器的GPRS數(shù)據(jù)傳輸技術(shù)的研究
來(lái)源:微型機(jī)與應(yīng)用2012年第21期
鄭優(yōu)訊,李宗伯
(國(guó)防科學(xué)技術(shù)大學(xué),湖南 長(zhǎng)沙 410000)
摘要: 為了實(shí)現(xiàn)用微處理器進(jìn)行GPRS數(shù)據(jù)傳輸?shù)膽?yīng)用,可以采用微處理器搭載GPRS模塊并進(jìn)行配置的解決方案。介紹了用STM32微處理器搭載SIM900A的GPRS模塊實(shí)現(xiàn)數(shù)據(jù)傳輸,并簡(jiǎn)要描述STM32底層配置以及數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)方法。
Abstract:
Key words :

摘  要: 為了實(shí)現(xiàn)用微處理器進(jìn)行GPRS數(shù)據(jù)傳輸?shù)膽?yīng)用,可以采用微處理器搭載GPRS模塊并進(jìn)行配置的解決方案。介紹了用STM32微處理器搭載SIM900A的GPRS模塊實(shí)現(xiàn)數(shù)據(jù)傳輸,并簡(jiǎn)要描述STM32底層配置以及數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)方法。
關(guān)鍵詞: STM32;SIM900A;USART發(fā)送檢驗(yàn);接收檢驗(yàn)

 STM32是意法半導(dǎo)體(ST)公司推出的基于ARM Cortex-M3內(nèi)核的主流產(chǎn)品之一,它是ST公司專門(mén)針對(duì)要求高性能、低功耗和低成本的嵌入式應(yīng)用而設(shè)計(jì)的,目前已在各領(lǐng)域得到廣泛的應(yīng)用。SIM900A是SIMCom公司主推的一款緊湊型的GSM/GPRS雙頻模塊產(chǎn)品,它以性能穩(wěn)定、外觀精巧及性價(jià)比高的優(yōu)點(diǎn)深受廣大工程師青睞。
 本文通過(guò)對(duì)STM32底層配置以及數(shù)據(jù)傳輸?shù)难芯浚榻BSTM32主要的底層配置,并著重介紹數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)。通過(guò)關(guān)鍵步驟的程序源代碼的介紹,闡述實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)募?xì)節(jié)以及注意事項(xiàng)。該方法對(duì)其他項(xiàng)目或芯片有一定的實(shí)現(xiàn)價(jià)值和參考價(jià)值,且簡(jiǎn)單可靠,具有普遍性和通用性。
1 STM32底層配置
 為了實(shí)現(xiàn)STM32單片機(jī)與SIM900A模塊之間的數(shù)據(jù)命令的傳輸,本文以串口為例,先搭建開(kāi)發(fā)平臺(tái),在工程中加入相應(yīng)的庫(kù)函數(shù)以及配置文件,然后配置時(shí)鐘以及串口相應(yīng)的輸入輸出GPIO接口。在配置的同時(shí),需要針對(duì)自身的原理圖進(jìn)行編寫(xiě),才能保證配置正確無(wú)誤。這樣,基本的開(kāi)發(fā)平臺(tái)就搭建起來(lái)了。
1.1 串口配置
 在開(kāi)發(fā)平臺(tái)搭建起來(lái)之后,就可以對(duì)串口進(jìn)行配置了。配置速率為115 200 b/s,字長(zhǎng)為8 bit,1 bit停止位,串口模式為輸入與輸出模式,最后,初始化相對(duì)應(yīng)的串口。初始化串口之后,打開(kāi)串口的中斷響應(yīng)函數(shù),即USART_ITConfig(USART2,USART_IT_RXNE,ENABLE)(以串口2為例),然后使能相對(duì)應(yīng)的串口,這樣串口函數(shù)就基本配置完成了。需要注意一點(diǎn),有些程序可能在傳輸?shù)臅r(shí)候出現(xiàn)首位丟失。這個(gè)問(wèn)題涉及到USART的機(jī)制。硬件復(fù)位之后,USART的狀態(tài)位是置位的(置1,表示已經(jīng)發(fā)送完畢),而此時(shí)數(shù)據(jù)可以進(jìn)行正常發(fā)送。當(dāng)一幀數(shù)據(jù)發(fā)送后,由硬件將該位置位。而清除TC位(置0)是由軟件來(lái)完成的,通過(guò)先讀USART_SR,再寫(xiě)USART_DR將該位清除。但是程序在發(fā)送第一幀數(shù)據(jù)的時(shí)候,并沒(méi)有進(jìn)行讀USART_SR,而是直接進(jìn)行寫(xiě)USART_DR,因此TC標(biāo)志位還是置1,并沒(méi)有清除。當(dāng)發(fā)送第一幀數(shù)據(jù)之后,用USART_GetFlagStatus()檢測(cè)狀態(tài)返回的是已經(jīng)發(fā)送完畢,程序就會(huì)馬上發(fā)送下一幀數(shù)據(jù),因此第一幀數(shù)據(jù)就會(huì)被第二幀數(shù)據(jù)覆蓋了,這樣就看不到首位數(shù)據(jù)。根據(jù)這種情況,可以在每次傳輸之前或之后清除傳輸完成標(biāo)志位,即USART_ClearFlag(USART2,USART_FLAG_TC)。
1.2 中斷配置
 配置完串口之后,將對(duì)NVIC進(jìn)行配置。首次配置中斷分組,然后選擇串口的中斷,即NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn(以所使用固件庫(kù)的定義為主)。
再設(shè)置搶占式中斷優(yōu)先級(jí)和響應(yīng)式中斷優(yōu)先級(jí),然后使能中斷和初始化。以上的配置必須結(jié)合自身的情況,設(shè)計(jì)出最優(yōu)的中斷分組和優(yōu)先級(jí),以保證程序響應(yīng)中斷的速度。中斷后所做的內(nèi)容在stm32f10x_it.c文件里配置,下文將會(huì)詳細(xì)闡述。
2 實(shí)現(xiàn)細(xì)節(jié)
 實(shí)現(xiàn)GPRS數(shù)據(jù)傳輸?shù)脑硎牵篠TM32解析一串?dāng)?shù)據(jù)或命令,然后通過(guò)串口或其他方式一個(gè)字符一個(gè)字符地發(fā)送給SIM900A模塊,SIM900A接收到數(shù)據(jù)之后再通過(guò)SIM卡發(fā)送到服務(wù)器。當(dāng)SIM900A接收到數(shù)據(jù)時(shí),立即響應(yīng)中斷,按照中斷所設(shè)置的方式進(jìn)行數(shù)據(jù)處理。此時(shí),就需要通過(guò)發(fā)送檢驗(yàn)和接收檢驗(yàn)來(lái)控制數(shù)據(jù)的傳輸。
2.1發(fā)送檢驗(yàn)
 由于STM32逐個(gè)字符地將數(shù)據(jù)發(fā)送給SIM900A模塊,因此必須保證數(shù)據(jù)的正確性與連貫性。如果在發(fā)送的時(shí)候響應(yīng)中斷或者進(jìn)行任務(wù)調(diào)度,則發(fā)送將作廢,從而導(dǎo)致程序出錯(cuò),所以開(kāi)發(fā)者必須警惕該類的錯(cuò)誤出現(xiàn)。
 發(fā)送數(shù)據(jù)或者命令的時(shí)候,可以將數(shù)據(jù)通過(guò)參數(shù)傳給發(fā)送函數(shù),由發(fā)送函數(shù)統(tǒng)一控制,發(fā)送完成之后再返回一個(gè)發(fā)送完成標(biāo)志位,告知調(diào)用函數(shù)者發(fā)送已完成。源程序如下:
 void USART_Send_Byte(char MyData){ //發(fā)送字符函數(shù)
 USART_ClearFlag(USART2,USART_FLAG_TC);
 //清除標(biāo)志位,如上所述
USART_SendData(USART2,MyData);//發(fā)送數(shù)據(jù)
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待發(fā)送完成
}
void USART_Send_Str(char*s){//發(fā)送字符串
 int i;
 int len = strlen(s)-1;//字符串長(zhǎng)度
for(int i=0;i<len;i++)
USART_Send_Byte(s[i]);//循環(huán)將字符串發(fā)送出去
if(s[i]==0x0a){//判斷發(fā)送是否結(jié)束
SendCFFlag=TRUE;
//如果為真,則發(fā)送完成標(biāo)志位置為真
}else{
USART_Send_Byte(s[i]);//如果為假,則發(fā)送出去
}
}
2.2 接收檢驗(yàn)
 當(dāng)SIM900A有數(shù)據(jù)返回或者有數(shù)據(jù)通過(guò)SIM900A接收到下位機(jī)時(shí),STM32會(huì)立即響應(yīng)中斷來(lái)接收數(shù)據(jù)。此時(shí)就要在中斷函數(shù)中進(jìn)行一系列處理。以SIM900A為例,SIM900A模塊返回的命令都是以"\r"+"\n"+"\0"結(jié)尾,因此檢驗(yàn)傳輸結(jié)束可以根據(jù)它進(jìn)行判斷。在中斷響應(yīng)函數(shù)(即stm32f10x_it.c文件里)的USART2_IRQHandler函數(shù)可以設(shè)置如下:
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET){
//將接收字符存入接收緩沖區(qū)RxBuffer
RxBuffer[ReceCounter++]=(char)USART_ReceiveData(USART2);
//判斷是否接收結(jié)束
if(RxBuffer[ReceCounter]==′\0′&& RxBuffer[ReceCounter-1]==0x0A &&
RxBuffer[ReceCounter-2]==0x0D){
ReceCFFlag=TRUE;
  }
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
}
}
 該函數(shù)的基本思路是:將USART接收到的字符逐個(gè)存入緩沖區(qū),然后判斷緩沖區(qū)最后3個(gè)字符是否為SIM900A的結(jié)束標(biāo)識(shí)符。如果為假,繼續(xù)接收;如果為真,則將接收完成標(biāo)識(shí)符置為真。當(dāng)接收完成標(biāo)識(shí)符為真時(shí),說(shuō)明接收完成,接下來(lái)就可以進(jìn)行數(shù)據(jù)處理了。
2.3 命令函數(shù)實(shí)現(xiàn)方法
 下面將以AT+CIPSEND為例,闡述發(fā)送數(shù)據(jù)的細(xì)節(jié)。通過(guò)初始化模塊、開(kāi)啟網(wǎng)絡(luò)、建立接入點(diǎn)和建立TCP連接之后,就可以開(kāi)始發(fā)送數(shù)據(jù)。實(shí)現(xiàn)源代碼如下:
u8 GPRS_Send(void){
u8 i=0;
u8*p;
USART_SendToGPRS("AT+CIPSEND\r\n");//發(fā)送命令
Delay_ms(500);//延時(shí)500 ms
p=LookFor_Str(RxBuffer,">");
//查找是否有">"符號(hào),如果有,則可以發(fā)送數(shù)據(jù)
if(p!=0){
p=0;
memset(RxBuffer,0,BufferSize);//清空接收緩沖區(qū)
USART_SendToGPRS(GPRSSendData);//發(fā)送數(shù)據(jù)
Delay_ms(500);
 Delay_ms(500);
 Delay_ms(500);
 p=LookFor_Str(RxBuffer,"SEND OK");
if(p!=0){//判斷是否發(fā)送成功
//發(fā)送成功操作
 return 1;
}else {
//發(fā)送失敗操作
   return 0;
  }
   }
}

 


 該函數(shù)的基本思路是:首先發(fā)送命令,然后查找是否有“>”符號(hào),如果有,則說(shuō)明可以開(kāi)始發(fā)送數(shù)據(jù)。一段延時(shí)之后查找接收緩沖區(qū)是否有“SEND OK”字眼,有則說(shuō)明發(fā)送成功,沒(méi)有則表示發(fā)送失敗。可以根據(jù)判斷作進(jìn)一步的操作。命令的用法詳見(jiàn)SIM900A配套的AT命令手冊(cè)。有以下三點(diǎn)需要注意:
 (1)在本文測(cè)試程序中需要先獲取IP然后才能建立TCP連接,這是由SIM900A機(jī)制決定的。所以如果開(kāi)發(fā)者不能建立TCP連接,除了測(cè)試網(wǎng)絡(luò)是否正常、服務(wù)器是否正確配置之外,還需在程序中先獲取IP,命令為AT+CIFSR。
 (2)可以先獲取SIM900A的狀態(tài),命令為AT+CIPSTATUS。根據(jù)狀態(tài)來(lái)判定進(jìn)行哪些操作,可以減少運(yùn)行量,簡(jiǎn)化代碼,從而減少運(yùn)行時(shí)間,提高運(yùn)行效率。詳見(jiàn)SIM900A配套的AT命令手冊(cè)。
 (3)延時(shí)的設(shè)定需要具體問(wèn)題具體分析。例如,初始化SIM900A模塊的時(shí)候,只需延時(shí)500 ms,模塊返回的信息就接收到了,而接收來(lái)自服務(wù)器的信息時(shí),有時(shí)由于信號(hào)問(wèn)題或者巨大的數(shù)據(jù)量可能要延時(shí)久一點(diǎn),而此時(shí)就需要開(kāi)發(fā)者自行進(jìn)行測(cè)試。延時(shí)的準(zhǔn)確設(shè)置,可以在保證數(shù)據(jù)正確性的同時(shí)減少延時(shí)時(shí)間,從而提高程序的運(yùn)行效率。
 本文通過(guò)對(duì)STM32微處理器串口的設(shè)置以及中斷的配置來(lái)闡述STM32微處理器底層的配置,再通過(guò)SIM900A的發(fā)送和接收數(shù)據(jù)實(shí)現(xiàn)GPRS的數(shù)據(jù)傳輸技術(shù),從而實(shí)現(xiàn)STM32微處理器接入互聯(lián)網(wǎng)。在接收檢驗(yàn)實(shí)現(xiàn)中,可以根據(jù)接收是否完成只作一次判斷,從而減少中斷運(yùn)行時(shí)間。而SIM900A是GSM/GPRS雙頻模塊,還可以實(shí)現(xiàn)通話、收發(fā)短信、HTTP及FTP傳輸?shù)戎T多功能,通過(guò)更深入的研究,可以最大限度地挖掘出該模塊的實(shí)用價(jià)值,從而為電子產(chǎn)品提供更多的應(yīng)用功能。
參考文獻(xiàn)
[1] 譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].北京:清華大學(xué)出版社,2005.
[2] 劉波文.ARM Cortex-M3應(yīng)用開(kāi)發(fā)實(shí)例詳解[M],北京:電子工業(yè)出版社,2011.
[3] 意法半導(dǎo)體.STM32F10x-StdPeriph-Lib[EB/OL]. http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdperiph_lib.zip,[2012-3-02].
[4] 芯訊通無(wú)線科技有限公司.SIM900_AT command manual_V1.05[EB/OL].http://wm.sim.com/Sim/FrontShow_en/ wireless/detail.aspx?cid=6&nid=770,[2011-10-31].

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99re6这里只有精品| 亚洲激情一区二区三区| 蜜桃精品一区二区三区| 久久av二区| 亚洲欧美日韩在线播放| 99天天综合性| 亚洲精选视频免费看| 亚洲精品欧美极品| 亚洲激情在线观看| 亚洲激情一区二区| 亚洲欧洲精品一区二区三区波多野1战4 | 在线日韩电影| 黑人巨大精品欧美一区二区 | 欧美三级在线播放| 好看的日韩av电影| 亚洲欧美日本另类| 久久精品久久综合| 国产在线观看91精品一区| 久久久久久久综合日本| 欧美一区二区精品在线| 午夜国产精品视频免费体验区| 亚洲视频免费在线| 亚洲一区在线观看视频| 亚洲永久网站| 性xx色xx综合久久久xx| 99亚洲伊人久久精品影院红桃| 欧美视频网址| 在线亚洲观看| 亚洲天堂免费在线观看视频| 亚洲一区二区三区免费在线观看 | 久久精品视频播放| 亚洲国产女人aaa毛片在线| 91久久综合| 正在播放亚洲一区| 午夜综合激情| 久久嫩草精品久久久精品一| 嫩模写真一区二区三区三州| 欧美精品久久久久久久久老牛影院| 欧美日韩激情小视频| 国产精品成人一区二区| 国产亚洲成av人在线观看导航| 亚洲高清中文字幕| 欧美日韩亚洲视频| 欧美日韩国产在线播放网站| 国产精品a久久久久| 国产一区二区三区黄视频| 伊人激情综合| 亚洲美女黄网| 亚洲欧美一区二区三区久久| 久久精品国产一区二区三区免费看| 亚洲日本激情| 午夜精品美女自拍福到在线 | 国产主播一区二区三区四区| 亚洲国产精品999| 一区二区日韩精品| 久久精品成人欧美大片古装| 一区二区欧美日韩视频| 久久成人免费网| 欧美激情一区二区三级高清视频| 国产精品免费网站| 一区二区三区中文在线观看 | 樱桃成人精品视频在线播放| 99re热这里只有精品免费视频| 性伦欧美刺激片在线观看| 亚洲精品黄网在线观看| 亚洲欧美日韩电影| 美女精品在线观看| 国产精品美女视频网站| 亚洲国产婷婷| 午夜精品短视频| 9久草视频在线视频精品| 久久精品99无色码中文字幕| 欧美日韩国产精品一区| 国产曰批免费观看久久久| 99精品欧美一区二区蜜桃免费| 久久国产主播精品| 亚洲欧美在线播放| 欧美激情综合色| 国产综合精品| 亚洲一区制服诱惑| 99日韩精品| 老色批av在线精品| 国产美女精品视频| 日韩视频在线一区二区| 亚洲黄网站黄| 久久精品国产精品| 国产精品久久久久久久电影| 亚洲国产精品999| 久久精品国产99精品国产亚洲性色| 亚洲一区二区三区在线视频| 免费久久99精品国产自| 国产欧美精品xxxx另类| 99国产精品99久久久久久| 亚洲欧洲在线一区| 久久夜色撩人精品| 国产欧美一区二区在线观看| 9色porny自拍视频一区二区| 亚洲精品乱码久久久久久| 久久免费精品日本久久中文字幕| 国产精品久久波多野结衣| 亚洲日韩成人| 91久久夜色精品国产网站| 久久精品视频在线观看| 国产精品夜夜夜一区二区三区尤| 日韩午夜中文字幕| 久久一区二区三区国产精品 | 国产三级精品在线不卡| 99在线精品免费视频九九视| 亚洲精品免费在线播放| 美国十次成人| 悠悠资源网亚洲青| 久久激情综合网| 久久精品免视看| 国产九色精品成人porny| 亚洲图片欧洲图片日韩av| 亚洲五月六月| 欧美色欧美亚洲另类二区| 99国产精品久久久久久久久久| 日韩视频永久免费| 欧美精品激情blacked18| 亚洲精品老司机| aa日韩免费精品视频一| 欧美极品aⅴ影院| 亚洲精品色婷婷福利天堂| a4yy欧美一区二区三区| 欧美日韩国产欧| 亚洲剧情一区二区| 亚洲手机在线| 国产精品国产三级国产专播品爱网| 一区二区精品在线观看| 亚洲一区精品电影| 国产精品美女久久久久久久| 午夜久久美女| 久久免费黄色| 在线日韩日本国产亚洲| 亚洲日韩欧美视频一区| 欧美欧美天天天天操| 日韩西西人体444www| 亚洲欧美国产精品桃花| 国产欧美一级| 久久国产精品久久久久久电车| 久久婷婷人人澡人人喊人人爽| 在线观看精品视频| 日韩午夜精品| 欧美性大战久久久久久久蜜臀| 在线性视频日韩欧美| 欧美在线视频一区| 极品日韩久久| 日韩视频在线一区| 国产精品jvid在线观看蜜臀| 香蕉久久一区二区不卡无毒影院| 久久亚洲精选| 亚洲乱码精品一二三四区日韩在线 | 久久成人久久爱| 黄色精品一二区| 99精品欧美一区二区三区综合在线| 欧美日韩三区四区| 亚洲欧美日韩在线观看a三区 | 亚洲国产精品黑人久久久| 在线视频亚洲一区| 国产精品综合视频| 91久久极品少妇xxxxⅹ软件| 欧美午夜精品久久久久久人妖| 欧美一区二区三区视频| 欧美国产日韩一区二区| 亚洲一区二区在| 久久久99久久精品女同性| 亚洲福利视频网| 午夜日韩在线| 在线观看日韩国产| 亚洲在线视频网站| 激情成人中文字幕| 一区二区三区免费在线观看| 国产欧美一区二区三区国产幕精品| 亚洲激情国产精品| 国产精品色婷婷| 亚洲精品在线免费观看视频| 国产精品久久久久一区| 亚洲国产精品一区制服丝袜| 欧美午夜精品久久久| 亚洲第一区在线观看| 欧美视频中文字幕| 亚洲国产精品久久久久秋霞影院 | 欧美福利电影在线观看| 亚洲一级高清| 欧美国产日韩一区二区| 欧美一区亚洲二区| 欧美日韩综合视频网址| 国产一区二区三区精品久久久| 一本色道久久| 久久婷婷综合激情| 午夜免费久久久久| 欧美日精品一区视频| 亚洲欧美日韩综合一区| 99精品国产高清一区二区| 久久精品人人做人人爽| av成人黄色| 麻豆成人在线| 午夜视频在线观看一区| 欧美日韩无遮挡|