Compare commits

..

1 Commits

Author SHA1 Message Date
wangxujie 2dc7c95b7a 解决通讯卡死问题 2025-04-21 08:24:18 +08:00
12 changed files with 5121 additions and 5325 deletions

View File

@ -23,7 +23,8 @@
#define __MAIN_H #define __MAIN_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C"
{
#endif #endif
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
@ -36,10 +37,10 @@ extern "C" {
#include "tcpserverc.h" #include "tcpserverc.h"
#include "leds.h" #include "leds.h"
#include <string.h> #include <string.h>
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Exported types ------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */ /* USER CODE BEGIN ET */
extern uint8_t tcp_echo_flags_hart1; extern uint8_t tcp_echo_flags_hart1;
extern uint8_t tcp_echo_flags_hart2; extern uint8_t tcp_echo_flags_hart2;
extern uint8_t tcp_echo_flags_ble1; extern uint8_t tcp_echo_flags_ble1;
@ -47,10 +48,10 @@ extern "C" {
extern uint8_t tcp_echo_flags_control; extern uint8_t tcp_echo_flags_control;
extern uint8_t send_data_flag_cmd; extern uint8_t send_data_flag_cmd;
extern uint8_t uart_forwarding_flags_hart1; extern uint8_t uart_echo_flags_hart1;
extern uint8_t uart_forwarding_flags_hart2; extern uint8_t uart_echo_flags_hart2;
extern uint8_t uart_forwarding_flags_ble1; extern uint8_t uart_echo_flags_ble1;
extern uint8_t uart_forwarding_flags_ble2; extern uint8_t uart_echo_flags_ble2;
#define ARRAY_LEN(arr) (sizeof(arr)) / (sizeof(arr[0])) #define ARRAY_LEN(arr) (sizeof(arr)) / (sizeof(arr[0]))
typedef struct typedef struct
{ {
@ -78,20 +79,20 @@ extern "C" {
#define LOCAL_PORT 5001 #define LOCAL_PORT 5001
/* USER CODE END ET */ /* USER CODE END ET */
/* Exported constants --------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */ /* USER CODE BEGIN EC */
/* USER CODE END EC */ /* USER CODE END EC */
/* Exported macro ------------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */ /* USER CODE BEGIN EM */
/* USER CODE END EM */ /* USER CODE END EM */
/* Exported functions prototypes ---------------------------------------------*/ /* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void); void Error_Handler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */
#define ENCODE_TIM8 1 #define ENCODE_TIM8 1
@ -195,7 +196,7 @@ void Error_Handler(void);
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
#define TRUE 0 #define TRUE 0
#define FAIL -1 #define FAIL -1
/* USER CODE END Private defines */ /* USER CODE END Private defines */
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -64,7 +64,6 @@ osThreadId dac_taskHandle;
osThreadId adc_taskHandle; osThreadId adc_taskHandle;
osThreadId gpio_di_do_taskHandle; osThreadId gpio_di_do_taskHandle;
osThreadId ec11_taskHandle; osThreadId ec11_taskHandle;
osThreadId uart_forwardingHandle;
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */ /* USER CODE BEGIN FunctionPrototypes */
@ -87,7 +86,6 @@ void start_dac_task(void const *argument);
void start_adc_task(void const *argument); void start_adc_task(void const *argument);
void start_gpio_di_do_task(void const *argument); void start_gpio_di_do_task(void const *argument);
void start_ec11_task(void const *argument); void start_ec11_task(void const *argument);
void start_uart_forwarding(void const *argument);
extern void MX_LWIP_Init(void); extern void MX_LWIP_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
@ -160,10 +158,6 @@ void MX_FREERTOS_Init(void)
osThreadDef(ec11_task, start_ec11_task, osPriorityNormal, 0, 512); osThreadDef(ec11_task, start_ec11_task, osPriorityNormal, 0, 512);
ec11_taskHandle = osThreadCreate(osThread(ec11_task), NULL); ec11_taskHandle = osThreadCreate(osThread(ec11_task), NULL);
/* definition and creation of uart_forwarding */
osThreadDef(uart_forwarding, start_uart_forwarding, osPriorityRealtime, 0, 512);
uart_forwardingHandle = osThreadCreate(osThread(uart_forwarding), NULL);
/* USER CODE BEGIN RTOS_THREADS */ /* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */ /* add threads, ... */
/* USER CODE END RTOS_THREADS */ /* USER CODE END RTOS_THREADS */
@ -222,7 +216,6 @@ void start_tcp_task(void const *argument)
tcp_abort(server_pcb_control); // 热插拔下线时调用 tcp_abort(server_pcb_control); // 热插拔下线时调用
tcp_echo_flags_control = 0; tcp_echo_flags_control = 0;
} }
tcp_echo_flags_ble1 = 2;
} }
else else
{ {
@ -348,28 +341,10 @@ void start_ec11_task(void const *argument)
{ {
linear_encoder_get_data(); linear_encoder_get_data();
uart_lcd_ec11_control_current(); uart_lcd_ec11_control_current();
vTaskDelay(100);
}
/* USER CODE END start_ec11_task */
}
/* USER CODE BEGIN Header_start_uart_forwarding */
/**
* @brief Function implementing the uart_forwarding thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_start_uart_forwarding */
void start_uart_forwarding(void const *argument)
{
/* USER CODE BEGIN start_uart_forwarding */
/* Infinite loop */
for (;;)
{
uart_forwarding_tcp(); uart_forwarding_tcp();
vTaskDelay(10); vTaskDelay(10);
} }
/* USER CODE END start_uart_forwarding */ /* USER CODE END start_ec11_task */
} }
/* Private application code --------------------------------------------------*/ /* Private application code --------------------------------------------------*/

View File

@ -82,10 +82,15 @@ uint8_t tcp_echo_flags_ble2 = 0;
uint8_t tcp_echo_flags_control = 0; uint8_t tcp_echo_flags_control = 0;
uint8_t send_data_flag_cmd = 0; uint8_t send_data_flag_cmd = 0;
uint8_t uart_forwarding_flags_hart1 = 0; uint8_t uart_echo_flags_hart1 = 0;
uint8_t uart_forwarding_flags_hart2 = 0; uint8_t uart_echo_flags_hart2 = 0;
uint8_t uart_forwarding_flags_ble1 = 0; uint8_t uart_echo_flags_ble1 = 0;
uint8_t uart_forwarding_flags_ble2 = 0; uint8_t uart_echo_flags_ble2 = 0;
// TEST
// uint8_t data_flag = 0;
// uint32_t receive_times1 = 0;
// uint32_t receive_times2 = 0;
// ENDTEST
extern struct netif gnetif; extern struct netif gnetif;
extern ip4_addr_t ipaddr; extern ip4_addr_t ipaddr;
@ -270,8 +275,8 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
memcpy(ble1_uart6.rx_data, ble1_uart6.rx_data_temp, Size); memcpy(ble1_uart6.rx_data, ble1_uart6.rx_data_temp, Size);
if (tcp_echo_flags_ble1 == 1) if (tcp_echo_flags_ble1 == 1)
{ {
uart_forwarding_flags_ble1 = 1; uart_echo_flags_ble1 = 1;
// user_send_data_ble1(ble1_uart6.rx_data, Size); // user_send_data_ble1(ble1_uart6.rx_data, Size);
} }
HAL_UARTEx_ReceiveToIdle_DMA(&huart6, ble1_uart6.rx_data_temp, ARRAY_LEN(ble1_uart6.rx_data_temp)); HAL_UARTEx_ReceiveToIdle_DMA(&huart6, ble1_uart6.rx_data_temp, ARRAY_LEN(ble1_uart6.rx_data_temp));
} }
@ -284,7 +289,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
memcpy(ble2_uart3.rx_data, ble2_uart3.rx_data_temp, Size); memcpy(ble2_uart3.rx_data, ble2_uart3.rx_data_temp, Size);
if (tcp_echo_flags_ble2 == 1) if (tcp_echo_flags_ble2 == 1)
{ {
uart_forwarding_flags_ble2 = 1; uart_echo_flags_ble2 = 1;
// user_send_data_ble2(ble2_uart3.rx_data, Size); // user_send_data_ble2(ble2_uart3.rx_data, Size);
} }
HAL_UARTEx_ReceiveToIdle_DMA(&huart3, ble2_uart3.rx_data_temp, ARRAY_LEN(ble2_uart3.rx_data_temp)); HAL_UARTEx_ReceiveToIdle_DMA(&huart3, ble2_uart3.rx_data_temp, ARRAY_LEN(ble2_uart3.rx_data_temp));
@ -297,7 +302,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
memcpy(hart1_uart5.rx_data, hart1_uart5.rx_data_temp, Size); memcpy(hart1_uart5.rx_data, hart1_uart5.rx_data_temp, Size);
if (tcp_echo_flags_hart1 == 1) if (tcp_echo_flags_hart1 == 1)
{ {
uart_forwarding_flags_hart1 = 1; uart_echo_flags_hart1 = 1;
// user_send_data_hart1(hart1_uart5.rx_data, Size); // user_send_data_hart1(hart1_uart5.rx_data, Size);
} }
HAL_UARTEx_ReceiveToIdle_DMA(&huart5, hart1_uart5.rx_data_temp, ARRAY_LEN(hart1_uart5.rx_data_temp)); HAL_UARTEx_ReceiveToIdle_DMA(&huart5, hart1_uart5.rx_data_temp, ARRAY_LEN(hart1_uart5.rx_data_temp));
@ -311,7 +316,7 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
memcpy(hart2_uart2.rx_data, hart2_uart2.rx_data_temp, Size); memcpy(hart2_uart2.rx_data, hart2_uart2.rx_data_temp, Size);
if (tcp_echo_flags_hart2 == 1) if (tcp_echo_flags_hart2 == 1)
{ {
uart_forwarding_flags_hart2 = 1; uart_echo_flags_hart2 = 1;
// user_send_data_hart2(hart2_uart2.rx_data, Size); // user_send_data_hart2(hart2_uart2.rx_data, Size);
} }
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, hart2_uart2.rx_data_temp, ARRAY_LEN(hart2_uart2.rx_data_temp)); HAL_UARTEx_ReceiveToIdle_DMA(&huart2, hart2_uart2.rx_data_temp, ARRAY_LEN(hart2_uart2.rx_data_temp));

