《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于STM32微處理器的GPRS數據傳輸技術的研究
基于STM32微處理器的GPRS數據傳輸技術的研究
來源:微型機與應用2012年第21期
鄭優訊,李宗伯
(國防科學技術大學,湖南 長沙 410000)
摘要: 為了實現用微處理器進行GPRS數據傳輸的應用,可以采用微處理器搭載GPRS模塊并進行配置的解決方案。介紹了用STM32微處理器搭載SIM900A的GPRS模塊實現數據傳輸,并簡要描述STM32底層配置以及數據傳輸的實現方法。
Abstract:
Key words :

摘  要: 為了實現用微處理器進行GPRS數據傳輸的應用,可以采用微處理器搭載GPRS模塊并進行配置的解決方案。介紹了用STM32微處理器搭載SIM900A的GPRS模塊實現數據傳輸,并簡要描述STM32底層配置以及數據傳輸的實現方法。
關鍵詞: STM32;SIM900A;USART發送檢驗;接收檢驗

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

 


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

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
一个人看的www久久| 亚洲国产午夜| 国产偷久久久精品专区| 欧美成人国产va精品日本一级| 亚洲精品免费观看| 性做久久久久久| 亚洲一区免费在线观看| 在线观看日韩精品| 国产资源精品在线观看| 欧美日韩精品免费| 欧美成人亚洲成人| 亚洲欧美日韩视频一区| 久久国产福利国产秒拍| 亚洲美女黄色| 最新日韩中文字幕| 亚洲精品美女91| 亚洲精选91| 亚洲免费成人| 夜夜嗨av一区二区三区四季av| 国产自产2019最新不卡| 欧美三级第一页| 欧美日韩情趣电影| 欧美日韩亚洲综合在线| 久久久无码精品亚洲日韩按摩| 9色国产精品| 中文一区二区| 亚洲男人的天堂在线| 亚洲伦理自拍| 一区二区三区精品在线| 久久精品一区二区三区四区| 一区二区免费看| 99xxxx成人网| 亚洲在线视频观看| 欧美在线影院| 亚洲乱码国产乱码精品精可以看| 午夜视频久久久久久| 一区二区三区四区五区精品视频| 激情五月婷婷综合| 亚洲大片在线| 亚洲美女福利视频网站| 91久久久在线| 一区二区三区产品免费精品久久75 | 亚洲性xxxx| 欧美一级大片在线观看| 亚洲网站在线看| 亚洲欧美另类久久久精品2019| 亚洲精品一区二区三区樱花| 精品成人国产| 亚洲乱码国产乱码精品精| 亚洲国产精品一区| 99re这里只有精品6| 亚洲精品日韩一| 亚洲一区三区在线观看| 亚洲午夜一级| 久久精品国产一区二区三区免费看 | 亚洲精品欧美在线| 亚洲系列中文字幕| 亚洲国产片色| 亚洲一区在线观看免费观看电影高清| 欧美一级淫片aaaaaaa视频| 午夜精品电影| 女仆av观看一区| 国产精品露脸自拍| 亚洲成色最大综合在线| 亚洲欧洲精品一区二区三区不卡 | 欧美国产一区二区三区激情无套| 老色批av在线精品| 欧美视频中文一区二区三区在线观看| 国产伦理精品不卡| 亚洲精品视频免费| 久久精品国产亚洲精品 | 亚洲男女毛片无遮挡| 亚洲欧美日韩国产另类专区| 亚洲性av在线| 久久国产精品久久国产精品| 久久综合伊人77777麻豆| 久久一日本道色综合久久| 久久亚洲欧美| 欧美午夜片在线观看| 国产精品日韩一区| 亚洲电影中文字幕| 欧美亚洲在线观看| 亚洲一区二区动漫| 欧美成人一区二区三区在线观看| 欧美人在线视频| 国内精品久久久久影院优| 亚洲风情在线资源站| 亚洲精品视频免费观看| 在线一区欧美| 最新国产拍偷乱拍精品| 中文网丁香综合网| 另类国产ts人妖高潮视频| 欧美日韩成人在线观看| 国产精品久久久久一区| 国产亚洲视频在线| 中文日韩欧美| 一本久久综合亚洲鲁鲁| 欧美在线观看视频| 国产精品超碰97尤物18| 国产亚洲一本大道中文在线| 亚洲二区在线视频| 久久高清福利视频| 久久精品理论片| 国产精品永久免费视频| 在线观看欧美成人| 性做久久久久久免费观看欧美| 亚洲精品久久久久久下一站| 亚洲一级电影| 欧美日韩国产成人在线| 国产日本亚洲高清| 亚洲午夜av电影| 亚洲欧美久久久| 国产精品久久久| 一区二区三区欧美激情| 久久高清国产| 久久国产精品网站| 国产精品一区在线播放| 亚洲日本理论电影| 亚洲免费观看高清完整版在线观看| 午夜国产精品视频免费体验区| 久久综合色8888| 国内在线观看一区二区三区| 一区二区三区视频免费在线观看| 欧美一区二区在线| 久久久999国产| 狠狠狠色丁香婷婷综合激情| 一区二区国产日产| 这里只有精品视频在线| 久久免费偷拍视频| 国内精品久久久久影院优| 亚洲一区www| 性色av一区二区三区红粉影视| 欧美国产一区视频在线观看| 国产日韩在线不卡| 久久国产视频网| 久热精品视频在线免费观看| 国产嫩草影院久久久久| 日韩天堂在线观看| 亚洲视频一二| 国产精品免费一区二区三区观看| 亚洲欧洲在线观看| 在线亚洲激情| 国产精品免费看久久久香蕉| 亚洲免费观看| 亚洲免费在线观看| 国产一区二区视频在线观看| 亚洲伊人久久综合| 久久精品一区二区三区四区| 国产精品久久久久永久免费观看 | 国产女主播在线一区二区| 亚洲美女精品一区| 亚洲男女毛片无遮挡| 欧美日韩免费一区| 亚洲午夜精品17c| 久久手机精品视频| 亚洲精品激情| 亚洲自拍偷拍网址| 国产一区二区成人| 亚洲美女淫视频| 国产精品人人爽人人做我的可爱| 妖精成人www高清在线观看| 99ri日韩精品视频| 欧美激情国产日韩精品一区18| 一区二区在线视频播放| 久久国产精品亚洲va麻豆| 欧美综合国产| 亚洲第一网站| 亚洲欧美激情一区二区| 国产精品久久久久久久久免费樱桃 | 欧美影院精品一区| 一区二区在线观看av| 亚洲福利免费| 欧美日韩午夜在线视频| 亚洲精品在线观| 先锋影音网一区二区| 国产精品老女人精品视频| 中文在线一区| 久久性色av| 亚洲一区综合| 欧美激情1区2区| 欧美一级黄色网| 欧美日韩成人一区| 欧美在线亚洲| 国产精品第2页| 亚洲精品123区| 国产日韩欧美制服另类| 欧美中文字幕视频| 欧美日韩在线免费视频| 在线视频欧美精品| 久久久免费精品视频| 亚洲高清一区二| 欧美在线一区二区| 日韩香蕉视频| 麻豆91精品| 香蕉久久一区二区不卡无毒影院 | 亚洲女女女同性video| 性色一区二区| 亚洲另类在线视频| 欧美大片免费观看| 欧美一进一出视频|