diff --git a/Software/master/PressureSensorBoardMaster/.mxproject b/Software/master/PressureSensorBoardMaster/.mxproject
deleted file mode 100644
index ce894cb..0000000
--- a/Software/master/PressureSensorBoardMaster/.mxproject
+++ /dev/null
@@ -1,31 +0,0 @@
-[PreviousGenFiles]
-AdvancedFolderStructure=true
-HeaderFileListSize=6
-HeaderFiles#0=..\Core\Inc\gpio.h
-HeaderFiles#1=..\Core\Inc\dma.h
-HeaderFiles#2=..\Core\Inc\usart.h
-HeaderFiles#3=..\Core\Inc\stm32f1xx_it.h
-HeaderFiles#4=..\Core\Inc\stm32f1xx_hal_conf.h
-HeaderFiles#5=..\Core\Inc\main.h
-HeaderFolderListSize=1
-HeaderPath#0=..\Core\Inc
-HeaderFiles=;
-SourceFileListSize=6
-SourceFiles#0=..\Core\Src\gpio.c
-SourceFiles#1=..\Core\Src\dma.c
-SourceFiles#2=..\Core\Src\usart.c
-SourceFiles#3=..\Core\Src\stm32f1xx_it.c
-SourceFiles#4=..\Core\Src\stm32f1xx_hal_msp.c
-SourceFiles#5=..\Core\Src\main.c
-SourceFolderListSize=1
-SourcePath#0=..\Core\Src
-SourceFiles=;
-
-[PreviousLibFiles]
-LibFiles=Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_uart.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_usart.h;Drivers\STM32F1xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_def.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_rcc_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_bus.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_rcc.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_system.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_utils.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_gpio_ex.h;Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_gpio.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_dma.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_cortex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_pwr.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_flash_ex.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_hal_exti.h;Drivers\STM32F1xx_HAL_Driver\Inc\stm32f1xx_ll_exti.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f103xb.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Include\system_stm32f1xx.h;Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h;
-
-[PreviousUsedKeilFiles]
-SourceFiles=..\Core\Src\main.c;..\Core\Src\gpio.c;..\Core\Src\dma.c;..\Core\Src\usart.c;..\Core\Src\stm32f1xx_it.c;..\Core\Src\stm32f1xx_hal_msp.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_uart.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_rcc_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_gpio.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_dma.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_cortex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_pwr.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_flash_ex.c;..\Drivers\STM32F1xx_HAL_Driver\Src\stm32f1xx_hal_exti.c;..\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\system_stm32f1xx.c;..\Core\Src\system_stm32f1xx.c;;;
-HeaderPath=..\Drivers\STM32F1xx_HAL_Driver\Inc;..\Drivers\STM32F1xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F1xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc;
-CDefines=USE_HAL_DRIVER;STM32F103xB;USE_HAL_DRIVER;USE_HAL_DRIVER;
-
diff --git a/Software/master/PressureSensorBoardMaster/Core/Src/main.c b/Software/master/PressureSensorBoardMaster/Core/Src/main.c
index c9393de..ae8790d 100644
--- a/Software/master/PressureSensorBoardMaster/Core/Src/main.c
+++ b/Software/master/PressureSensorBoardMaster/Core/Src/main.c
@@ -21,46 +21,109 @@
/* USER CODE BEGIN PD */
// 串口定义
#define SLAVE_UART &huart1
-#define DEBUG_UART &huart2
+#define OUTPUT_PORT &huart2
// DMA接收缓冲区大小
-#define RX_BUFFER_SIZE 64
+#define RX_BUFFER_SIZE 256 // 增大缓冲区
+#define OUTPUT_FRAME_SIZE 98
+#define SLAVE_COUNT 3
+#define MATRIX_POINTS_PER_SLAVE 30
+#define TOTAL_MATRIX_POINTS 90
+
+// 超时定义
+#define RESPONSE_TIMEOUT_MS 40
+#define STATE_DELAY_MS 10
// 命令定义
-const uint8_t status_cmd[4] = {0x03, 0x01, 0xC0, 0x80};
-const uint8_t matrix_cmd[4] = {0x03, 0x03, 0x41, 0x41};
+const uint8_t status_cmds[3][4] = {
+ {0x01, 0x01, 0xC0, 0x80}, // 从机1状态查询
+ {0x02, 0x01, 0xC0, 0x80}, // 从机2状态查询
+ {0x03, 0x01, 0xC0, 0x80} // 从机3状态查询
+};
+
+const uint8_t matrix_cmds[3][4] = {
+ {0x01, 0x03, 0x41, 0x41}, // 从机1矩阵查询
+ {0x02, 0x03, 0x41, 0x41}, // 从机2矩阵查询
+ {0x03, 0x03, 0x41, 0x41} // 从机3矩阵查询
+};
/* USER CODE END PD */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
-// DMA接收缓冲区
-uint8_t rx_buffer[RX_BUFFER_SIZE];
-
-// 接收状态管理
typedef struct {
- uint16_t dma_start_pos; // 发送命令时的DMA位置
- uint16_t expected_len; // 期望接收长度
- uint32_t start_time; // 开始等待时间
- uint8_t waiting; // 是否在等待回复
- uint8_t cmd_type; // 0=状态查询, 1=矩阵查询
-} ReceiveState_t;
+ uint8_t address; // 从机地址
+ uint8_t is_online; // 是否在线(状态查询回复)
+ uint8_t is_ready; // 是否就绪(矩阵查询回复)
+ uint8_t matrix[30]; // 30个矩阵点
+} SlaveInfo_t;
+
+// 状态机状态
+typedef enum {
+ STATE_SEND_SLAVE1_STA = 0,
+ STATE_WAIT_SLAVE1_STA,
+ STATE_SEND_SLAVE1_MAT,
+ STATE_WAIT_SLAVE1_MAT,
+ STATE_SEND_SLAVE2_STA,
+ STATE_WAIT_SLAVE2_STA,
+ STATE_SEND_SLAVE2_MAT,
+ STATE_WAIT_SLAVE2_MAT,
+ STATE_SEND_SLAVE3_STA,
+ STATE_WAIT_SLAVE3_STA,
+ STATE_SEND_SLAVE3_MAT,
+ STATE_WAIT_SLAVE3_MAT,
+ STATE_OUTPUT_DATA,
+ STATE_DELAY
+} SystemState_t;
+
+// DMA接收缓冲区(双缓冲区)
+__ALIGN_BEGIN uint8_t rx_buffer[RX_BUFFER_SIZE] __ALIGN_END;
+__ALIGN_BEGIN uint8_t rx_backup_buffer[16] __ALIGN_END; // 用于处理接收到的数据
+
+// 从机信息数组
+SlaveInfo_t slaves[SLAVE_COUNT];
+
+// 全局矩阵数据
+uint8_t global_matrix[TOTAL_MATRIX_POINTS];
+
+// 输出帧
+uint8_t output_frame[OUTPUT_FRAME_SIZE];
+
+// 状态机变量
+SystemState_t current_state = STATE_SEND_SLAVE1_STA;
+uint32_t state_start_time = 0;
+uint8_t current_slave_index = 0;
+
+// DMA相关变量
+volatile uint8_t dma_receive_done = 0;
+volatile uint32_t dma_last_pos = 0;
+volatile uint8_t rx_overflow = 0;
+
+// 接收数据解析状态
+typedef enum {
+ RX_IDLE,
+ RX_WAITING_STATUS, // 等待状态回复(5字节)
+ RX_WAITING_MATRIX // 等待矩阵回复(10字节)
+} RxState_t;
+
+RxState_t rx_state = RX_IDLE;
+uint8_t expected_length = 0;
+uint8_t rx_data[16];
+uint8_t rx_index = 0;
-ReceiveState_t rx_state = {0};
-// 系统状态
-uint8_t current_cmd = 0;
-uint32_t last_send_time = 0;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
-void Send_Command(void);
-void Check_And_Process_Reply(void);
-void Output_Hex_Data(const uint8_t *data, uint8_t len);
-void Output_Debug_Hex(const char *prefix, const uint8_t *data, uint8_t len);
-void Output_Hex_With_CRLF(const uint8_t *data, uint8_t len);
+void Process_Status_Reply(uint8_t slave_index, uint8_t *data, uint8_t len);
+void Process_Matrix_Reply(uint8_t slave_index, uint8_t *data, uint8_t len);
+void Build_Output_Frame(void);
+uint8_t Check_CRC(uint8_t *data, uint8_t len);
+void DMA_RX_Process(void);
+void UART_DMA_Init(void);
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
@@ -100,17 +163,28 @@ int main(void)
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
-
- // 启动DMA循环接收
+ // 初始化从机信息
+ for(int i = 0; i < SLAVE_COUNT; i++) {
+ slaves[i].address = i + 1;
+ slaves[i].is_online = 0;
+ slaves[i].is_ready = 0;
+ memset(slaves[i].matrix, 0, 30);
+ }
+ // 初始化全局矩阵
+ memset(global_matrix, 0, TOTAL_MATRIX_POINTS);
+
+ // 初始化输出帧
+ memset(output_frame, 0, OUTPUT_FRAME_SIZE);
+
+ // 初始化接收缓冲区
memset(rx_buffer, 0, RX_BUFFER_SIZE);
- HAL_UART_Receive_DMA(SLAVE_UART, rx_buffer, RX_BUFFER_SIZE);
- // 发送启动信息(十六进制格式)
- const uint8_t start_msg[2] = {0xAA, 0x55};
- Output_Hex_With_CRLF(start_msg, 2);
-
-
- last_send_time = HAL_GetTick();
+ // 启动DMA接收(使用正常模式)
+ // 初始化UART DMA接收(使用循环模式)
+ UART_DMA_Init();
+
+ // 记录状态开始时间
+ state_start_time = HAL_GetTick();
/* USER CODE END 2 */
/* Infinite loop */
@@ -118,20 +192,294 @@ int main(void)
while (1)
{
uint32_t current_time = HAL_GetTick();
+ uint32_t elapsed_time = current_time - state_start_time;
- // 每40ms发送一次命令
- if((current_time - last_send_time) > 40) {
- last_send_time = current_time;
- Send_Command();
+ // 处理DMA接收到的数据
+ DMA_RX_Process();
+ // 状态机处理
+ switch(current_state) {
+
+ // ---------- 从机1状态查询 ----------
+ case STATE_SEND_SLAVE1_STA:
+ current_slave_index = 0;
+
+ // 设置接收状态为等待状态回复
+ rx_state = RX_WAITING_STATUS;
+ expected_length = 5;
+ rx_index = 0;
+
+ // 发送状态查询命令
+ HAL_UART_Transmit(SLAVE_UART, (uint8_t*)status_cmds[0], 4, 10);
+
+ // 记录开始时间并切换到等待状态
+ state_start_time = current_time;
+ current_state = STATE_WAIT_SLAVE1_STA;
+ break;
+
+ case STATE_WAIT_SLAVE1_STA:
+ // 检查是否已收到完整数据
+ if(rx_index >= expected_length) {
+ // 处理状态回复
+ Process_Status_Reply(0, rx_data, rx_index);
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到发送矩阵查询状态
+ current_state = STATE_SEND_SLAVE1_MAT;
+ state_start_time = current_time;
+ }
+ // 超时处理
+ else if(elapsed_time >= RESPONSE_TIMEOUT_MS) {
+ // 超时,标记从机离线
+ slaves[0].is_online = 0;
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到发送矩阵查询状态
+ current_state = STATE_SEND_SLAVE1_MAT;
+ state_start_time = current_time;
+ }
+ break;
+
+ // ---------- 从机1矩阵查询 ----------
+ case STATE_SEND_SLAVE1_MAT:
+ // 设置接收状态为等待矩阵回复
+ rx_state = RX_WAITING_MATRIX;
+ expected_length = 10;
+ rx_index = 0;
+
+ // 发送矩阵查询命令
+ HAL_UART_Transmit(SLAVE_UART, (uint8_t*)matrix_cmds[0], 4, 10);
+
+ // 记录开始时间并切换到等待状态
+ state_start_time = current_time;
+ current_state = STATE_WAIT_SLAVE1_MAT;
+ break;
+
+ case STATE_WAIT_SLAVE1_MAT:
+ // 检查是否已收到完整数据
+ if(rx_index >= expected_length) {
+ // 处理矩阵回复
+ Process_Matrix_Reply(0, rx_data, rx_index);
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到从机2状态查询
+ current_state = STATE_SEND_SLAVE2_STA;
+ state_start_time = current_time;
+ }
+ // 超时处理
+ else if(elapsed_time >= RESPONSE_TIMEOUT_MS) {
+ // 超时,标记矩阵未就绪
+ slaves[0].is_ready = 0;
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到从机2状态查询
+ current_state = STATE_SEND_SLAVE2_STA;
+ state_start_time = current_time;
+ }
+ break;
+
+ // ---------- 从机2状态查询 ----------
+ case STATE_SEND_SLAVE2_STA:
+ current_slave_index = 1;
+
+ // 设置接收状态为等待状态回复
+ rx_state = RX_WAITING_STATUS;
+ expected_length = 5;
+ rx_index = 0;
+
+ // 发送状态查询命令
+ HAL_UART_Transmit(SLAVE_UART, (uint8_t*)status_cmds[1], 4, 10);
+
+ // 记录开始时间并切换到等待状态
+ state_start_time = current_time;
+ current_state = STATE_WAIT_SLAVE2_STA;
+ break;
+
+ case STATE_WAIT_SLAVE2_STA:
+ // 检查是否已收到完整数据
+ if(rx_index >= expected_length) {
+ // 处理状态回复
+ Process_Status_Reply(1, rx_data, rx_index);
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到发送矩阵查询状态
+ current_state = STATE_SEND_SLAVE2_MAT;
+ state_start_time = current_time;
+ }
+ // 超时处理
+ else if(elapsed_time >= RESPONSE_TIMEOUT_MS) {
+ // 超时,标记从机离线
+ slaves[1].is_online = 0;
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到发送矩阵查询状态
+ current_state = STATE_SEND_SLAVE2_MAT;
+ state_start_time = current_time;
+ }
+ break;
+
+ // ---------- 从机2矩阵查询 ----------
+ case STATE_SEND_SLAVE2_MAT:
+ // 设置接收状态为等待矩阵回复
+ rx_state = RX_WAITING_MATRIX;
+ expected_length = 10;
+ rx_index = 0;
+
+ // 发送矩阵查询命令
+ HAL_UART_Transmit(SLAVE_UART, (uint8_t*)matrix_cmds[1], 4, 10);
+
+ // 记录开始时间并切换到等待状态
+ state_start_time = current_time;
+ current_state = STATE_WAIT_SLAVE2_MAT;
+ break;
+
+ case STATE_WAIT_SLAVE2_MAT:
+ // 检查是否已收到完整数据
+ if(rx_index >= expected_length) {
+ // 处理矩阵回复
+ Process_Matrix_Reply(1, rx_data, rx_index);
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到从机3状态查询
+ current_state = STATE_SEND_SLAVE3_STA;
+ state_start_time = current_time;
+ }
+ // 超时处理
+ else if(elapsed_time >= RESPONSE_TIMEOUT_MS) {
+ // 超时,标记矩阵未就绪
+ slaves[1].is_ready = 0;
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到从机3状态查询
+ current_state = STATE_SEND_SLAVE3_STA;
+ state_start_time = current_time;
+ }
+ break;
+
+ // ---------- 从机3状态查询 ----------
+ case STATE_SEND_SLAVE3_STA:
+ current_slave_index = 2;
+
+ // 设置接收状态为等待状态回复
+ rx_state = RX_WAITING_STATUS;
+ expected_length = 5;
+ rx_index = 0;
+
+ // 发送状态查询命令
+ HAL_UART_Transmit(SLAVE_UART, (uint8_t*)status_cmds[2], 4, 10);
+
+ // 记录开始时间并切换到等待状态
+ state_start_time = current_time;
+ current_state = STATE_WAIT_SLAVE3_STA;
+ break;
+
+ case STATE_WAIT_SLAVE3_STA:
+ // 检查是否已收到完整数据
+ if(rx_index >= expected_length) {
+ // 处理状态回复
+ Process_Status_Reply(2, rx_data, rx_index);
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到发送矩阵查询状态
+ current_state = STATE_SEND_SLAVE3_MAT;
+ state_start_time = current_time;
+ }
+ // 超时处理
+ else if(elapsed_time >= RESPONSE_TIMEOUT_MS) {
+ // 超时,标记从机离线
+ slaves[2].is_online = 0;
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到发送矩阵查询状态
+ current_state = STATE_SEND_SLAVE3_MAT;
+ state_start_time = current_time;
+ }
+ break;
+
+ // ---------- 从机3矩阵查询 ----------
+ case STATE_SEND_SLAVE3_MAT:
+ // 设置接收状态为等待矩阵回复
+ rx_state = RX_WAITING_MATRIX;
+ expected_length = 10;
+ rx_index = 0;
+
+ // 发送矩阵查询命令
+ HAL_UART_Transmit(SLAVE_UART, (uint8_t*)matrix_cmds[2], 4, 10);
+
+ // 记录开始时间并切换到等待状态
+ state_start_time = current_time;
+ current_state = STATE_WAIT_SLAVE3_MAT;
+ break;
+
+ case STATE_WAIT_SLAVE3_MAT:
+ // 检查是否已收到完整数据
+ if(rx_index >= expected_length) {
+ // 处理矩阵回复
+ Process_Matrix_Reply(2, rx_data, rx_index);
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到输出数据状态
+ current_state = STATE_OUTPUT_DATA;
+ state_start_time = current_time;
+ }
+ // 超时处理
+ else if(elapsed_time >= RESPONSE_TIMEOUT_MS) {
+ // 超时,标记矩阵未就绪
+ slaves[2].is_ready = 0;
+
+ // 重置接收状态
+ rx_state = RX_IDLE;
+
+ // 切换到输出数据状态
+ current_state = STATE_OUTPUT_DATA;
+ state_start_time = current_time;
+ }
+ break;
+
+ // ---------- 输出数据 ----------
+ case STATE_OUTPUT_DATA:
+ // 构建输出帧
+ Build_Output_Frame();
+
+ // 通过串口2发送输出帧
+ HAL_UART_Transmit(OUTPUT_PORT, output_frame, OUTPUT_FRAME_SIZE, 100);
+
+ // 添加短暂延时后重新开始循环
+ current_state = STATE_DELAY;
+ state_start_time = current_time;
+ break;
+
+ case STATE_DELAY:
+ // 短暂延时后重新开始循环
+ if(elapsed_time >= 50) {
+ current_state = STATE_SEND_SLAVE1_STA;
+ state_start_time = current_time;
+ }
+ break;
}
- // 检查是否在等待回复
- if(rx_state.waiting) {
- Check_And_Process_Reply();
- }
-
- // 小延时
- HAL_Delay(1);
+// HAL_Delay(10);
}
/* USER CODE END 3 */
}
@@ -180,107 +528,161 @@ void SystemClock_Config(void)
}
/* USER CODE BEGIN 4 */
-
-// 输出十六进制数据(只发送原始字节)
-void Output_Pure_Hex(const uint8_t *data, uint8_t len)
+// 初始化UART DMA接收(使用循环模式)
+void UART_DMA_Init(void)
{
- if(data && len > 0) {
- HAL_UART_Transmit(DEBUG_UART, data, len, 50);
- }
-}
-
-// 输出调试信息(十六进制前缀 + 数据)
-void Output_Hex_With_CRLF(const uint8_t *data, uint8_t len)
-{
- if(data && len > 0) {
- HAL_UART_Transmit(DEBUG_UART, data, len, 50);
- }
- // 添加CRLF换行
- const uint8_t crlf[2] = {0x0D, 0x0A};
- HAL_UART_Transmit(DEBUG_UART, crlf, 2, 50);
-}
-
-// 发送命令函数
-void Send_Command(void)
-{
- // 获取当前DMA接收位置
- DMA_HandleTypeDef *hdma = huart1.hdmarx;
- rx_state.dma_start_pos = RX_BUFFER_SIZE - __HAL_DMA_GET_COUNTER(hdma);
- rx_state.start_time = HAL_GetTick();
- rx_state.waiting = 1;
+ // 启动DMA循环接收
+ HAL_UART_Receive_DMA(SLAVE_UART, rx_buffer, RX_BUFFER_SIZE);
- // 根据当前命令类型发送
- if(current_cmd == 0) {
- // 发送状态查询命令到从机
- HAL_UART_Transmit(SLAVE_UART, status_cmd, 4, 50);
-
- // 输出到调试串口(纯十六进制,可选换行)
- Output_Hex_With_CRLF(status_cmd, 4);
-
- rx_state.expected_len = 5;
- rx_state.cmd_type = 0;
+ // 记录初始DMA位置
+ dma_last_pos = RX_BUFFER_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx);
+
+ // 使能UART空闲中断(可选,如果需要)
+// __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
+}
+
+// DMA接收处理函数
+void DMA_RX_Process(void)
+{
+ static uint32_t last_processed_pos = 0;
+ uint32_t current_pos;
+
+ // 获取当前DMA写入位置
+ current_pos = RX_BUFFER_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx);
+
+ // 计算接收到的数据长度
+ uint32_t received_len;
+ if(current_pos >= last_processed_pos) {
+ received_len = current_pos - last_processed_pos;
} else {
- // 发送矩阵查询命令到从机
- HAL_UART_Transmit(SLAVE_UART, matrix_cmd, 4, 50);
-
- // 输出到调试串口(纯十六进制,可选换行)
- Output_Hex_With_CRLF(matrix_cmd, 4);
-
- rx_state.expected_len = 10;
- rx_state.cmd_type = 1;
+ // DMA缓冲区已回绕
+ received_len = (RX_BUFFER_SIZE - last_processed_pos) + current_pos;
+ rx_overflow = 1; // 标记溢出(如果发生)
}
- // 切换命令类型
- current_cmd = !current_cmd;
-
- // 发送后延时,确保发送完成
- HAL_Delay(2);
-}
-
-
-// 检查并处理回复
-void Check_And_Process_Reply(void)
-{
- DMA_HandleTypeDef *hdma = huart1.hdmarx;
- uint16_t current_counter = __HAL_DMA_GET_COUNTER(hdma);
- uint16_t current_pos = RX_BUFFER_SIZE - current_counter;
-
- // 计算从发送命令到现在接收到的字节数
- int16_t received_len;
- if(current_pos >= rx_state.dma_start_pos) {
- received_len = current_pos - rx_state.dma_start_pos;
- } else {
- // 处理环形缓冲区回绕的情况
- received_len = (RX_BUFFER_SIZE - rx_state.dma_start_pos) + current_pos;
+ // 如果没有新数据,直接返回
+ if(received_len == 0) {
+ return;
}
- // 检查是否收到完整帧
- if(received_len >= rx_state.expected_len) {
- // 提取接收到的数据
- uint8_t received_data[16];
- uint8_t data_index = 0;
+ // 处理接收到的数据
+ for(uint32_t i = 0; i < received_len; i++) {
+ uint32_t index = (last_processed_pos + i) % RX_BUFFER_SIZE;
+ uint8_t received_byte = rx_buffer[index];
- for(int i = 0; i < rx_state.expected_len; i++) {
- uint16_t buffer_index = (rx_state.dma_start_pos + i) % RX_BUFFER_SIZE;
- received_data[data_index++] = rx_buffer[buffer_index];
+ // 只有在等待回复时才处理数据
+ if(rx_state != RX_IDLE && rx_index < expected_length) {
+ // 检查是否是预期的从机地址
+ if(rx_index == 0 &&
+ (rx_state == RX_WAITING_STATUS || rx_state == RX_WAITING_MATRIX)) {
+ uint8_t expected_addr = slaves[current_slave_index].address;
+ if(received_byte != expected_addr) {
+ // 不是预期的从机地址,清空接收缓冲区
+ rx_index = 0;
+ continue;
+ }
+ }
+
+ // 存储接收到的字节
+ rx_data[rx_index++] = received_byte;
+
+ // 如果收到完整数据包,立即处理
+ if(rx_index >= expected_length) {
+ // 数据处理将在状态机中完成
+ break;
+ }
}
-
- // 输出接收到的数据到调试串口(纯十六进制,加换行)
- Output_Hex_With_CRLF(received_data, rx_state.expected_len);
-
- // 重置接收状态
- rx_state.waiting = 0;
-
- } else if((HAL_GetTick() - rx_state.start_time) > 50) {
- // 超时处理(100ms) - 输出超时标记 0xFF
- const uint8_t timeout_marker[1] = {0xFF};
- Output_Hex_With_CRLF(timeout_marker, 1);
-
- // 重置接收状态
- rx_state.waiting = 0;
+ }
+
+ // 更新处理位置
+ last_processed_pos = current_pos;
+}
+
+// UART接收完成回调函数
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
+{
+ if(huart == SLAVE_UART) {
+ dma_receive_done = 1;
}
}
+// 处理状态查询回复(5字节)
+void Process_Status_Reply(uint8_t slave_index, uint8_t *data, uint8_t len)
+{
+ // 检查地址和功能码
+ if(len >= 5 &&
+ data[0] == slaves[slave_index].address &&
+ data[1] == 0x01 &&
+ data[2] == 0x01) {
+ // 状态查询成功回复,从机在线
+ slaves[slave_index].is_online = 1;
+ } else {
+ // 回复不正确,从机离线
+ slaves[slave_index].is_online = 0;
+ }
+}
+
+// 处理矩阵查询回复(10字节)
+void Process_Matrix_Reply(uint8_t slave_index, uint8_t *data, uint8_t len)
+{
+ // 检查地址和功能码
+ if(len >= 10 &&
+ data[0] == slaves[slave_index].address &&
+ data[1] == 0x03 &&
+ data[2] == 0x05) {
+ // 矩阵查询成功回复,从机就绪
+ slaves[slave_index].is_ready = 1;
+
+ // 解析5个数据字节(每个字节6个位)
+ for(int row = 0; row < 5; row++) {
+ uint8_t data_byte = data[3 + row];
+
+ // 拆解每个字节的6个位(注意:可能需要确认位顺序,这里是低6位)
+ for(int col = 0; col < 6; col++) {
+ // 获取每个位的值(0或1)
+ uint8_t bit_value = (data_byte >> col) & 0x01;
+ uint8_t matrix_index = row * 6 + col;
+
+ // 更新从机矩阵
+ slaves[slave_index].matrix[matrix_index] = bit_value;
+
+ // 更新全局矩阵(根据从机地址计算偏移)
+ uint8_t global_index = slave_index * MATRIX_POINTS_PER_SLAVE + matrix_index;
+ if(global_index < TOTAL_MATRIX_POINTS) {
+ global_matrix[global_index] = bit_value;
+ }
+ }
+ }
+ } else {
+ // 回复不正确,从机未就绪
+ slaves[slave_index].is_ready = 0;
+ }
+}
+
+// 构建输出帧(98字节)
+void Build_Output_Frame(void)
+{
+ uint8_t index = 0;
+
+ // 同步头(2字节)
+ output_frame[index++] = 0xAA;
+ output_frame[index++] = 0x55;
+
+ // 从机在线状态(3字节)- 根据状态查询回复更新
+ for(int i = 0; i < SLAVE_COUNT; i++) {
+ output_frame[index++] = slaves[i].is_online;
+ }
+
+ // 从机就绪状态(3字节)- 根据矩阵查询回复更新
+ for(int i = 0; i < SLAVE_COUNT; i++) {
+ output_frame[index++] = slaves[i].is_ready;
+ }
+
+ // 全局矩阵数据(90字节)- 根据矩阵查询回复更新
+ for(int i = 0; i < TOTAL_MATRIX_POINTS; i++) {
+ output_frame[index++] = global_matrix[i];
+ }
+}
/* USER CODE END 4 */
/**
diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt
index bb7ed5a..d9963f0 100644
--- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt
+++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster.uvguix.kkkjt
@@ -93,18 +93,18 @@
2
3
- -1
- -1
+ -32000
+ -32000
-1
-1
- 0
- 301
- 1741
- 1100
+ 544
+ 159
+ 1599
+ 1644
@@ -1805,8 +1805,8 @@
59392
File
- 2851
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000968616C5F64656C6179960000000000000012000968616C5F64656C61791463757272656E745F7461736B5F696E6465782B2B0C52533438355F4F75747075741748414C5F554152545F547843706C7443616C6C6261636B0A426173655F53746172740A636F6E74726F6C6C6572067461726765741148414C5F4750494F5F577269746550696E155F5F48414C5F444D415F4745545F434F554E544552045F73696E05666C6F6174055F73717274056874696D32155F5F48414C5F54494D5F5345545F434F4D50415245057374617465134D61747269785F436F6D70726573735F526F770B6D61747269785F646174610C6465766963655F7374617465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2858
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000968616C5F64656C6179960000000000000014000235300C6F75747075745F6672616D650A44454255475F554152540972785F627566666572066D656D7365740968616C5F64656C61791463757272656E745F7461736B5F696E6465782B2B0C52533438355F4F75747075741748414C5F554152545F547843706C7443616C6C6261636B0A426173655F53746172740A636F6E74726F6C6C6572067461726765741148414C5F4750494F5F577269746550696E155F5F48414C5F444D415F4745545F434F554E544552045F73696E05666C6F6174055F73717274056874696D32155F5F48414C5F54494D5F5345545F434F4D504152450573746174650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1838,7 +1838,7 @@
Debug
2373
- 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -3606,9 +3606,9 @@
0
../Core/Src/main.c
- 8
- 277
- 122
+ 12
+ 453
+ 464
1
0
diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.axf b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.axf
index 2fb0d49..9c0ec83 100644
Binary files a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.axf and b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.axf differ
diff --git a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm
index 99eb958..105c17d 100644
--- a/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm
+++ b/Software/master/PressureSensorBoardMaster/MDK-ARM/PressureSensorBoardMaster/PressureSensorBoardMaster.build_log.htm
@@ -28,11 +28,11 @@ Project File Date: 12/06/2025
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\keil\ARM\ARMCC\Bin'
Build target 'PressureSensorBoardMaster'
compiling main.c...
-../Core/Src/main.c(315): warning: #1-D: last line of file ends without a newline
+../Core/Src/main.c(717): warning: #1-D: last line of file ends without a newline
#endif /* USE_FULL_ASSERT */
../Core/Src/main.c: 1 warning, 0 errors
linking...
-Program Size: Code=6556 RO-data=320 RW-data=24 ZI-data=1992
+Program Size: Code=7236 RO-data=336 RW-data=36 ZI-data=2476
FromELF: creating hex file...
"PressureSensorBoardMaster\PressureSensorBoardMaster.axf" - 0 Error(s), 1 Warning(s).
@@ -58,7 +58,7 @@ Package Vendor: Keil
* Component: ARM::CMSIS:CORE@6.1.1
Include file: CMSIS/Core/Include/tz_context.h
-Build Time Elapsed: 00:00:02
+Build Time Elapsed: 00:00:01