慈溪东航娱乐城电子游戏: [wifi] 【TI无线】CC3235串口透传程序分享

申博太阳城AB亚洲馆时时彩计划软件
1131|28
楼主
 楼主 | 2020-5-18 20:38 | 只看该作者 ||退出气泡模式 |倒序浏览 |阅读模式
年前买了两块CC3235S开发板体验一下。主要是运用在物联网方面,想做成串口透传更方便运用到项目上。
功能实现了,不过实际没有用上。
所以分享一下串口透传的程序。
使用的是CCS编译器,TIRTOS。程序使用AT_COMMANDS例程改写。程序仅是用来验证串口透传的收发能力,有部分问题没有解决。

主要代码是这三个函数:

  1. //*****************************************************************************
  2. //
  3. //! ATCommands_RecvTask
  4. //!
  5. //!  \param  pvParameters
  6. //!
  7. //!  \return none
  8. //!
  9. //!  \brief   AT event Task handler function to receive inputs
  10. //
  11. //*****************************************************************************

  12. void * ATCommands_RecvTask(void *pvParameters)
  13. {
  14.     int status;
  15.     SlSocklen_t AddrSize;
  16.     AddrSize = sizeof(SlSockAddrIn_t);
  17. #ifdef AP
  18.     Addr.sin_port = sl_Htons(sta_port);
  19.     Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(sta_addr3, sta_addr2, sta_addr1, sta_addr0));
  20. #else
  21.     Addr.sin_port = sl_Htons(ap_port);
  22.     Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(ap_addr3, ap_addr2, ap_addr1, ap_addr0));
  23. #endif
  24.     while(1)
  25.     {
  26.         status = sl_RecvFrom(Sd, RecvBuf, ATCOMMANDS_RECV_BUF_SIZE, 0, ( SlSockAddr_t *)&Addr, &AddrSize);
  27.         SendData(RecvBuf, status);
  28.         LED_toggle(ledHandle[1]);
  29.     }
  30. }

  31. //*****************************************************************************
  32. //
  33. //! ATCommands_SendTask
  34. //!
  35. //!  \param  pvParameters
  36. //!
  37. //!  \return none
  38. //!
  39. //!  \brief   AT event Task handler function to receive inputs
  40. //
  41. //*****************************************************************************

  42. void * ATCommands_SendTask(void *pvParameters)
  43. {
  44.     int len;

  45. #ifdef AP
  46.     Addr.sin_port = sl_Htons(sta_port);
  47.     Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(sta_addr3, sta_addr2, sta_addr1, sta_addr0));
  48. #else
  49.     Addr.sin_port = sl_Htons(ap_port);
  50.     Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(ap_addr3, ap_addr2, ap_addr1, ap_addr0));
  51. #endif
  52.     while(1)
  53.     {
  54.         //usleep(1);
  55.         len = GetRawCmd(SendBuf, ATCOMMANDS_SEND_BUF_SIZE);
  56.         sl_SendTo(Sd, SendBuf, len, 0, (SlSockAddr_t*)&Addr,sizeof(SlSockAddr_t));
  57.     }
  58. }

  59. //*****************************************************************************
  60. //
  61. //! mainThread
  62. //!
  63. //!  \param  pvParameters
  64. //!
  65. //!  \return none
  66. //!
  67. //!  \brief Task handler
  68. //
  69. //*****************************************************************************

  70. void mainThread(void *pvParameters)
  71. {
  72.     //uint8_t Mode = 1;
  73.     uint8_t channel = 36;
  74.     uint8_t Ssid[] = "Test_AP";
  75.     uint8_t val = SL_WLAN_SEC_TYPE_WPA_WPA2;
  76.     uint8_t password[] = {"12345678"};
  77.     uint16_t len = strlen(password);
  78.     int32_t status = 0;
  79.     int16_t Role;
  80.     int16_t Index;
  81.     SlWlanSecParams_t SecParams;

  82.     LED_Params     ledParams;
  83.     pthread_attr_t pAttrs;
  84.     pthread_attr_t pAttrs1;
  85.     struct sched_param priParam;

  86.     /* Initialize SlNetSock layer with CC31xx/CC32xx interface */
  87.     status = ti_net_SlNet_initConfig();
  88.     if(0 != status)
  89.     {
  90.         UART_PRINT("Failed to initialize SlNetSock\n\r");
  91.     }

  92.     GPIO_init();
  93.     SPI_init();
  94.     LED_init();

  95.     /* Open LED0 and LED1 with default params */
  96.     LED_Params_init(&ledParams);
  97.     ledHandle[CONFIG_LED_1] = LED_open(CONFIG_LED_1, &ledParams);
  98.     ledHandle[CONFIG_LED_2] = LED_open(CONFIG_LED_2, &ledParams);

  99.     /* Configure the UART */
  100.     InitTerm();

  101.     /* Create AT Command module */
  102. #ifdef AP
  103.     ATCmd_create();
  104.     sl_Start(0, 0, 0);
  105.     sl_WlanSetMode(ROLE_AP);
  106.     sl_Stop(0);
  107.     Role = sl_Start(0, 0, 0);
  108.     if (ROLE_AP != Role)
  109.     {
  110.         UART_PRINT("AP failure:%d\n\r", Role);/* Role Error */
  111.     } else {
  112.         UART_PRINT("Role:%d\n\r", Role);
  113.     }

  114.     /* AP */
  115.     //sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_ENABLE_5G, 1, (_u8*)&Mode);
  116.     sl_WlanSet(SL_WLAN_CFG_AP_ID, SL_WLAN_AP_OPT_CHANNEL, 1, (_u8 *)& channel);
  117.     sl_WlanSet(SL_WLAN_CFG_AP_ID, SL_WLAN_AP_OPT_SSID, strlen(Ssid), Ssid);
  118.     sl_WlanSet(SL_WLAN_CFG_AP_ID, SL_WLAN_AP_OPT_SECURITY_TYPE, 1, (_u8 *)&val);
  119.     sl_WlanSet(SL_WLAN_CFG_AP_ID, SL_WLAN_AP_OPT_PASSWORD, len, (_u8 *)password);

  120.     Sd = sl_Socket(SL_AF_INET, SL_SOCK_DGRAM, 0);
  121.     if( 0 > Sd )
  122.     {
  123.         UART_PRINT("Socket error\n\r");// error
  124.     }
  125.     UART_PRINT("Socket:%d\n\r", Sd);
  126.     Addr.sin_family = SL_AF_INET;
  127.     Addr.sin_port = sl_Htons(ap_port);
  128.     Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(ap_addr3, ap_addr2, ap_addr1, ap_addr0));
  129.     status = sl_Bind(Sd, ( SlSockAddr_t *)&Addr, sizeof(SlSockAddrIn_t));
  130.     if( status )
  131.     {
  132.         UART_PRINT("Bind error:%d\n\r", status);// error
  133.     } else {
  134.         UART_PRINT("Bind Success\n\r");
  135.     }
  136. #else
  137.     ATCmd_create();
  138.     sl_Start(0, 0, 0);
  139.     sl_WlanSetMode(ROLE_STA);
  140.     sl_Stop(0);
  141.     Role = sl_Start(0, 0, 0);
  142.     if (ROLE_STA != Role)
  143.     {
  144.         UART_PRINT("STA failure:%d\n\r", Role);/* Role Error */
  145.     } else {
  146.         UART_PRINT("Role:%d\n\r", Role);
  147.     }
  148.     /* STA */
  149.     SecParams.Type = SL_WLAN_SEC_TYPE_WPA_WPA2;
  150.     SecParams.Key = "00000000";
  151.     SecParams.KeyLen = strlen(SecParams.Key);

  152.     Index = sl_WlanProfileAdd("Test_AP", strlen("Test_AP"), NULL, &SecParams, NULL, 15 /*Priority*/, 0);
  153.     UART_PRINT("Index:%d\n\r", Index);

  154.     /*status = sl_WlanConnect("Test_AP", strlen("Test_AP"), 0,&SecParams, 0);
  155.     while (status)
  156.     {
  157.         UART_PRINT("Connect failure :%d\n\r", status);
  158.         sleep(1);
  159.         status = sl_WlanConnect("Test_AP", strlen("Test_AP"), 0,&SecParams, 0);
  160.     }
  161.     UART_PRINT("Connect Success\n\r");*/
  162.     Sd = sl_Socket(SL_AF_INET, SL_SOCK_DGRAM, 0);
  163.     if( 0 > Sd )
  164.     {
  165.         UART_PRINT("Socket error\n\r");
  166.     }
  167.     UART_PRINT("Socket:%d\n\r", Sd);
  168.     Addr.sin_family = SL_AF_INET;
  169.     Addr.sin_port = sl_Htons(sta_port);
  170.     Addr.sin_addr.s_addr = SL_INADDR_ANY;//sl_Htonl(SL_IPV4_VAL(sta_addr3, sta_addr2, sta_addr1, sta_addr0));
  171.     status = sl_Bind(Sd, ( SlSockAddr_t *)&Addr, sizeof(SlSockAddrIn_t));
  172.     if( status )
  173.     {
  174.         UART_PRINT("Bind error:%d\n\r", status);
  175.     } else {
  176.         UART_PRINT("Bind Success\n\r");
  177.     }

  178. #endif


  179.     ATCommands_displayBanner();
  180.     pthread_attr_init(&pAttrs);
  181.     priParam.sched_priority = 5;
  182.     status = pthread_attr_setschedparam(&pAttrs, &priParam);
  183.     status |= pthread_attr_setstacksize(&pAttrs, ATCOMMANDS_TASK_STACK_SIZE);

  184.     status =
  185.         pthread_create( &ATCommands_Recv,
  186.                         &pAttrs,
  187.                         ATCommands_RecvTask,
  188.                         NULL                        );
  189.     if(status != 0)
  190.     {
  191.         UART_PRINT("could not create task\n\r");
  192.         /* error handling */
  193.         while(1)
  194.         {
  195.             ;
  196.         }
  197.     }

  198.     pthread_attr_init(&pAttrs1);
  199.     priParam.sched_priority = 4;
  200.     status = pthread_attr_setschedparam(&pAttrs1, &priParam);
  201.     status |= pthread_attr_setstacksize(&pAttrs1, ATCOMMANDS_TASK_STACK_SIZE);

  202.     status =
  203.         pthread_create( &ATCommands_Send,
  204.                         &pAttrs1,
  205.                         ATCommands_SendTask,
  206.                         NULL                        );
  207.     if(status != 0)
  208.     {
  209.         UART_PRINT("could not create task\n\r");
  210.         /* error handling */
  211.         while(1)
  212.         {
  213.             ;
  214.         }
  215.     }

  216.     //ATCommands_readCmd();
  217. }