View File

@ -22,7 +22,7 @@
#include "lwip.h" #include "lwip.h"
#include "lwip/init.h" #include "lwip/init.h"
#include "lwip/netif.h" #include "lwip/netif.h"
#if defined ( __CC_ARM ) /* MDK ARM Compiler */ #if defined(__CC_ARM) /* MDK ARM Compiler */
#include "lwip/sio.h" #include "lwip/sio.h"
#endif /* MDK ARM Compiler */ #endif /* MDK ARM Compiler */
#include "ethernetif.h" #include "ethernetif.h"
@ -53,8 +53,8 @@ uint8_t GATEWAY_ADDRESS[4];
/* USER CODE END 2 */ /* USER CODE END 2 */
/** /**
* LwIP initialization function * LwIP initialization function
*/ */
void MX_LWIP_Init(void) void MX_LWIP_Init(void)
{ {
/* IP addresses initialization */ /* IP addresses initialization */
@ -71,7 +71,7 @@ void MX_LWIP_Init(void)
GATEWAY_ADDRESS[2] = 1; GATEWAY_ADDRESS[2] = 1;
GATEWAY_ADDRESS[3] = 29; GATEWAY_ADDRESS[3] = 29;
/* USER CODE BEGIN IP_ADDRESSES */ /* USER CODE BEGIN IP_ADDRESSES */
uint8_t ip_address_flash[4] = {0,0,0,0}; uint8_t ip_address_flash[4] = {0,0,0,0};
flash_read_data(FLASH_USER_START_ADDR, ip_address_flash, 4); flash_read_data(FLASH_USER_START_ADDR, ip_address_flash, 4);
if (ip_address_flash[0] == 192) if (ip_address_flash[0] == 192)
@ -81,14 +81,14 @@ void MX_LWIP_Init(void)
IP_ADDRESS[2] = ip_address_flash[2]; IP_ADDRESS[2] = ip_address_flash[2];
IP_ADDRESS[3] = ip_address_flash[3]; IP_ADDRESS[3] = ip_address_flash[3];
} }
/* USER CODE END IP_ADDRESSES */ /* USER CODE END IP_ADDRESSES */
/* Initilialize the LwIP stack with RTOS */ /* Initilialize the LwIP stack with RTOS */
tcpip_init( NULL, NULL ); tcpip_init(NULL, NULL);
/* IP addresses initialization without DHCP (IPv4) */ /* IP addresses initialization without DHCP (IPv4) */
IP4_ADDR(&ipaddr, IP_ADDRESS[0], IP_ADDRESS[1], IP_ADDRESS[2], IP_ADDRESS[3]); IP4_ADDR(&ipaddr, IP_ADDRESS[0], IP_ADDRESS[1], IP_ADDRESS[2], IP_ADDRESS[3]);
IP4_ADDR(&netmask, NETMASK_ADDRESS[0], NETMASK_ADDRESS[1] , NETMASK_ADDRESS[2], NETMASK_ADDRESS[3]); IP4_ADDR(&netmask, NETMASK_ADDRESS[0], NETMASK_ADDRESS[1], NETMASK_ADDRESS[2], NETMASK_ADDRESS[3]);
IP4_ADDR(&gw, GATEWAY_ADDRESS[0], GATEWAY_ADDRESS[1], GATEWAY_ADDRESS[2], GATEWAY_ADDRESS[3]); IP4_ADDR(&gw, GATEWAY_ADDRESS[0], GATEWAY_ADDRESS[1], GATEWAY_ADDRESS[2], GATEWAY_ADDRESS[3]);
/* add the network interface (IPv4/IPv6) with RTOS */ /* add the network interface (IPv4/IPv6) with RTOS */
@ -112,14 +112,14 @@ void MX_LWIP_Init(void)
netif_set_link_callback(&gnetif, ethernet_link_status_updated); netif_set_link_callback(&gnetif, ethernet_link_status_updated);
/* Create the Ethernet link handler thread */ /* Create the Ethernet link handler thread */
/* USER CODE BEGIN H7_OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */ /* USER CODE BEGIN H7_OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */
osThreadDef(EthLink, ethernet_link_thread, osPriorityBelowNormal, 0, configMINIMAL_STACK_SIZE * 2); osThreadDef(EthLink, ethernet_link_thread, osPriorityBelowNormal, 0, configMINIMAL_STACK_SIZE * 2);
osThreadCreate(osThread(EthLink), &gnetif); osThreadCreate(osThread(EthLink), &gnetif);
/* USER CODE END H7_OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */ /* USER CODE END H7_OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN 3 */
/* USER CODE END 3 */ /* USER CODE END 3 */
} }
#ifdef USE_OBSOLETE_USER_CODE_SECTION_4 #ifdef USE_OBSOLETE_USER_CODE_SECTION_4
@ -130,25 +130,25 @@ void MX_LWIP_Init(void)
#endif #endif
/** /**
* @brief Notify the User about the network interface config status * @brief Notify the User about the network interface config status
* @param netif: the network interface * @param netif: the network interface
* @retval None * @retval None
*/ */
static void ethernet_link_status_updated(struct netif *netif) static void ethernet_link_status_updated(struct netif *netif)
{ {
if (netif_is_up(netif)) if (netif_is_up(netif))
{ {
/* USER CODE BEGIN 5 */ /* USER CODE BEGIN 5 */
/* USER CODE END 5 */ /* USER CODE END 5 */
} }
else /* netif is down */ else /* netif is down */
{ {
/* USER CODE BEGIN 6 */ /* USER CODE BEGIN 6 */
/* USER CODE END 6 */ /* USER CODE END 6 */
} }
} }
#if defined ( __CC_ARM ) /* MDK ARM Compiler */ #if defined(__CC_ARM) /* MDK ARM Compiler */
/** /**
* Opens a serial device for communication. * Opens a serial device for communication.
* *
@ -159,9 +159,9 @@ sio_fd_t sio_open(u8_t devnum)
{ {
sio_fd_t sd; sio_fd_t sd;
/* USER CODE BEGIN 7 */ /* USER CODE BEGIN 7 */
sd = 0; // dummy code sd = 0; // dummy code
/* USER CODE END 7 */ /* USER CODE END 7 */
return sd; return sd;
} }
@ -176,8 +176,8 @@ sio_fd_t sio_open(u8_t devnum)
*/ */
void sio_send(u8_t c, sio_fd_t fd) void sio_send(u8_t c, sio_fd_t fd)
{ {
/* USER CODE BEGIN 8 */ /* USER CODE BEGIN 8 */
/* USER CODE END 8 */ /* USER CODE END 8 */
} }
/** /**
@ -195,9 +195,9 @@ u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len)
{ {
u32_t recved_bytes; u32_t recved_bytes;
/* USER CODE BEGIN 9 */ /* USER CODE BEGIN 9 */
recved_bytes = 0; // dummy code recved_bytes = 0; // dummy code
/* USER CODE END 9 */ /* USER CODE END 9 */
return recved_bytes; return recved_bytes;
} }
@ -214,10 +214,9 @@ u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len)
{ {
u32_t recved_bytes; u32_t recved_bytes;
/* USER CODE BEGIN 10 */ /* USER CODE BEGIN 10 */
recved_bytes = 0; // dummy code recved_bytes = 0; // dummy code
/* USER CODE END 10 */ /* USER CODE END 10 */
return recved_bytes; return recved_bytes;
} }
#endif /* MDK ARM Compiler */ #endif /* MDK ARM Compiler */

