diff --git a/prj/TCPClient/Debug/debug.c b/prj/TCPClient/Debug/debug.c index 529a789..885e3a6 100644 --- a/prj/TCPClient/Debug/debug.c +++ b/prj/TCPClient/Debug/debug.c @@ -95,6 +95,15 @@ void USART_Printf_Init(uint32_t baudrate) GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; +/* When sensor occupies USART3, skip debug UART init entirely */ +#include "mini212g2.h" +#if SENSOR_USE_USART3 && (DEBUG == DEBUG_UART3) + (void)GPIO_InitStructure; + (void)USART_InitStructure; + (void)baudrate; + return; /* USART3 reserved for sensor, printf disabled */ +#endif + #if(DEBUG == DEBUG_UART1) RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); @@ -221,8 +230,11 @@ __attribute__((used)) int _write(int fd, char *buf, int size) while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); USART_SendData(USART2, *buf++); #elif(DEBUG == DEBUG_UART3) + #include "mini212g2.h" + #if !SENSOR_USE_USART3 while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET); USART_SendData(USART3, *buf++); + #endif #endif } #endif diff --git a/prj/TCPClient/Debug/mini212g2.c b/prj/TCPClient/Debug/mini212g2.c index c16000b..b0432bb 100644 --- a/prj/TCPClient/Debug/mini212g2.c +++ b/prj/TCPClient/Debug/mini212g2.c @@ -57,19 +57,34 @@ static void Sensor_UART_Init(void) GPIO_InitTypeDef gpio = {0}; USART_InitTypeDef usart = {0}; +#if SENSOR_USE_USART3 + /* USART3: PB10=TX PB11=RX + * NOTE: This reuses the debug printf port. printf is disabled. */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); + + gpio.GPIO_Pin = GPIO_Pin_10; + gpio.GPIO_Speed = GPIO_Speed_50MHz; + gpio.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOB, &gpio); + + gpio.GPIO_Pin = GPIO_Pin_11; + gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOB, &gpio); +#else + /* USART2: PA2=TX PA3=RX */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - /* TX: PA2 AF push-pull */ gpio.GPIO_Pin = GPIO_Pin_2; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &gpio); - /* RX: PA3 floating input */ gpio.GPIO_Pin = GPIO_Pin_3; gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &gpio); +#endif usart.USART_BaudRate = SENSOR_UART_BAUD; usart.USART_WordLength = USART_WordLength_8b; @@ -122,6 +137,14 @@ static void Sensor_FlushRx(void) * Public API * ============================================================ */ +/* ============================================================ + * Debug inspection variables (watch in JTAG debugger) + * ============================================================ */ +volatile uint8_t sensor_init_ok = 0; +volatile uint8_t sensor_init_fail = 0; +volatile uint8_t sensor_last_resp[8] = {0}; +volatile uint8_t sensor_last_resp_len = 0; + int Mini212G2_SendCmd(const uint8_t *cmd, uint8_t len) { uint8_t resp[8]; @@ -129,10 +152,14 @@ int Mini212G2_SendCmd(const uint8_t *cmd, uint8_t len) Sensor_SendBytes(cmd, len); int n = Sensor_ReadResp(resp, sizeof(resp), 200); + /* Save last response for debugger inspection */ + sensor_last_resp_len = (uint8_t)n; + for (int j = 0; j < n && j < 8; j++) + sensor_last_resp[j] = resp[j]; + if (n == ACK_LEN && memcmp(resp, ACK_PATTERN, ACK_LEN) == 0) return 0; - /* Debug: print what we got */ printf("[Sensor] resp(%d):", n); for (int j = 0; j < n; j++) printf(" %02x", resp[j]); printf("\r\n"); @@ -151,7 +178,8 @@ int Mini212G2_Init(void) int ok = 0, fail = 0; Sensor_UART_Init(); - printf("[Sensor] UART2 init (PA2=TX PA3=RX, 115200)\r\n"); + printf("[Sensor] UART init %d, baud=%d\r\n", + (int)(SENSOR_UART == USART3 ? 3 : 2), (int)SENSOR_UART_BAUD); /* Sensor needs several seconds to boot after power-on */ printf("[Sensor] Waiting 3s for sensor boot...\r\n"); @@ -202,6 +230,8 @@ int Mini212G2_Init(void) Delay_Ms(500); printf("[Sensor] Config result: %d ok, %d fail\r\n", ok, fail); + sensor_init_ok = (uint8_t)ok; + sensor_init_fail = (uint8_t)fail; /* Print current digital video status for verification */ Mini212G2_PrintDigitalVideoStatus(); diff --git a/prj/TCPClient/Debug/mini212g2.h b/prj/TCPClient/Debug/mini212g2.h index 6fb9431..3f3e01f 100644 --- a/prj/TCPClient/Debug/mini212g2.h +++ b/prj/TCPClient/Debug/mini212g2.h @@ -3,13 +3,22 @@ #include "ch32v30x.h" +/* ---- Temporary debug wiring option ---- + * Set to 1 to use USART3 (PB10=TX PB11=RX) for sensor communication. + * This steals the debug printf port — use JTAG debugger for observation. + * Set to 0 for normal operation (USART2 / PA2+PA3). */ +#define SENSOR_USE_USART3 1 + /* Set to 1 to enable UART commands to configure sensor at boot. * Set to 0 if sensor is pre-configured via USB to auto-output CMOS/DVP. - * NOTE: PA2/PA3 may conflict with Ethernet — keep 0 unless UART is wired. */ -#define SENSOR_UART_ENABLE 0 - -/* Sensor UART: USART2 PA2=TX PA3=RX */ -#define SENSOR_UART USART2 + * Automatically forced to 1 when SENSOR_USE_USART3 is enabled. */ +#if SENSOR_USE_USART3 + #define SENSOR_UART_ENABLE 1 + #define SENSOR_UART USART3 +#else + #define SENSOR_UART_ENABLE 0 + #define SENSOR_UART USART2 +#endif #define SENSOR_UART_BAUD 115200 /** @@ -19,6 +28,16 @@ */ int Mini212G2_Init(void); +/* Debug variables — inspect via JTAG debugger when printf is unavailable. + * sensor_init_ok: number of commands that succeeded + * sensor_init_fail: number of commands that failed + * sensor_last_resp[]: raw bytes of last failed response + * sensor_last_resp_len: length of last response */ +extern volatile uint8_t sensor_init_ok; +extern volatile uint8_t sensor_init_fail; +extern volatile uint8_t sensor_last_resp[8]; +extern volatile uint8_t sensor_last_resp_len; + #if SENSOR_UART_ENABLE /** * Send a raw protocol command and wait for ACK.