复制代码
在mainThread函数中初始化CC3235芯片。AP和STA模式通过宏定义决定。
AP模式:
需要写配置模式sl_WlanSetMode(ROLE_AP);
在配置各种参数channel,ssid,password,val。
5G频段的channel是36、40、44、48、52、56、60、64、100、104、108、112、116、120、124、128、132、136、140、144、149、153、157、161、165
使用的UDP,先创建socket,在绑定IP地址和端口

STA模式:
需要写配置模式sl_WlanSetMode(ROLE_STA);
我配置了自动连接。
    SecParams.Type = SL_WLAN_SEC_TYPE_WPA_WPA2;
    SecParams.Key = "00000000";
    SecParams.KeyLen = strlen(SecParams.Key);
    Index = sl_WlanProfileAdd("Test_AP", strlen("Test_AP"), NULL, &SecParams, NULL, 15 /*Priority*/, 0);

同样是UDP,创建socket,但是之后这一步一直没懂,当STA配置地址时,不能自己设定IP,只能使用:
Addr.sin_addr.s_addr = SL_INADDR_ANY;
才不会报错。
如果我使用:
Addr.sin_addr.s_addr = sl_Htonl(SL_IPV4_VAL(sta_addr3, sta_addr2, sta_addr1, sta_addr0));
这样自己设定的IP,sl_Blnd函数会报错。所以导致程序有一个问题,最后再说。