View File

@ -38,7 +38,7 @@
/* Private define ------------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/
/* The time to block waiting for input. */ /* The time to block waiting for input. */
#define TIME_WAITING_FOR_INPUT ( portMAX_DELAY ) #define TIME_WAITING_FOR_INPUT (portMAX_DELAY)
/* USER CODE BEGIN OS_THREAD_STACK_SIZE_WITH_RTOS */ /* USER CODE BEGIN OS_THREAD_STACK_SIZE_WITH_RTOS */
/* Stack size of the interface thread */ /* Stack size of the interface thread */
#define INTERFACE_THREAD_STACK_SIZE (350) #define INTERFACE_THREAD_STACK_SIZE (350)
@ -48,8 +48,8 @@
#define IFNAME1 't' #define IFNAME1 't'
/* ETH Setting */ /* ETH Setting */
#define ETH_DMA_TRANSMIT_TIMEOUT ( 20U ) #define ETH_DMA_TRANSMIT_TIMEOUT (20U)
#define ETH_TX_BUFFER_MAX ((ETH_TX_DESC_CNT) * 2U) #define ETH_TX_BUFFER_MAX ((ETH_TX_DESC_CNT) * 2U)
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */
@ -81,8 +81,8 @@
/* Data Type Definitions */ /* Data Type Definitions */
typedef enum typedef enum
{ {
RX_ALLOC_OK = 0x00, RX_ALLOC_OK = 0x00,
RX_ALLOC_ERROR = 0x01 RX_ALLOC_ERROR = 0x01
} RxAllocStatusTypeDef; } RxAllocStatusTypeDef;
typedef struct typedef struct
@ -92,40 +92,40 @@ typedef struct
} RxBuff_t; } RxBuff_t;
/* Memory Pool Declaration */ /* Memory Pool Declaration */
#define ETH_RX_BUFFER_CNT 12U #define ETH_RX_BUFFER_CNT 12U
LWIP_MEMPOOL_DECLARE(RX_POOL, ETH_RX_BUFFER_CNT, sizeof(RxBuff_t), "Zero-copy RX PBUF pool"); LWIP_MEMPOOL_DECLARE(RX_POOL, ETH_RX_BUFFER_CNT, sizeof(RxBuff_t), "Zero-copy RX PBUF pool");
/* Variable Definitions */ /* Variable Definitions */
static uint8_t RxAllocStatus; static uint8_t RxAllocStatus;
ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */ ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */ ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
/* USER CODE END 2 */ /* USER CODE END 2 */
osSemaphoreId RxPktSemaphore = NULL; /* Semaphore to signal incoming packets */ osSemaphoreId RxPktSemaphore = NULL; /* Semaphore to signal incoming packets */
osSemaphoreId TxPktSemaphore = NULL; /* Semaphore to signal transmit packet complete */ osSemaphoreId TxPktSemaphore = NULL; /* Semaphore to signal transmit packet complete */
/* Global Ethernet handle */ /* Global Ethernet handle */
ETH_HandleTypeDef heth; ETH_HandleTypeDef heth;
ETH_TxPacketConfig TxConfig; ETH_TxPacketConfig TxConfig;
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
static void ethernetif_input(void const * argument); static void ethernetif_input(void const *argument);
int32_t ETH_PHY_IO_Init(void); int32_t ETH_PHY_IO_Init(void);
int32_t ETH_PHY_IO_DeInit (void); int32_t ETH_PHY_IO_DeInit(void);
int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal); int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal);
int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal); int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal);
int32_t ETH_PHY_IO_GetTick(void); int32_t ETH_PHY_IO_GetTick(void);
lan8742_Object_t LAN8742; lan8742_Object_t LAN8742;
lan8742_IOCtx_t LAN8742_IOCtx = {ETH_PHY_IO_Init, lan8742_IOCtx_t LAN8742_IOCtx = {ETH_PHY_IO_Init,
ETH_PHY_IO_DeInit, ETH_PHY_IO_DeInit,
ETH_PHY_IO_WriteReg, ETH_PHY_IO_WriteReg,
ETH_PHY_IO_ReadReg, ETH_PHY_IO_ReadReg,
ETH_PHY_IO_GetTick}; ETH_PHY_IO_GetTick};
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN 3 */
@ -135,33 +135,33 @@ lan8742_IOCtx_t LAN8742_IOCtx = {ETH_PHY_IO_Init,
void pbuf_free_custom(struct pbuf *p); void pbuf_free_custom(struct pbuf *p);
/** /**
* @brief Ethernet Rx Transfer completed callback * @brief Ethernet Rx Transfer completed callback
* @param handlerEth: ETH handler * @param handlerEth: ETH handler
* @retval None * @retval None
*/ */
void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *handlerEth) void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *handlerEth)
{ {
osSemaphoreRelease(RxPktSemaphore); osSemaphoreRelease(RxPktSemaphore);
} }
/** /**
* @brief Ethernet Tx Transfer completed callback * @brief Ethernet Tx Transfer completed callback
* @param handlerEth: ETH handler * @param handlerEth: ETH handler
* @retval None * @retval None
*/ */
void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *handlerEth) void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *handlerEth)
{ {
osSemaphoreRelease(TxPktSemaphore); osSemaphoreRelease(TxPktSemaphore);
} }
/** /**
* @brief Ethernet DMA transfer error callback * @brief Ethernet DMA transfer error callback
* @param handlerEth: ETH handler * @param handlerEth: ETH handler
* @retval None * @retval None
*/ */
void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *handlerEth) void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *handlerEth)
{ {
if((HAL_ETH_GetDMAError(handlerEth) & ETH_DMASR_RBUS) == ETH_DMASR_RBUS) if ((HAL_ETH_GetDMAError(handlerEth) & ETH_DMASR_RBUS) == ETH_DMASR_RBUS)
{ {
osSemaphoreRelease(RxPktSemaphore); osSemaphoreRelease(RxPktSemaphore);
} }
} }
@ -187,7 +187,7 @@ static void low_level_init(struct netif *netif)
ETH_MACConfigTypeDef MACConf = {0}; ETH_MACConfigTypeDef MACConf = {0};
/* Start ETH HAL Init */ /* Start ETH HAL Init */
uint8_t MACAddr[6] ; uint8_t MACAddr[6];
heth.Instance = ETH; heth.Instance = ETH;
MACAddr[0] = 0x00; MACAddr[0] = 0x00;
MACAddr[1] = 0x80; MACAddr[1] = 0x80;
@ -210,7 +210,7 @@ static void low_level_init(struct netif *netif)
hal_eth_init_status = HAL_ETH_Init(&heth); hal_eth_init_status = HAL_ETH_Init(&heth);
memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig)); memset(&TxConfig, 0, sizeof(ETH_TxPacketConfig));
TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD; TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC; TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT; TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
@ -226,23 +226,23 @@ static void low_level_init(struct netif *netif)
netif->hwaddr_len = ETH_HWADDR_LEN; netif->hwaddr_len = ETH_HWADDR_LEN;
/* set MAC hardware address */ /* set MAC hardware address */
netif->hwaddr[0] = heth.Init.MACAddr[0]; netif->hwaddr[0] = heth.Init.MACAddr[0];
netif->hwaddr[1] = heth.Init.MACAddr[1]; netif->hwaddr[1] = heth.Init.MACAddr[1];
netif->hwaddr[2] = heth.Init.MACAddr[2]; netif->hwaddr[2] = heth.Init.MACAddr[2];
netif->hwaddr[3] = heth.Init.MACAddr[3]; netif->hwaddr[3] = heth.Init.MACAddr[3];
netif->hwaddr[4] = heth.Init.MACAddr[4]; netif->hwaddr[4] = heth.Init.MACAddr[4];
netif->hwaddr[5] = heth.Init.MACAddr[5]; netif->hwaddr[5] = heth.Init.MACAddr[5];
/* maximum transfer unit */ /* maximum transfer unit */
netif->mtu = ETH_MAX_PAYLOAD; netif->mtu = ETH_MAX_PAYLOAD;
/* Accept broadcast address and ARP traffic */ /* Accept broadcast address and ARP traffic */
/* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */ /* don't set NETIF_FLAG_ETHARP if this device is not an ethernet one */
#if LWIP_ARP #if LWIP_ARP
netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP; netif->flags |= NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP;
#else #else
netif->flags |= NETIF_FLAG_BROADCAST; netif->flags |= NETIF_FLAG_BROADCAST;
#endif /* LWIP_ARP */ #endif /* LWIP_ARP */
/* create a binary semaphore used for informing ethernetif of frame reception */ /* create a binary semaphore used for informing ethernetif of frame reception */
RxPktSemaphore = xSemaphoreCreateBinary(); RxPktSemaphore = xSemaphoreCreateBinary();
@ -251,14 +251,14 @@ static void low_level_init(struct netif *netif)
TxPktSemaphore = xSemaphoreCreateBinary(); TxPktSemaphore = xSemaphoreCreateBinary();
/* create the task that handles the ETH_MAC */ /* create the task that handles the ETH_MAC */
/* USER CODE BEGIN OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */ /* USER CODE BEGIN OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */
osThreadDef(EthIf, ethernetif_input, osPriorityRealtime, 0, INTERFACE_THREAD_STACK_SIZE); osThreadDef(EthIf, ethernetif_input, osPriorityRealtime, 0, INTERFACE_THREAD_STACK_SIZE);
osThreadCreate(osThread(EthIf), netif); osThreadCreate(osThread(EthIf), netif);
/* USER CODE END OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */ /* USER CODE END OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */
/* USER CODE BEGIN PHY_PRE_CONFIG */ /* USER CODE BEGIN PHY_PRE_CONFIG */
/* USER CODE END PHY_PRE_CONFIG */ /* USER CODE END PHY_PRE_CONFIG */
/* Set PHY IO functions */ /* Set PHY IO functions */
LAN8742_RegisterBusIO(&LAN8742, &LAN8742_IOCtx); LAN8742_RegisterBusIO(&LAN8742, &LAN8742_IOCtx);
@ -270,7 +270,7 @@ static void low_level_init(struct netif *netif)
PHYLinkState = LAN8742_GetLinkState(&LAN8742); PHYLinkState = LAN8742_GetLinkState(&LAN8742);
/* Get link state */ /* Get link state */
if(PHYLinkState <= LAN8742_STATUS_LINK_DOWN) if (PHYLinkState <= LAN8742_STATUS_LINK_DOWN)
{ {
netif_set_link_down(netif); netif_set_link_down(netif);
netif_set_down(netif); netif_set_down(netif);
@ -301,21 +301,20 @@ static void low_level_init(struct netif *netif)
break; break;
} }
/* Get MAC Config MAC */ /* Get MAC Config MAC */
HAL_ETH_GetMACConfig(&heth, &MACConf); HAL_ETH_GetMACConfig(&heth, &MACConf);
MACConf.DuplexMode = duplex; MACConf.DuplexMode = duplex;
MACConf.Speed = speed; MACConf.Speed = speed;
HAL_ETH_SetMACConfig(&heth, &MACConf); HAL_ETH_SetMACConfig(&heth, &MACConf);
HAL_ETH_Start_IT(&heth); HAL_ETH_Start_IT(&heth);
netif_set_up(netif); netif_set_up(netif);
netif_set_link_up(netif); netif_set_link_up(netif);
/* USER CODE BEGIN PHY_POST_CONFIG */ /* USER CODE BEGIN PHY_POST_CONFIG */
/* USER CODE END PHY_POST_CONFIG */ /* USER CODE END PHY_POST_CONFIG */
} }
} }
else else
{ {
@ -323,9 +322,9 @@ static void low_level_init(struct netif *netif)
} }
#endif /* LWIP_ARP || LWIP_ETHERNET */ #endif /* LWIP_ARP || LWIP_ETHERNET */
/* USER CODE BEGIN LOW_LEVEL_INIT */ /* USER CODE BEGIN LOW_LEVEL_INIT */
/* USER CODE END LOW_LEVEL_INIT */ /* USER CODE END LOW_LEVEL_INIT */
} }
/** /**
@ -351,22 +350,22 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p)
err_t errval = ERR_OK; err_t errval = ERR_OK;
ETH_BufferTypeDef Txbuffer[ETH_TX_DESC_CNT] = {0}; ETH_BufferTypeDef Txbuffer[ETH_TX_DESC_CNT] = {0};
memset(Txbuffer, 0 , ETH_TX_DESC_CNT*sizeof(ETH_BufferTypeDef)); memset(Txbuffer, 0, ETH_TX_DESC_CNT * sizeof(ETH_BufferTypeDef));
for(q = p; q != NULL; q = q->next) for (q = p; q != NULL; q = q->next)
{ {
if(i >= ETH_TX_DESC_CNT) if (i >= ETH_TX_DESC_CNT)
return ERR_IF; return ERR_IF;
Txbuffer[i].buffer = q->payload; Txbuffer[i].buffer = q->payload;
Txbuffer[i].len = q->len; Txbuffer[i].len = q->len;
if(i>0) if (i > 0)
{ {
Txbuffer[i-1].next = &Txbuffer[i]; Txbuffer[i - 1].next = &Txbuffer[i];
} }
if(q->next == NULL) if (q->next == NULL)
{ {
Txbuffer[i].next = NULL; Txbuffer[i].next = NULL;
} }
@ -381,7 +380,7 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p)
pbuf_ref(p); pbuf_ref(p);
HAL_ETH_Transmit_IT(&heth, &TxConfig); HAL_ETH_Transmit_IT(&heth, &TxConfig);
while(osSemaphoreWait(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK) while (osSemaphoreWait(TxPktSemaphore, TIME_WAITING_FOR_INPUT) != osOK)
{ {
} }
@ -398,12 +397,12 @@ static err_t low_level_output(struct netif *netif, struct pbuf *p)
* @param netif the lwip network interface structure for this ethernetif * @param netif the lwip network interface structure for this ethernetif
* @return a pbuf filled with the received packet (including MAC header) * @return a pbuf filled with the received packet (including MAC header)
* NULL on memory error * NULL on memory error
*/ */
static struct pbuf * low_level_input(struct netif *netif) static struct pbuf *low_level_input(struct netif *netif)
{ {
struct pbuf *p = NULL; struct pbuf *p = NULL;
if(RxAllocStatus == RX_ALLOC_OK) if (RxAllocStatus == RX_ALLOC_OK)
{ {
HAL_ETH_ReadData(&heth, (void **)&p); HAL_ETH_ReadData(&heth, (void **)&p);
} }
@ -420,26 +419,26 @@ static struct pbuf * low_level_input(struct netif *netif)
* *
* @param netif the lwip network interface structure for this ethernetif * @param netif the lwip network interface structure for this ethernetif
*/ */
static void ethernetif_input(void const * argument) static void ethernetif_input(void const *argument)
{ {
struct pbuf *p = NULL; struct pbuf *p = NULL;
struct netif *netif = (struct netif *) argument; struct netif *netif = (struct netif *)argument;
for( ;; ) for (;;)
{ {
if (osSemaphoreWait(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK) if (osSemaphoreWait(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK)
{ {
do do
{ {
p = low_level_input( netif ); p = low_level_input(netif);
if (p != NULL) if (p != NULL)
{ {
if (netif->input( p, netif) != ERR_OK ) if (netif->input(p, netif) != ERR_OK)
{ {
pbuf_free(p); pbuf_free(p);
} }
} }
} while(p!=NULL); } while (p != NULL);
} }
} }
} }
@ -456,12 +455,11 @@ static err_t low_level_output_arp_off(struct netif *netif, struct pbuf *q, const
err_t errval; err_t errval;
errval = ERR_OK; errval = ERR_OK;
/* USER CODE BEGIN 5 */ /* USER CODE BEGIN 5 */
/* USER CODE END 5 */ /* USER CODE END 5 */
return errval; return errval;
} }
#endif /* LWIP_ARP */ #endif /* LWIP_ARP */
@ -524,13 +522,13 @@ err_t ethernetif_init(struct netif *netif)
} }
/** /**
* @brief Custom Rx pbuf free callback * @brief Custom Rx pbuf free callback
* @param pbuf: pbuf to be freed * @param pbuf: pbuf to be freed
* @retval None * @retval None
*/ */
void pbuf_free_custom(struct pbuf *p) void pbuf_free_custom(struct pbuf *p)
{ {
struct pbuf_custom* custom_pbuf = (struct pbuf_custom*)p; struct pbuf_custom *custom_pbuf = (struct pbuf_custom *)p;
LWIP_MEMPOOL_FREE(RX_POOL, custom_pbuf); LWIP_MEMPOOL_FREE(RX_POOL, custom_pbuf);
/* If the Rx Buffer Pool was exhausted, signal the ethernetif_input task to /* If the Rx Buffer Pool was exhausted, signal the ethernetif_input task to
@ -559,19 +557,19 @@ u32_t sys_now(void)
/* USER CODE END 6 */ /* USER CODE END 6 */
/** /**
* @brief Initializes the ETH MSP. * @brief Initializes the ETH MSP.
* @param ethHandle: ETH handle * @param ethHandle: ETH handle
* @retval None * @retval None
*/ */
void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle) void HAL_ETH_MspInit(ETH_HandleTypeDef *ethHandle)
{ {
GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitTypeDef GPIO_InitStruct = {0};
if(ethHandle->Instance==ETH) if (ethHandle->Instance == ETH)
{ {
/* USER CODE BEGIN ETH_MspInit 0 */ /* USER CODE BEGIN ETH_MspInit 0 */
/* USER CODE END ETH_MspInit 0 */ /* USER CODE END ETH_MspInit 0 */
/* Enable Peripheral clock */ /* Enable Peripheral clock */
__HAL_RCC_ETH_CLK_ENABLE(); __HAL_RCC_ETH_CLK_ENABLE();
@ -589,21 +587,21 @@ void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
PB12 ------> ETH_TXD0 PB12 ------> ETH_TXD0
PB13 ------> ETH_TXD1 PB13 ------> ETH_TXD1
*/ */
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7; GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13; GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@ -613,19 +611,19 @@ void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
/* Peripheral interrupt init */ /* Peripheral interrupt init */
HAL_NVIC_SetPriority(ETH_IRQn, 5, 0); HAL_NVIC_SetPriority(ETH_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(ETH_IRQn); HAL_NVIC_EnableIRQ(ETH_IRQn);
/* USER CODE BEGIN ETH_MspInit 1 */ /* USER CODE BEGIN ETH_MspInit 1 */
/* USER CODE END ETH_MspInit 1 */ /* USER CODE END ETH_MspInit 1 */
} }
} }
void HAL_ETH_MspDeInit(ETH_HandleTypeDef* ethHandle) void HAL_ETH_MspDeInit(ETH_HandleTypeDef *ethHandle)
{ {
if(ethHandle->Instance==ETH) if (ethHandle->Instance == ETH)
{ {
/* USER CODE BEGIN ETH_MspDeInit 0 */ /* USER CODE BEGIN ETH_MspDeInit 0 */
/* USER CODE END ETH_MspDeInit 0 */ /* USER CODE END ETH_MspDeInit 0 */
/* Peripheral clock disable */ /* Peripheral clock disable */
__HAL_RCC_ETH_CLK_DISABLE(); __HAL_RCC_ETH_CLK_DISABLE();
@ -640,18 +638,18 @@ void HAL_ETH_MspDeInit(ETH_HandleTypeDef* ethHandle)
PB12 ------> ETH_TXD0 PB12 ------> ETH_TXD0
PB13 ------> ETH_TXD1 PB13 ------> ETH_TXD1
*/ */
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5); HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5);
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7);
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13); HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13);
/* Peripheral interrupt Deinit*/ /* Peripheral interrupt Deinit*/
HAL_NVIC_DisableIRQ(ETH_IRQn); HAL_NVIC_DisableIRQ(ETH_IRQn);
/* USER CODE BEGIN ETH_MspDeInit 1 */ /* USER CODE BEGIN ETH_MspDeInit 1 */
/* USER CODE END ETH_MspDeInit 1 */ /* USER CODE END ETH_MspDeInit 1 */
} }
} }
@ -659,10 +657,10 @@ void HAL_ETH_MspDeInit(ETH_HandleTypeDef* ethHandle)
PHI IO Functions PHI IO Functions
*******************************************************************************/ *******************************************************************************/
/** /**
* @brief Initializes the MDIO interface GPIO and clocks. * @brief Initializes the MDIO interface GPIO and clocks.
* @param None * @param None
* @retval 0 if OK, -1 if ERROR * @retval 0 if OK, -1 if ERROR
*/ */
int32_t ETH_PHY_IO_Init(void) int32_t ETH_PHY_IO_Init(void)
{ {
/* We assume that MDIO GPIO configuration is already done /* We assume that MDIO GPIO configuration is already done
@ -676,25 +674,25 @@ int32_t ETH_PHY_IO_Init(void)
} }
/** /**
* @brief De-Initializes the MDIO interface . * @brief De-Initializes the MDIO interface .
* @param None * @param None
* @retval 0 if OK, -1 if ERROR * @retval 0 if OK, -1 if ERROR
*/ */
int32_t ETH_PHY_IO_DeInit (void) int32_t ETH_PHY_IO_DeInit(void)
{ {
return 0; return 0;
} }
/** /**
* @brief Read a PHY register through the MDIO interface. * @brief Read a PHY register through the MDIO interface.
* @param DevAddr: PHY port address * @param DevAddr: PHY port address
* @param RegAddr: PHY register address * @param RegAddr: PHY register address
* @param pRegVal: pointer to hold the register value * @param pRegVal: pointer to hold the register value
* @retval 0 if OK -1 if Error * @retval 0 if OK -1 if Error
*/ */
int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal) int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal)
{ {
if(HAL_ETH_ReadPHYRegister(&heth, DevAddr, RegAddr, pRegVal) != HAL_OK) if (HAL_ETH_ReadPHYRegister(&heth, DevAddr, RegAddr, pRegVal) != HAL_OK)
{ {
return -1; return -1;
} }
@ -703,15 +701,15 @@ int32_t ETH_PHY_IO_ReadReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t *pRegVal
} }
/** /**
* @brief Write a value to a PHY register through the MDIO interface. * @brief Write a value to a PHY register through the MDIO interface.
* @param DevAddr: PHY port address * @param DevAddr: PHY port address
* @param RegAddr: PHY register address * @param RegAddr: PHY register address
* @param RegVal: Value to be written * @param RegVal: Value to be written
* @retval 0 if OK -1 if Error * @retval 0 if OK -1 if Error
*/ */
int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal) int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal)
{ {
if(HAL_ETH_WritePHYRegister(&heth, DevAddr, RegAddr, RegVal) != HAL_OK) if (HAL_ETH_WritePHYRegister(&heth, DevAddr, RegAddr, RegVal) != HAL_OK)
{ {
return -1; return -1;
} }
@ -720,84 +718,84 @@ int32_t ETH_PHY_IO_WriteReg(uint32_t DevAddr, uint32_t RegAddr, uint32_t RegVal)
} }
/** /**
* @brief Get the time in millisecons used for internal PHY driver process. * @brief Get the time in millisecons used for internal PHY driver process.
* @retval Time value * @retval Time value
*/ */
int32_t ETH_PHY_IO_GetTick(void) int32_t ETH_PHY_IO_GetTick(void)
{ {
return HAL_GetTick(); return HAL_GetTick();
} }
/** /**
* @brief Check the ETH link state then update ETH driver and netif link accordingly. * @brief Check the ETH link state then update ETH driver and netif link accordingly.
* @retval None * @retval None
*/ */
void ethernet_link_thread(void const * argument) void ethernet_link_thread(void const *argument)
{ {
ETH_MACConfigTypeDef MACConf = {0}; ETH_MACConfigTypeDef MACConf = {0};
int32_t PHYLinkState = 0; int32_t PHYLinkState = 0;
uint32_t linkchanged = 0U, speed = 0U, duplex = 0U; uint32_t linkchanged = 0U, speed = 0U, duplex = 0U;
struct netif *netif = (struct netif *) argument; struct netif *netif = (struct netif *)argument;
/* USER CODE BEGIN ETH link init */ /* USER CODE BEGIN ETH link init */
/* USER CODE END ETH link init */ /* USER CODE END ETH link init */
for(;;) for (;;)
{ {
PHYLinkState = LAN8742_GetLinkState(&LAN8742); PHYLinkState = LAN8742_GetLinkState(&LAN8742);
if(netif_is_link_up(netif) && (PHYLinkState <= LAN8742_STATUS_LINK_DOWN)) if (netif_is_link_up(netif) && (PHYLinkState <= LAN8742_STATUS_LINK_DOWN))
{
HAL_ETH_Stop_IT(&heth);
netif_set_down(netif);
netif_set_link_down(netif);
}
else if(!netif_is_link_up(netif) && (PHYLinkState > LAN8742_STATUS_LINK_DOWN))
{
switch (PHYLinkState)
{ {
case LAN8742_STATUS_100MBITS_FULLDUPLEX: HAL_ETH_Stop_IT(&heth);
duplex = ETH_FULLDUPLEX_MODE; netif_set_down(netif);
speed = ETH_SPEED_100M; netif_set_link_down(netif);
linkchanged = 1; }
break; else if (!netif_is_link_up(netif) && (PHYLinkState > LAN8742_STATUS_LINK_DOWN))
case LAN8742_STATUS_100MBITS_HALFDUPLEX: {
duplex = ETH_HALFDUPLEX_MODE; switch (PHYLinkState)
speed = ETH_SPEED_100M; {
linkchanged = 1; case LAN8742_STATUS_100MBITS_FULLDUPLEX:
break; duplex = ETH_FULLDUPLEX_MODE;
case LAN8742_STATUS_10MBITS_FULLDUPLEX: speed = ETH_SPEED_100M;
duplex = ETH_FULLDUPLEX_MODE; linkchanged = 1;
speed = ETH_SPEED_10M; break;
linkchanged = 1; case LAN8742_STATUS_100MBITS_HALFDUPLEX:
break; duplex = ETH_HALFDUPLEX_MODE;
case LAN8742_STATUS_10MBITS_HALFDUPLEX: speed = ETH_SPEED_100M;
duplex = ETH_HALFDUPLEX_MODE; linkchanged = 1;
speed = ETH_SPEED_10M; break;
linkchanged = 1; case LAN8742_STATUS_10MBITS_FULLDUPLEX:
break; duplex = ETH_FULLDUPLEX_MODE;
default: speed = ETH_SPEED_10M;
break; linkchanged = 1;
break;
case LAN8742_STATUS_10MBITS_HALFDUPLEX:
duplex = ETH_HALFDUPLEX_MODE;
speed = ETH_SPEED_10M;
linkchanged = 1;
break;
default:
break;
}
if (linkchanged)
{
/* Get MAC Config MAC */
HAL_ETH_GetMACConfig(&heth, &MACConf);
MACConf.DuplexMode = duplex;
MACConf.Speed = speed;
HAL_ETH_SetMACConfig(&heth, &MACConf);
HAL_ETH_Start_IT(&heth);
netif_set_up(netif);
netif_set_link_up(netif);
}
} }
if(linkchanged) /* USER CODE BEGIN ETH link Thread core code for User BSP */
{
/* Get MAC Config MAC */
HAL_ETH_GetMACConfig(&heth, &MACConf);
MACConf.DuplexMode = duplex;
MACConf.Speed = speed;
HAL_ETH_SetMACConfig(&heth, &MACConf);
HAL_ETH_Start_IT(&heth);
netif_set_up(netif);
netif_set_link_up(netif);
}
}
/* USER CODE BEGIN ETH link Thread core code for User BSP */ /* USER CODE END ETH link Thread core code for User BSP */
/* USER CODE END ETH link Thread core code for User BSP */
osDelay(100); osDelay(100);
} }
@ -805,7 +803,7 @@ void ethernet_link_thread(void const * argument)
void HAL_ETH_RxAllocateCallback(uint8_t **buff) void HAL_ETH_RxAllocateCallback(uint8_t **buff)
{ {
/* USER CODE BEGIN HAL ETH RxAllocateCallback */ /* USER CODE BEGIN HAL ETH RxAllocateCallback */
struct pbuf_custom *p = LWIP_MEMPOOL_ALLOC(RX_POOL); struct pbuf_custom *p = LWIP_MEMPOOL_ALLOC(RX_POOL);
if (p) if (p)
{ {
@ -822,12 +820,12 @@ void HAL_ETH_RxAllocateCallback(uint8_t **buff)
RxAllocStatus = RX_ALLOC_ERROR; RxAllocStatus = RX_ALLOC_ERROR;
*buff = NULL; *buff = NULL;
} }
/* USER CODE END HAL ETH RxAllocateCallback */ /* USER CODE END HAL ETH RxAllocateCallback */
} }
void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length) void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length)
{ {
/* USER CODE BEGIN HAL ETH RxLinkCallback */ /* USER CODE BEGIN HAL ETH RxLinkCallback */
struct pbuf **ppStart = (struct pbuf **)pStart; struct pbuf **ppStart = (struct pbuf **)pStart;
struct pbuf **ppEnd = (struct pbuf **)pEnd; struct pbuf **ppEnd = (struct pbuf **)pEnd;
@ -859,19 +857,18 @@ void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t
p->tot_len += Length; p->tot_len += Length;
} }
/* USER CODE END HAL ETH RxLinkCallback */ /* USER CODE END HAL ETH RxLinkCallback */
} }
void HAL_ETH_TxFreeCallback(uint32_t * buff) void HAL_ETH_TxFreeCallback(uint32_t *buff)
{ {
/* USER CODE BEGIN HAL ETH TxFreeCallback */ /* USER CODE BEGIN HAL ETH TxFreeCallback */
pbuf_free((struct pbuf *)buff); pbuf_free((struct pbuf *)buff);
/* USER CODE END HAL ETH TxFreeCallback */ /* USER CODE END HAL ETH TxFreeCallback */
} }
/* USER CODE BEGIN 8 */ /* USER CODE BEGIN 8 */
/* USER CODE END 8 */ /* USER CODE END 8 */

