refactor: 完成R8裸机lwIP移植并更新文档
This commit is contained in:
+109
-17
@@ -18,7 +18,6 @@
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "cmsis_os.h"
|
||||
#include "dma.h"
|
||||
#include "iwdg.h"
|
||||
#include "spi.h"
|
||||
@@ -28,10 +27,17 @@
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "CH390.h"
|
||||
#include "SEGGER_RTT.h"
|
||||
#include "config.h"
|
||||
#include "flash_param.h"
|
||||
#include "ethernetif.h"
|
||||
#include "lwip/init.h"
|
||||
#include "lwip/timeouts.h"
|
||||
#include "tcp_client.h"
|
||||
#include "tcp_server.h"
|
||||
#include "uart_trans.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
@@ -66,10 +72,11 @@
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
void SystemClock_Config(void);
|
||||
void MX_FREERTOS_Init(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
static void CH390_HardwareReset(void);
|
||||
static void LED_Init(void);
|
||||
static void App_Init(void);
|
||||
static void App_Poll(void);
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
@@ -110,6 +117,99 @@ void LED_Toggle(void)
|
||||
HAL_GPIO_TogglePin(LED_PORT, LED_PIN);
|
||||
}
|
||||
|
||||
static void App_Init(void)
|
||||
{
|
||||
const device_config_t *cfg;
|
||||
ip4_addr_t ipaddr;
|
||||
ip4_addr_t netmask;
|
||||
ip4_addr_t gateway;
|
||||
uart_config_t uart_cfg;
|
||||
tcp_server_config_t server_cfg;
|
||||
tcp_client_config_t client_cfg;
|
||||
|
||||
config_init();
|
||||
cfg = config_get();
|
||||
|
||||
uart_trans_init();
|
||||
|
||||
uart_cfg.baudrate = cfg->uart2_baudrate;
|
||||
uart_cfg.data_bits = cfg->uart2_databits;
|
||||
uart_cfg.stop_bits = cfg->uart2_stopbits;
|
||||
uart_cfg.parity = cfg->uart2_parity;
|
||||
uart_trans_config(UART_CHANNEL_SERVER, &uart_cfg);
|
||||
|
||||
uart_cfg.baudrate = cfg->uart3_baudrate;
|
||||
uart_cfg.data_bits = cfg->uart3_databits;
|
||||
uart_cfg.stop_bits = cfg->uart3_stopbits;
|
||||
uart_cfg.parity = cfg->uart3_parity;
|
||||
uart_trans_config(UART_CHANNEL_CLIENT, &uart_cfg);
|
||||
|
||||
uart_trans_start(UART_CHANNEL_SERVER);
|
||||
uart_trans_start(UART_CHANNEL_CLIENT);
|
||||
config_start_reception();
|
||||
|
||||
SEGGER_RTT_Init();
|
||||
SEGGER_RTT_WriteString(0, "\r\nTCP2UART boot\r\n");
|
||||
|
||||
lwip_init();
|
||||
IP4_ADDR(&ipaddr, cfg->ip[0], cfg->ip[1], cfg->ip[2], cfg->ip[3]);
|
||||
IP4_ADDR(&netmask, cfg->mask[0], cfg->mask[1], cfg->mask[2], cfg->mask[3]);
|
||||
IP4_ADDR(&gateway, cfg->gw[0], cfg->gw[1], cfg->gw[2], cfg->gw[3]);
|
||||
lwip_netif_init(&ipaddr, &netmask, &gateway);
|
||||
|
||||
server_cfg.port = cfg->server_port;
|
||||
server_cfg.auto_reconnect = true;
|
||||
tcp_server_init(&server_cfg);
|
||||
tcp_server_start();
|
||||
|
||||
memcpy(client_cfg.server_ip, cfg->remote_ip, sizeof(client_cfg.server_ip));
|
||||
client_cfg.server_port = cfg->remote_port;
|
||||
client_cfg.auto_reconnect = true;
|
||||
client_cfg.reconnect_interval_ms = cfg->reconnect_interval;
|
||||
tcp_client_init(&client_cfg);
|
||||
tcp_client_connect();
|
||||
}
|
||||
|
||||
static void App_Poll(void)
|
||||
{
|
||||
uint8_t buffer[128];
|
||||
int len;
|
||||
|
||||
ethernetif_poll();
|
||||
ethernetif_check_link();
|
||||
sys_check_timeouts();
|
||||
tcp_client_poll();
|
||||
uart_trans_poll();
|
||||
config_poll();
|
||||
|
||||
len = tcp_server_recv(buffer, sizeof(buffer), 0u);
|
||||
if (len > 0) {
|
||||
uart_trans_write(UART_CHANNEL_SERVER, buffer, (uint16_t)len);
|
||||
}
|
||||
|
||||
len = tcp_client_recv(buffer, sizeof(buffer), 0u);
|
||||
if (len > 0) {
|
||||
uart_trans_write(UART_CHANNEL_CLIENT, buffer, (uint16_t)len);
|
||||
}
|
||||
|
||||
len = (int)uart_trans_read(UART_CHANNEL_SERVER, buffer, sizeof(buffer));
|
||||
if (len > 0) {
|
||||
tcp_server_send(buffer, (uint16_t)len);
|
||||
}
|
||||
|
||||
len = (int)uart_trans_read(UART_CHANNEL_CLIENT, buffer, sizeof(buffer));
|
||||
if (len > 0) {
|
||||
tcp_client_send(buffer, (uint16_t)len);
|
||||
}
|
||||
|
||||
if (config_is_reset_requested()) {
|
||||
config_clear_reset_requested();
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
HAL_IWDG_Refresh(&hiwdg);
|
||||
}
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/**
|
||||
@@ -154,21 +254,11 @@ int main(void)
|
||||
|
||||
/* CH390 硬件复位 */
|
||||
CH390_HardwareReset();
|
||||
|
||||
/* Initialize configuration from Flash (fallback to defaults on invalid data) */
|
||||
config_init();
|
||||
|
||||
App_Init();
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Init scheduler */
|
||||
osKernelInitialize(); /* Call init function for freertos objects (in cmsis_os2.c) */
|
||||
MX_FREERTOS_Init();
|
||||
|
||||
/* Start scheduler */
|
||||
osKernelStart();
|
||||
|
||||
/* We should never get here as control is now taken by the scheduler */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
while (1)
|
||||
@@ -176,6 +266,7 @@ int main(void)
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
App_Poll();
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
@@ -228,13 +319,14 @@ void SystemClock_Config(void)
|
||||
#ifdef __GNUC__
|
||||
int _write(int file, char *ptr, int len)
|
||||
{
|
||||
HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY);
|
||||
return len;
|
||||
(void)file;
|
||||
return (int)SEGGER_RTT_Write(0, ptr, (unsigned)len);
|
||||
}
|
||||
#else
|
||||
int fputc(int ch, FILE *f)
|
||||
{
|
||||
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
|
||||
(void)f;
|
||||
SEGGER_RTT_PutChar(0, (char)ch);
|
||||
return ch;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user