这样AP和STA配置完成后,就可以开始通讯了。
ATCommands_RecvTask函数用来接收CC3235S信息,并将信息通过串口打印出来。
ATCommands_SendTask函数用来接收串口信息,并通过CC3235S发送出去。

测试结果就不说了,毕竟是面向的物联网。

遇到的问题是,由于STA不能用自定的IP,所以必须AP收到一次STA的数据,AP才能知道STA的地址。之后才能自由的串口透传。也希望大家帮忙解决一下。

最后把C文件传上来
at_commands.zip (3.51 KB, 下载次数: 9)
沙发
| 2020-5-18 21:30 | 只看该作者
你最后说的这个问题,是有网络通讯的协议决定的。
必须先建立连接,ap才能知道sta的地址,才能进行数据传输
板凳
| 2020-5-25 16:08 | 只看该作者
地板
| 2020-6-1 15:30 | 只看该作者
非常感谢楼主分享
5
| 2020-6-1 15:30 | 只看该作者
代码好详细啊
6
| 2020-6-1 15:30 | 只看该作者
请问什么叫透传啊
7
| 2020-6-1 15:31 | 只看该作者
楼主辛苦了
8
| 2020-6-1 15:31 | 只看该作者
方便分享整个工程吗
9
| 2020-6-1 15:31 | 只看该作者
感谢楼主的分享呀
10
| 2020-7-2 20:52 | 只看该作者
怎么用两个串口做透传  
11
| 2020-7-2 21:04 | 只看该作者
CC3235芯片是TI公司的第三代Wi-Fi产品
12
| 2020-7-2 21:04 | 只看该作者
这个的性能怎么样     
13
| 2020-7-2 21:05 | 只看该作者
      