View File

@ -145,7 +145,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key> <Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U090F00028316303030303032 -O2254 -SF500 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name> <Name>-U420014000D0000504A51544E -O2254 -SF1800 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint> <Breakpoint>
@ -154,7 +154,7 @@
<Type>0</Type> <Type>0</Type>
<LineNumber>2413</LineNumber> <LineNumber>2413</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>134234476</Address> <Address>134234468</Address>
<ByteObject>0</ByteObject> <ByteObject>0</ByteObject>
<HtxType>0</HtxType> <HtxType>0</HtxType>
<ManyObjects>0</ManyObjects> <ManyObjects>0</ManyObjects>
@ -165,54 +165,6 @@
<ExecCommand></ExecCommand> <ExecCommand></ExecCommand>
<Expression>\\semi_finished_product_testing\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c\2413</Expression> <Expression>\\semi_finished_product_testing\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c\2413</Expression>
</Bp> </Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>77</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134238496</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>../LWIP/App/lwip.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\semi_finished_product_testing\../LWIP/App/lwip.c\77</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>224</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>startup_stm32f407xx.s</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>226</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>startup_stm32f407xx.s</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint> </Breakpoint>
<WatchWindow1> <WatchWindow1>
<Ww> <Ww>
@ -285,6 +237,11 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>ip_address_flash,0x0A</ItemText> <ItemText>ip_address_flash,0x0A</ItemText>
</Ww> </Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>uart_echo_flags_hart1</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>

