STM32/STM8技术论坛
直播中

亼亽

13年用户 660经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注
[资料]

【HAL库每天一例】第094例:GSM模块例程 - 3. GPRS_TCP

【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。

例程下载:
资料包括程序、相关说明资料以及软件使用截图

百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1
360云盘:https://yunpan.cn/OcPiRp3wEcA92u密码 cfb6
(硬石YS-F1Pro开发板HAL库例程持续更新2. 软件设计之高级裸机例程(HAL库版本)YSF1_HAL-124. GSM模块例程
/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: 3. GPRS_TCP
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石STM32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:http://www.ing10bbs.com
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  SIM900A是紧凑型、高可靠性的无线模块,采用SMT封装的双频GSM/GPRS模块解决方案,采用
功能强大的处理器ARM9216EJ-S内核,能满足低成本、紧凑尺寸的开发要求。
  本次实验是利用硬石提供的GSM模块来进行的,实现开发板利用模块和电脑网络进行通讯

  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  CN10       PA2         RX(HC05)             已接入
  CN10       PA3         TX(HCO5)             已接入

【3】操作及现象
    使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口(需要安
装驱动),在电脑端打开串口调试助手工具,设置参数为115200 8-N-1,将GSM模块装入SIM卡,接好线
按照我们工程中提供的步骤,一步步来,可以实现利用GSM模块的GPRS和电脑端进行网络通讯。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
CubeMX_1.jpg CubeMX_2.jpg CubeMX_3.jpg CubeMX_4.jpg CubeMX_5.jpg

main.c文件内容
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: main.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: GSM模块功能实现:GPRS_TCP
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:http://www.ing10bbs.com
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */
  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "stm32f1xx_hal.h"
  19. #include "stm32f1xx_it.h"
  20. #include "usart/bsp_debug_usart.h"
  21. #include "led/bsp_led.h"
  22. #include "key/bsp_key.h"
  23. #include "usart/bsp_usartx.h"
  24. #include "gsm/bsp_gsm.h"
  25. #include

  26. /* 私有类型定义 --------------------------------------------------------------*/
  27. /* 私有宏定义 ----------------------------------------------------------------*/
  28. #define GSM_LOCALPORT                  "2000"
  29. #define        PC_SERVERIP                     "119.131.219.28"
  30. #define        PC_SERVERPORT                   "8989"
  31. #define SENDMESSAGE              "硬石GSM模块TCP数据传输功能测试"

  32. /* 私有变量 ------------------------------------------------------------------*/
  33. static uint8_t timecount=1,timestop=0;

  34. /* 扩展变量 ------------------------------------------------------------------*/
  35. /* 私有函数原形 --------------------------------------------------------------*/
  36. /* 函数体 --------------------------------------------------------------------*/
  37. /**
  38.   * 函数功能: 系统软件复位
  39.   * 输入参数: 无
  40.   * 返 回 值: 无
  41.   * 说    明: 无
  42.   */
  43. void Soft_Reset(void)
  44. {
  45.   __set_FAULTMASK(1);   /* 关闭所有中断*/  
  46.   NVIC_SystemReset();   /* 系统复位 */
  47. }

  48. /**
  49.   * 函数功能: 系统时钟配置
  50.   * 输入参数: 无
  51.   * 返 回 值: 无
  52.   * 说    明: 无
  53.   */
  54. void SystemClock_Config(void)
  55. {
  56.   RCC_OscInitTypeDef RCC_OscInitStruct;
  57.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  58.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz
  59.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  60.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  61.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  62.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  63.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟
  64.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  65.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  66.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  67.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz
  68.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz
  69.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz
  70.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz
  71.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

  72.          // HAL_RCC_GetHCLKFreq()/1000    1ms中断一次
  73.         // HAL_RCC_GetHCLKFreq()/100000         10us中断一次
  74.         // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
  75.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  // 配置并启动系统滴答定时器
  76.   /* 系统滴答定时器时钟源 */
  77.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  78.   /* 系统滴答定时器中断优先级配置 */
  79.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  80. }

  81. /**
  82.   * 函数功能: 主函数.
  83.   * 输入参数: 无
  84.   * 返 回 值: 无
  85.   * 说    明: 无
  86.   */
  87. int main(void)
  88. {
  89.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  90.   HAL_Init();
  91.   /* 配置系统时钟 */
  92.   SystemClock_Config();
  93.   /* 板载LED初始化 */
  94.   LED_GPIO_Init();

  95.   /* 板子按键初始化 */
  96.   KEY_GPIO_Init();

  97.   /* 初始化串口并配置串口中断优先级 */
  98.   MX_DEBUG_USART_Init();
  99.   
  100.   printf("硬石GSM模块GPRS_TCP例程n");
  101.   
  102.   /* 检测模块响应是否正常 */
  103.   while(GSM_init()!= GSM_TRUE)
  104.   {
  105.     printf("n模块响应测试不正常!!n");
  106.     printf("若模块响应测试一直不正常,请检查模块的连接或是否已开启电源开关n");
  107.     GSM_DELAY(1000);
  108.   }  
  109.   printf("n通过了模块响应测试,1秒后开始配置GPRS通信环境...n");  
  110.   /* 延时1秒再发送命令到模块 */
  111.   GSM_DELAY(1000);
  112.   
  113.   /* GPRS初始化环境 */
  114.         GSM_gprs_init();
  115.         printf("n尝试建立TCP链接n");  
  116.         GSM_DELAY(1000);        
  117.   
  118.         if(GSM_gprs_tcp_link(GSM_LOCALPORT,PC_SERVERIP,PC_SERVERPORT)!=GSM_TRUE)
  119.         {
  120.                 printf("nTCP链接失败,请检测模块连线n");
  121.                 GSM_DELAY(1000);
  122.                 printf("IP链接断开n");
  123.                 GSM_DELAY(100);
  124.                 GSM_gprs_link_close();        
  125.                
  126.                 printf("关闭场景n");
  127.                 GSM_DELAY(100);
  128.                 GSM_gprs_shut_close();
  129.                 printf("5s后系统自动重启n");
  130.                 GSM_DELAY(5000);  
  131.                 Soft_Reset();
  132.         }
  133.         printf("nTCP链接成功,尝试发送数据n");        
  134.         if(GSM_gprs_send(SENDMESSAGE)!=GSM_TRUE)
  135.         {
  136.                 printf("TCP发送数据失败,请检测模块连线n");
  137.                 GSM_DELAY(1000);
  138.                 printf("IP链接断开n");
  139.                 GSM_DELAY(100);
  140.                 GSM_gprs_link_close();        
  141.                
  142.                 printf("关闭场景n");
  143.                 GSM_DELAY(100);
  144.                 GSM_gprs_shut_close();
  145.                 while(1);
  146.         }
  147.         printf("n发送数据成功n");
  148.         
  149.         GSM_CLEAN_RX();
  150.   
  151.         /* 无限循环 */
  152.   while(1)
  153.         {               
  154.                 if((timecount>=50)&& (timestop!=0xFF))
  155.                 {                        
  156.                         if(PostGPRS()!=GSM_TRUE)
  157.                                 timestop++;
  158.                         else
  159.                                 timestop=0;
  160.                         timecount=0;
  161.                 }
  162.                 if(timestop==120)//60s
  163.                 {
  164.                         printf("nIP链接断开n");
  165.                         GSM_DELAY(100);
  166.                         GSM_gprs_link_close();        
  167.                         
  168.                         printf("关闭场景n");
  169.                         GSM_DELAY(100);
  170.                         GSM_gprs_shut_close();
  171.                         
  172.                         GSM_DELAY(1000);
  173.                         timestop=0xFF;
  174.                 }
  175.                 timecount++;
  176.                 GSM_DELAY(10);
  177.         }
  178. }



  179. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
1_查看本地IP.jpg
2_串口调试助手截图.jpg
3_查看本机IP.jpg
4_KEIL中修改地址.jpg
5_启用DMZ.jpg

回帖(1)

上官

2018-2-10 20:15:49
举报

更多回帖

发帖
×
20
完善资料,
赚取积分