14
| 2020-7-2 21:05 | 只看该作者
怎么设置为串口透传模式  
15
| 2020-7-2 21:05 | 只看该作者
透传模块怎么使用  
16
| 2020-7-2 21:05 | 只看该作者
串口模块之间透传需要注意什么
17
| 2020-7-2 21:06 | 只看该作者
串口透传模块怎么使用
18
| 2020-7-2 21:06 | 只看该作者
如何做出稳定的BLE蓝牙4.0串口透传模块
19
| 2020-7-2 21:06 | 只看该作者
CC3235S的原理图有吗   
20
| 2020-7-2 21:06 | 只看该作者
谢谢楼主分享的资料了   
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

申博太阳城AB亚洲馆时时彩计划软件 永利游戏开户直营 返回顶部 返回列表
菲律宾申博会员游戏下载 微信彩票群 777娱乐EB棋牌 赌场vip网上娱乐场 申博太阳城AB亚洲馆时时彩计划软件
ag国际馆娱乐平台 申博娱乐139777官网现金网登入 凤凰娱乐开户 yg外星人 菲律宾申博太阳城娱乐现金网官网
博狗最低投注 广东会娱乐平台网址 六彩香港 申博最新网址 重庆时时彩qq交流群
新金沙棋牌游戏网址 申博太阳城官网现金手机APP下载登入 金沙贵宾会线路检测登入 申博网址申请手机APP下载登入 澳门新葡京注册网址官方网