[其他ST产品] 使用keil5中的RL_TCPNet中间件建立一个工程

[复制链接]
2458|43
 楼主| 原来是wjc 发表于 2023-4-19 00:07 | 显示全部楼层
配置启动文件的中断调用堆栈
68103643ec04f9d74c.png
 楼主| 原来是wjc 发表于 2023-4-19 00:09 | 显示全部楼层
RTX系统配置要注意以下几点:1.RTOS kernel Timer要和系统时钟频率相同。2.RL_TCPnet在初始化时会创建2个线程,每个线程给它分配1k的栈空间,"Number of threads whith usr-provied stack size "设置为2;"Total stack size for threads whith user-provied stack size "设置2048,总共2K。待会儿调试窗口看到线程的运行状况。3.定时器线程运行栈设置为512。
 楼主| 原来是wjc 发表于 2023-4-19 00:09 | 显示全部楼层
中断服务程序使用堆栈介绍
71322643ec0d13b418.png
 楼主| 原来是wjc 发表于 2023-4-19 00:10 | 显示全部楼层
RL_TCPnet在RTXv4中使用的堆栈需求
4735643ec0df8163c.png
 楼主| 原来是wjc 发表于 2023-4-19 00:10 | 显示全部楼层
3.配置NetWork

RTX配置好后,接下来就是配置网络。

NetConfig.c配置基本上不用改。“Local Host Name”可以改成自定义。作用可以不使用IP地址就行访问。如:ping my_host 指令
20264643ec0f001257.png
 楼主| 原来是wjc 发表于 2023-4-19 00:10 | 显示全部楼层
Net_Config_ETH_0.h的配置:改IP地址和网关,不开启DHCP,将该线程栈设置1024。IPV6可以关掉,其它默认。
48501643ec0fb03cb1.png
 楼主| 原来是wjc 发表于 2023-4-19 00:10 | 显示全部楼层
Net_Config_UDP.h配置使用默认配置5个socket
80652643ec10780296.png
 楼主| 原来是wjc 发表于 2023-4-19 00:10 | 显示全部楼层
Net_Debug.c配置开启相应的服务报警,该报警有3个级别,我选择全部显示,当然也可以只选择errors 级别
47675643ec11281722.png
 楼主| 原来是wjc 发表于 2023-4-19 00:11 | 显示全部楼层
4.更改必要的代码

现在大体上基本上配置完了,接下来配置一下复位脚,向udp_socket.c添加代码。注意stdio需要初始化,外部声明stdout_init(),然后在main函数进行初始化。
  1. #include "rl_net.h"
  2. #include "GPIO_STM32F10x.h"//需要手动添加
  3. #include <stdio.h>  //需要手动添加

  4. int32_t udp_sock;                       // UDP socket handle

  5. extern int stdout_init (void);//需要手动添加
  6. void send_udp_data (void);


  7. static void delay_ms (int ms) {
  8.   ms *= (SystemCoreClock/10000);
  9.   while (ms--) { __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); }
  10. }

  11. void GPIO_Configuration(void)
  12. {
  13.         GPIO_InitTypeDef GPIO_InitStructure;
  14.        
  15.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  16.        
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  21. }

  22. void PHY_Reset(void)
  23. {
  24.         GPIO_ResetBits(GPIOA,GPIO_Pin_6);
  25.         delay_ms(100);
  26.         GPIO_SetBits(GPIOA,GPIO_Pin_6);
  27. }
 楼主| 原来是wjc 发表于 2023-4-19 00:11 | 显示全部楼层
更改一下例子代码,这个例子代码的作用是本地UDP接收到0x01 0xAA指令就向目标UDP回显数据。目标IP和端口是192.168.1.220:77,当然这可以自己随意改动
  1. // Notify the user application about UDP socket events.
  2. uint32_t udp_cb_func (int32_t socket, const  NET_ADDR *addr, const uint8_t *buf, uint32_t len) {

  3.   // Data received
  4.   if ((buf[0] == 0x01) && (len == 2)) {
  5.     // Switch LEDs on and off
  6.     // LED_out (buf[1]);
  7.                 send_udp_data();
  8.   }
  9.   return (0);
  10. }

  11. // Send UDP data to destination client.
  12. void send_udp_data (void) {

  13.   if (udp_sock > 0) {
  14.     // IPv4 address: 192.168.0.1
  15.     NET_ADDR addr = { NET_ADDR_IP4, 77, 192, 168, 1, 220 };//可以根据自己的IP地址来
  16.     // IPv6 address: [fe80::1c30:6cff:fea2:455e]
  17. //  NET_ADDR addr = { NET_ADDR_IP6, 2000,
  18. //                    0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  19. //                    0x1c, 0x30, 0x6c, 0xff, 0xfe, 0xa2, 0x45, 0x5e };
  20.     uint8_t *sendbuf;

  21.     sendbuf = netUDP_GetBuffer (2);
  22.     sendbuf[0] = 0x01;
  23.     sendbuf[1] = 0xAA;

  24.     netUDP_Send (udp_sock, &addr, sendbuf, 2);
  25.   }
  26. }
 楼主| 原来是wjc 发表于 2023-4-19 00:11 | 显示全部楼层
主函数添加复位引脚初始化代码
  1. int main (void) {

  2.         stdout_init();
  3.         GPIO_Configuration();
  4.         PHY_Reset();
  5.         printf("PHY_RESET!\r\n");
  6.         netInitialize ();

  7.   // Initialize UDP socket and open port 2000
  8.   udp_sock = netUDP_GetSocket (udp_cb_func);
  9.   if (udp_sock > 0) {
  10.     netUDP_Open (udp_sock, 2000);
  11.   }
  12. }
 楼主| 原来是wjc 发表于 2023-4-19 00:11 | 显示全部楼层
调试

编译一下没有错误,配置一下工程,生成Hex文件就可以测试啦!
57345643ec1475cbf0.png
 楼主| 原来是wjc 发表于 2023-4-19 00:12 | 显示全部楼层
进入Debug调试模式,打开线程窗口可以看到系统创建的2个线程。如果使能其它服务,将会创建其它线程,对应的RTX的Number of Threads的相关配置要更改设置。
40714643ec15243b99.png
 楼主| 原来是wjc 发表于 2023-4-19 00:12 | 显示全部楼层
连接好串口,查看串口调试助手打印的信息,可以很层次的看见系统运行的情况。可以很清晰的看到,数据通信是按模型层次来一步步传递的。

35057643ec15d15c26.png
 楼主| 原来是wjc 发表于 2023-4-19 00:12 | 显示全部楼层
打开网络调试助手,设置本地IP和远程目标IP。发送数据,就可以看到数据回显,表示通信成功
18510643ec168d2ecd.png
童雨竹 发表于 2024-6-21 07:26 | 显示全部楼层

脉冲变压器的原/副边相位关系,
Wordsworth 发表于 2024-6-21 08:29 | 显示全部楼层

有不普通的门道
Clyde011 发表于 2024-6-21 09:32 | 显示全部楼层

只能处理较小的能量
万图 发表于 2024-6-21 11:28 | 显示全部楼层

电路正常工作
Uriah 发表于 2024-6-21 12:31 | 显示全部楼层

灌封前基材外观保持清洁和干燥。将混合好的胶料灌注于需灌封的器件内
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部