View File

@ -1,11 +1,3 @@
/*
* @Author: wangxujie 390834610@qq.com
* @Date: 2025-02-19 08:33:14
* @LastEditors: wangxujie 390834610@qq.com
* @LastEditTime: 2025-04-18 13:36:18
* @FilePath: \Semi-finished product testing\User\application\inc\tcpserverc.h
* @Description: ,`customMade`, koroFileHeader查看配置 : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
#ifndef _TCPECHO_H_ #ifndef _TCPECHO_H_
#define _TCPECHO_H_ #define _TCPECHO_H_

View File

@ -34,10 +34,11 @@ extern uint8_t tcp_echo_flags_ble2;
extern uint8_t tcp_echo_flags_control; extern uint8_t tcp_echo_flags_control;
extern uint8_t send_data_flag_cmd; extern uint8_t send_data_flag_cmd;
extern uint8_t uart_forwarding_flags_hart1; extern uint8_t uart_echo_flags_hart1;
extern uint8_t uart_forwarding_flags_hart2; extern uint8_t uart_echo_flags_hart2;
extern uint8_t uart_forwarding_flags_ble1; extern uint8_t uart_echo_flags_ble1;
extern uint8_t uart_forwarding_flags_ble2; extern uint8_t uart_echo_flags_ble2;
/*接收回调函数*/ /*接收回调函数*/
static err_t tcpecho_recv_hart1(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) static err_t tcpecho_recv_hart1(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{ // 对应接收数据连接的控制块 接收到的数据 { // 对应接收数据连接的控制块 接收到的数据
@ -369,32 +370,32 @@ void user_send_data_ble2(uint8_t *data, uint16_t len)
void user_send_data_control(uint8_t *data, uint16_t len) void user_send_data_control(uint8_t *data, uint16_t len)
{ {
tcp_write(server_pcb_control, data, len, 1); tcp_write(server_pcb_control, data, len, 1);
} }
void uart_forwarding_tcp(void) void uart_forwarding_tcp(void)
{ {
if (uart_forwarding_flags_hart1 == 1) if (uart_echo_flags_hart1 == 1)
{ {
uart_echo_flags_hart1 = 0;
user_send_data_hart1(hart1_uart5.rx_data, hart1_uart5.rx_num); user_send_data_hart1(hart1_uart5.rx_data, hart1_uart5.rx_num);
uart_forwarding_flags_hart1 = 0;
} }
if (uart_forwarding_flags_hart2 == 1) if (uart_echo_flags_hart2 == 1)
{ {
uart_echo_flags_hart2 = 0;
user_send_data_hart2(hart2_uart2.rx_data, hart2_uart2.rx_num); user_send_data_hart2(hart2_uart2.rx_data, hart2_uart2.rx_num);
uart_forwarding_flags_hart2 = 0;
} }
#if (BLE2_USART6 == 1) #if (BLE2_USART6 == 1)
if (uart_forwarding_flags_ble1 == 1) if (uart_echo_flags_ble1 == 1)
{ {
uart_echo_flags_ble1 = 0;
user_send_data_ble1(ble1_uart6.rx_data, ble1_uart6.rx_num); user_send_data_ble1(ble1_uart6.rx_data, ble1_uart6.rx_num);
uart_forwarding_flags_ble1 = 0;
} }
#endif #endif
if (uart_forwarding_flags_ble2 == 1) if (uart_echo_flags_ble2 == 1)
{ {
uart_echo_flags_ble2 = 0;
user_send_data_ble2(ble2_uart3.rx_data, ble2_uart3.rx_num); user_send_data_ble2(ble2_uart3.rx_data, ble2_uart3.rx_num);
uart_forwarding_flags_ble2 = 0;
} }
} }

View File

@ -1,70 +0,0 @@
# 开发环境说明
## 1. 硬件平台
- 主控芯片STM32F407xx系列ARM Cortex-M4F内核
- 外设芯片:
- ADCAD7124-8高精度模拟量输入
- DACDAC161S997高精度模拟量输出
- 以太网LAN8742网络通信
- LCD串口显示屏
- 编码器接口
## 2. 开发工具
### 主要IDE
- Keil MDK-ARM (MDK-ARM目录存在)
- 项目文件semi-finished_product_testing.uvprojx
- 编译配置semi-finished_product_testing.uvoptx
- Visual Studio Code (存在.vscode配置目录)
- 用于代码编辑和查看
### 编译工具
- ARMCC编译器 (ARM编译工具链)
- 启动文件startup_stm32f407xx.s
## 3. 软件框架
### 操作系统
- FreeRTOS实时操作系统
- 版本位于Middlewares/Third_Party/FreeRTOS/Source/
- 配置文件FreeRTOSConfig.h
### 驱动库
- STM32 HAL库 (Hardware Abstraction Layer)
- 位置Drivers/STM32F4xx_HAL_Driver/
- 包含各种外设驱动
### 网络协议栈
- LwIP (Lightweight IP)
- 位置Middlewares/Third_Party/LwIP/
- 支持TCP/IP协议
- MQTT支持
### BSP支持
- LAN8742网络驱动
- 位置Drivers/BSP/Components/lan8742/
## 4. 项目结构
```
项目主要目录:
├── Core/ # 核心应用代码
├── Drivers/ # 驱动程序
├── LWIP/ # 网络协议栈
├── MDK-ARM/ # Keil工程文件
└── Middlewares/ # 中间件(FreeRTOS/LwIP)
```
## 5. 开发规范
- 基于HAL库的驱动开发
- FreeRTOS多任务架构
- 模块化的设计结构
- 标准C语言开发规范
## 6. 调试方式
- ST-Link/J-Link调试器支持
- 串口调试
- 以太网远程调试
## 7. 项目文档
位于Documents/目录:
- 数据手册 (datasheet/)
- 项目文档 (project documents/)
- 原理图 (schematic diagram/)

View File

@ -117,7 +117,7 @@ ETH.IPParameters=MediaInterface
ETH.MediaInterface=HAL_ETH_RMII_MODE ETH.MediaInterface=HAL_ETH_RMII_MODE
FREERTOS.FootprintOK=true FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,configMAX_TASK_NAME_LEN,configENABLE_FPU,configMAX_PRIORITIES,FootprintOK FREERTOS.IPParameters=Tasks01,configMAX_TASK_NAME_LEN,configENABLE_FPU,configMAX_PRIORITIES,FootprintOK
FREERTOS.Tasks01=lwip_task,2,512,start_tcp_task,Default,NULL,Dynamic,NULL,NULL;led_task,-2,128,start_led_toggle_task,Default,NULL,Dynamic,NULL,NULL;dac_task,0,512,start_dac_task,Default,NULL,Dynamic,NULL,NULL;adc_task,-1,128,start_adc_task,Default,NULL,Dynamic,NULL,NULL;gpio_di_do_task,0,128,start_gpio_di_do_task,Default,NULL,Dynamic,NULL,NULL;ec11_task,0,512,start_ec11_task,Default,NULL,Dynamic,NULL,NULL;uart_forwarding,3,512,start_uart_forwarding,Default,NULL,Dynamic,NULL,NULL FREERTOS.Tasks01=lwip_task,2,512,start_tcp_task,Default,NULL,Dynamic,NULL,NULL;led_task,-2,128,start_led_toggle_task,Default,NULL,Dynamic,NULL,NULL;dac_task,0,512,start_dac_task,Default,NULL,Dynamic,NULL,NULL;adc_task,-1,128,start_adc_task,Default,NULL,Dynamic,NULL,NULL;gpio_di_do_task,0,128,start_gpio_di_do_task,Default,NULL,Dynamic,NULL,NULL;ec11_task,0,512,start_ec11_task,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configENABLE_FPU=1 FREERTOS.configENABLE_FPU=1
FREERTOS.configMAX_PRIORITIES=32 FREERTOS.configMAX_PRIORITIES=32
FREERTOS.configMAX_TASK_NAME_LEN=24 FREERTOS.configMAX_TASK_NAME_LEN=24

View File

@ -1,55 +0,0 @@
```mermaid
graph TB
%% 主要流程
Start[系统启动] --> Init[系统初始化]
Init --> Tasks[任务创建]
%% 主要任务分支
Tasks --> Network[网络通信]
Tasks --> DataAcq[数据采集]
Tasks --> DataOut[数据输出]
Tasks --> UserInterface[人机交互]
%% 网络通信详细
Network --> |TCP/IP|RemoteControl[远程控制]
RemoteControl --> |命令|CommandProcess[命令处理]
RemoteControl --> |数据|DataUpload[数据上传]
%% 数据采集详细
DataAcq --> |ADC|AnalogIn[模拟量输入]
DataAcq --> |GPIO|DigitalIn[数字量输入]
AnalogIn --> DataProcess[数据处理]
DigitalIn --> DataProcess
%% 数据输出详细
DataOut --> |DAC|AnalogOut[模拟量输出]
DataOut --> |GPIO|DigitalOut[数字量输出]
CommandProcess --> DataOut
%% 人机交互详细
UserInterface --> |LCD|Display[状态显示]
UserInterface --> |编码器|LocalControl[本地控制]
LocalControl --> DataOut
DataProcess --> Display
%% 通信协议
subgraph 通信协议
HART[HART协议]
BLE[蓝牙通信]
TCP[TCP/IP]
end
%% 硬件接口
subgraph 硬件接口
ADC[AD7124]
DAC[DAC161S997]
DIO[数字IO]
LCD[串口LCD]
ETH[以太网]
Encoder[编码器]
end
%% 数据流向
DataProcess --> |测量数据|DataUpload
CommandProcess --> |控制命令|DataOut
```