Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5cbffd3674 | |||
| 0692b21d9b | |||
| ce169b9cb9 | |||
| 60d4d4d257 | |||
| 0db33b3837 | |||
| 41a50a1d1e | |||
| cdd8fc3f71 | |||
| f695867969 | |||
| 132055b177 | |||
| c7aedab9cd | |||
| d65a758c31 | |||
| 97a7bfeb07 | |||
| b36ffe294c | |||
| 8552d8ee90 |
48
.gitignore
vendored
48
.gitignore
vendored
@@ -1,48 +0,0 @@
|
||||
# ---> uVision
|
||||
# git ignore file for Keil µVision Project
|
||||
|
||||
# µVision 5 and µVision 4 Project screen layout file
|
||||
*.uvguix.*
|
||||
*.uvgui.*
|
||||
|
||||
# Listing Files
|
||||
*.i
|
||||
*.lst
|
||||
*.m51
|
||||
*.m66
|
||||
*.map
|
||||
|
||||
# Object Files
|
||||
*.axf
|
||||
*.b[0-2][0-9]
|
||||
*.b3[0-1]
|
||||
*.bak
|
||||
*.build_log.htm
|
||||
*.crf
|
||||
*.d
|
||||
*.dep
|
||||
*.elf
|
||||
*.htm
|
||||
*.iex
|
||||
*.lnp
|
||||
*.o
|
||||
*.obj
|
||||
*.sbr
|
||||
|
||||
# Firmware Files
|
||||
*.bin
|
||||
*.h86
|
||||
*.hex
|
||||
|
||||
# Build Files
|
||||
.bat
|
||||
|
||||
# Debugger Files
|
||||
.ini
|
||||
|
||||
# JLink Files
|
||||
JLinkLog.txt
|
||||
|
||||
# Other Files
|
||||
|
||||
/john103C6T6/MDK-ARM/john103C6T6.uvoptx
|
||||
11
.gitmodules
vendored
11
.gitmodules
vendored
@@ -1,11 +0,0 @@
|
||||
[submodule "external_flash_eeprom"]
|
||||
path = external_flash_eeprom
|
||||
url = https://git.arktika.cyou/set506/external_flash_eeprom.git
|
||||
[submodule "labview_proj"]
|
||||
path = labview_proj
|
||||
url = https://git.arktika.cyou/Andrey/labview_proj.git
|
||||
branch = master
|
||||
[submodule "core/STM32_Modbus"]
|
||||
path = core/STM32_Modbus
|
||||
url = https://git.arktika.cyou/set506/STM32_Modbus.git
|
||||
branch = release
|
||||
Submodule core/STM32_Modbus deleted from cba13802b1
Submodule external_flash_eeprom deleted from 6ec779c11d
File diff suppressed because one or more lines are too long
@@ -1,147 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
***************************************************************
|
||||
* 1 2 3 4 5 6 7 8 *
|
||||
* --- +++ *
|
||||
* *
|
||||
*****************************************************************
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* @file : main.h
|
||||
* @brief : Header for main.c file.
|
||||
* This file contains the common defines of the application.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __MAIN_H
|
||||
#define __MAIN_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include "modbus_data.h"
|
||||
#include "PROJ_setup.h"
|
||||
#include "dallas_tools.h"
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
typedef enum
|
||||
{
|
||||
FuncOK=0,
|
||||
FuncERROR=1
|
||||
|
||||
}FuncStat;
|
||||
|
||||
|
||||
typedef enum {
|
||||
CONFIG_DEVICE_ID = 0,
|
||||
CONFIG_BAUDRATE,
|
||||
CONFIG_CALIBRATION,
|
||||
CONFIG_SETTINGS
|
||||
} ConfigParams;
|
||||
|
||||
|
||||
|
||||
typedef enum {
|
||||
STATE_OPEN_VALVE = 0, // open
|
||||
STATE_CLOSE_VALVE= 1 // close
|
||||
} ValveState;
|
||||
typedef struct
|
||||
{
|
||||
uint32_t id[2];
|
||||
float temp;
|
||||
uint16_t location;
|
||||
uint8_t t_open;
|
||||
float t_set;
|
||||
uint8_t t_close;
|
||||
uint8_t status_T_sense:1 ;
|
||||
ValveState state;
|
||||
uint16_t count;
|
||||
}TEMP_TypeDef;
|
||||
typedef struct {
|
||||
uint32_t init_tsens : 1; // Update Interrupt Flag (бит 0) — флаг переполнения/обновления
|
||||
|
||||
// ... (другие биты могут быть зарезервированы или использоваться в расширенных таймерах)
|
||||
} Flags_TypeDef;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
#define reset_blink_delay 50
|
||||
#define rest_iter 10
|
||||
#define GPIOB11_valve MB_DATA.Coils.coils[0].state_val_bit.state_val_01
|
||||
#define ralay_5v_on GPIOA->ODR&(1<<10);
|
||||
|
||||
|
||||
|
||||
extern void handle_command(char* cmd);
|
||||
typedef void (*FunctionPointer)(void);
|
||||
|
||||
uint16_t handle_valves(TEMP_TypeDef* temp_sense[MAX_SENSE]);
|
||||
void init_setpoint_all_T_sense(TEMP_TypeDef* temp_sense, int size_array);
|
||||
void iwdg_refresh(void);
|
||||
void led_blink(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,uint8_t iter,uint16_t delay);
|
||||
FuncStat Field_modbus(MB_DataStructureTypeDef* MB_DATA, Flags_TypeDef* flag);
|
||||
FuncStat packStruct(MB_DataStructureTypeDef* MB_DATA,int sizeARR);
|
||||
void Check_Tconnect(MB_DataStructureTypeDef* MB_DATA, Flags_TypeDef* flag ,DALLAS_HandleTypeDef* hdallas, int a[50]);
|
||||
FuncStat value_control(void );
|
||||
|
||||
void reinit_t_sens(void);
|
||||
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
/* USER CODE END EC */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
/* USER CODE END EM */
|
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
void Error_Handler(void);
|
||||
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
#define Relay_dc5v_Pin GPIO_PIN_10
|
||||
#define Relay_dc5v_GPIO_Port GPIOA
|
||||
#define One_wire_Pin GPIO_PIN_15
|
||||
#define One_wire_GPIO_Port GPIOA
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __MAIN_H */
|
||||
@@ -1,52 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file rtc.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the rtc.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __RTC_H__
|
||||
#define __RTC_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern RTC_HandleTypeDef hrtc;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_RTC_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __RTC_H__ */
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f1xx_it.h
|
||||
* @brief This file contains the headers of the interrupt handlers.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F1xx_IT_H
|
||||
#define __STM32F1xx_IT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
/* USER CODE END EC */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
/* USER CODE END EM */
|
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
void NMI_Handler(void);
|
||||
void HardFault_Handler(void);
|
||||
void MemManage_Handler(void);
|
||||
void BusFault_Handler(void);
|
||||
void UsageFault_Handler(void);
|
||||
void SVC_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
void RTC_IRQHandler(void);
|
||||
void TIM1_BRK_IRQHandler(void);
|
||||
void TIM1_UP_IRQHandler(void);
|
||||
void TIM1_TRG_COM_IRQHandler(void);
|
||||
void TIM1_CC_IRQHandler(void);
|
||||
void TIM2_IRQHandler(void);
|
||||
void TIM3_IRQHandler(void);
|
||||
void USART1_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM32F1xx_IT_H */
|
||||
@@ -1,55 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file tim.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the tim.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __TIM_H__
|
||||
#define __TIM_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern TIM_HandleTypeDef htim1;
|
||||
|
||||
extern TIM_HandleTypeDef htim2;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_TIM1_Init(void);
|
||||
void MX_TIM2_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __TIM_H__ */
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file usart.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the usart.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USART_H__
|
||||
#define __USART_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern UART_HandleTypeDef huart1;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_USART1_UART_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __USART_H__ */
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file gpio.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of all used GPIO pins.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "gpio.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Configure GPIO */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/** Configure pins as
|
||||
* Analog
|
||||
* Input
|
||||
* Output
|
||||
* EVENT_OUT
|
||||
* EXTI
|
||||
*/
|
||||
void MX_GPIO_Init(void)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
|
||||
|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8
|
||||
|GPIO_PIN_9|Relay_dc5v_Pin|One_wire_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10
|
||||
|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
|
||||
|GPIO_PIN_15, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin : PC13 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pin : PA0 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PA1 PA2 PA3 PA4
|
||||
PA5 PA6 PA7 PA8
|
||||
PA9 Relay_dc5v_Pin One_wire_Pin */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
|
||||
|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8
|
||||
|GPIO_PIN_9|Relay_dc5v_Pin|One_wire_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : PB0 PB1 PB2 PB10
|
||||
PB11 PB12 PB13 PB14
|
||||
PB15 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10
|
||||
|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
|
||||
|GPIO_PIN_15;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
/* USER CODE END 2 */
|
||||
@@ -1,552 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : main.c
|
||||
* @brief : Main program body
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "adc.h"
|
||||
#include "can.h"
|
||||
#include "i2c.h"
|
||||
#include "rtc.h"
|
||||
#include "spi.h"
|
||||
#include "tim.h"
|
||||
#include "usart.h"
|
||||
#include "gpio.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "dallas_tools.h"
|
||||
|
||||
#include "def.h"
|
||||
#include <stdio.h>
|
||||
#include "modbus.h"
|
||||
#include "eeprom_emul.h"
|
||||
#include "stdio.h"
|
||||
#include "flash_ring.h"
|
||||
#include "string.h"
|
||||
|
||||
|
||||
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PTD */
|
||||
|
||||
/* USER CODE END PTD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
uint16_t iter, cnt = 5;
|
||||
uint8_t init_retries = 5;
|
||||
uint8_t ralay_5v_on_var = 0;
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PM */
|
||||
float temperature;
|
||||
uint8_t roms[MAX_DEVICES][8];
|
||||
Flags_TypeDef flag;
|
||||
//extern uint8_t devices_found ;
|
||||
uint8_t _debug_init = 0;
|
||||
TEMP_TypeDef temp_sense[30];
|
||||
float set_temp_old[30];
|
||||
char rx_buffer[64];
|
||||
uint8_t rx_index = 0;
|
||||
char command_ready = 0;
|
||||
uint8_t uart_byte = 0;
|
||||
uint8_t first_in = 1;
|
||||
DALLAS_SensorHandleTypeDef sens[30];
|
||||
int init_sens = 0;
|
||||
FlashRecord_t* record;
|
||||
uint8_t flash_buff[RECORD_SIZE - 4];
|
||||
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
int last_page_addr = LAST_PAGE_ADDR;
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
void SystemClock_Config(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/**
|
||||
* @brief The application entry point.
|
||||
* @retval int
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/* MCU Configuration--------------------------------------------------------*/
|
||||
|
||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
||||
HAL_Init();
|
||||
|
||||
/* USER CODE BEGIN Init */
|
||||
|
||||
/* USER CODE END Init */
|
||||
|
||||
/* Configure the system clock */
|
||||
SystemClock_Config();
|
||||
|
||||
/* USER CODE BEGIN SysInit */
|
||||
|
||||
|
||||
/* USER CODE END SysInit */
|
||||
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_TIM1_Init();
|
||||
MX_USART1_UART_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_ADC1_Init();
|
||||
MX_CAN_Init();
|
||||
MX_I2C1_Init();
|
||||
MX_RTC_Init();
|
||||
MX_SPI1_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
|
||||
|
||||
led_blink(GPIOC, 13, rest_iter, reset_blink_delay);
|
||||
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
|
||||
MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE);
|
||||
// Запуск приема Modbus
|
||||
MODBUS_SlaveStart(&hmodbus1, NULL);
|
||||
uint8_t uart_byte = 0;
|
||||
Dallas_BusFirstInit(&htim1);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
reinit_t_sens();
|
||||
init_setpoint_all_T_sense(temp_sense, hdallas.onewire->RomCnt);
|
||||
|
||||
MB_DATA.InRegs.num_Tsens = hdallas.onewire->RomCnt;
|
||||
// BufferState_t buffer_state = buffer_init();
|
||||
for(int i=0;i<RECORD_SIZE;i++)
|
||||
{
|
||||
flash_buff[i]=i;
|
||||
|
||||
}
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
while (1)
|
||||
{
|
||||
|
||||
|
||||
// if (MB_DATA.Coils.relay_struct[0].state_val_bit.Temp11_relay_isOn)
|
||||
// {
|
||||
// MB_DATA.Coils.relay_struct[0].state_val_bit.Temp11_relay_isOn = 0;
|
||||
// BufferState_t state = buffer_init();
|
||||
// uint32_t idx = (state.write_index ) % RECORDS_PER_PAGE;
|
||||
// FlashRecord_t* record = buffer_read_record(idx);
|
||||
|
||||
// }
|
||||
// if (MB_DATA.Coils.relay_struct[0].state_val_bit.Temp10_relay_isOn)
|
||||
// {
|
||||
// MB_DATA.Coils.relay_struct[0].state_val_bit.Temp10_relay_isOn = 0;
|
||||
// FlashRecord_t new_record;
|
||||
// new_record.timestamp = HAL_GetTick();
|
||||
// memcpy(new_record.data, flash_buff, sizeof(new_record.data));
|
||||
|
||||
// HAL_StatusTypeDef status = buffer_write_record(&new_record, &buffer_state);
|
||||
|
||||
// if (status == HAL_OK)
|
||||
// {
|
||||
// // printf("Record written successfully\n");
|
||||
// GPIOC->ODR |= 1 << 13;
|
||||
// }
|
||||
|
||||
// }
|
||||
temp_sense[0].t_close = 1;
|
||||
Field_modbus(&MB_DATA, &flag);
|
||||
Check_Tconnect(&MB_DATA, &flag, &hdallas, 0);
|
||||
value_control();
|
||||
init_setpoint_all_T_sense(temp_sense, hdallas.onewire->RomCnt);
|
||||
// handle_valves(temp_sense[]);
|
||||
Dallas_StartConvertTAll(&hdallas, DALLAS_WAIT_BUS, 0);
|
||||
for(int i = 0; i < hdallas.onewire->RomCnt; i++)
|
||||
{
|
||||
if(sens[i].isLost)
|
||||
{
|
||||
sens[i].lost_cnt ++;
|
||||
}
|
||||
Dallas_ReadTemperature(&sens[i]);
|
||||
MB_DATA.InRegs.sens_Temp[i] = sens[i].temperature * 10;
|
||||
/////////////////////////заменить на define ralay_5v_on_var GPIOA->ODR|=1<<10;
|
||||
ralay_5v_on_var = MB_DATA.Coils.coils[1].state_val_bit.state_val_05;
|
||||
if (ralay_5v_on_var)
|
||||
{
|
||||
GPIOA->ODR |= 1 << 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIOA->ODR &= ~(1 << 10);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
//iwdg_refresh();
|
||||
|
||||
//HAL_Delay(200);
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief System Clock Configuration
|
||||
* @retval None
|
||||
*/
|
||||
void SystemClock_Config(void)
|
||||
{
|
||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
*/
|
||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_HSE;
|
||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
||||
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
/** Initializes the CPU, AHB and APB buses clocks
|
||||
*/
|
||||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
|
||||
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
|
||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||
|
||||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_ADC;
|
||||
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
|
||||
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
|
||||
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 4 */
|
||||
void iwdg_refresh(void)
|
||||
{
|
||||
IWDG->KR = 0xAAAA; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
void led_blink(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint8_t iter, uint16_t delay)
|
||||
{
|
||||
for(int i = 0; i < iter; i++)
|
||||
{
|
||||
GPIOx->ODR ^= (1 << GPIO_Pin);
|
||||
HAL_Delay(delay);
|
||||
}
|
||||
}
|
||||
|
||||
void Check_Tconnect(MB_DataStructureTypeDef* MB_DATA, Flags_TypeDef* flag, DALLAS_HandleTypeDef* hdallas, int a[0])
|
||||
{
|
||||
for(int i = 0; i < hdallas->onewire->RomCnt; i++)
|
||||
{
|
||||
if(sens[i].isLost)
|
||||
{
|
||||
//init_sens=1;
|
||||
}
|
||||
|
||||
}
|
||||
if (init_sens || flag->init_tsens)
|
||||
{
|
||||
init_sens = 0;
|
||||
flag->init_tsens = 0;
|
||||
//Dallas_BusFirstInit(&htim1);
|
||||
DS18B20_Search(&DS, &OW) ;
|
||||
reinit_t_sens();
|
||||
MB_DATA->InRegs.num_Tsens = hdallas->onewire->RomCnt;
|
||||
}
|
||||
}
|
||||
|
||||
void reinit_t_sens(void)
|
||||
{
|
||||
for ( int i = 0; i < hdallas.onewire->RomCnt; i++)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ROM-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//sens[i].Init.init_func = &Dallas_SensorInitByROM;
|
||||
// sens[i].Init.InitParam.ROM = rom_address;
|
||||
sens[i].Init.InitParam.Ind = i;
|
||||
sens[i].Init.init_func = &Dallas_SensorInitByInd;
|
||||
sens[i].Init.Resolution = DALLAS_CONFIG_9_BITS;
|
||||
MB_DATA.HoldRegs.set_Temp[i] = sens[i].set_temp = 20.;
|
||||
MB_DATA.HoldRegs.set_hyst[i] = sens[i].hyst = 1;
|
||||
Dallas_AddNewSensors(&hdallas, &sens[i]);
|
||||
|
||||
}
|
||||
}
|
||||
FuncStat packStruct(MB_DataStructureTypeDef* MB_DATA, int sizeARR)
|
||||
{
|
||||
for(int i = 0; i < sizeARR; i++)
|
||||
{
|
||||
for(int sens_num = 0; sens_num < hdallas.onewire->RomCnt; sens_num++)
|
||||
{
|
||||
switch(sens_num)
|
||||
{
|
||||
case 0:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp1_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 1:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp2_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 2:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp3_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 3:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp4_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 4:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp5_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 5:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp6_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 6:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp7_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 7:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp8_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 8:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp9_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 9:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp10_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 10:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp11_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 11:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp12_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 12:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp13_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 13:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp14_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 14:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp15_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
case 15:
|
||||
MB_DATA->Coils.status_tSens[i].state_val_bit.Temp16_isConnected = sens[i * 16 + sens_num ].isConnected;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FuncOK;
|
||||
|
||||
}
|
||||
FuncStat Field_modbus(MB_DataStructureTypeDef* MB_DATA, Flags_TypeDef* flag)
|
||||
{
|
||||
|
||||
MB_DATA->InRegs.ID = *hdallas.ds_devices;
|
||||
flag->init_tsens = MB_DATA->Coils.init_Tsens;
|
||||
packStruct(MB_DATA, MAX_SENSE / 16);
|
||||
if (_debug_init || MB_DATA->Coils.init_param)
|
||||
{
|
||||
_debug_init = 0;
|
||||
|
||||
MB_DATA->Coils.init_param = 0;
|
||||
for(int i = 0; i < hdallas.onewire->RomCnt; i++)
|
||||
{
|
||||
sens[i].set_temp = MB_DATA->HoldRegs.set_Temp[i];
|
||||
sens[i].hyst = MB_DATA->HoldRegs.set_hyst[i];
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
return FuncOK;
|
||||
};
|
||||
|
||||
|
||||
FuncStat value_control(void )
|
||||
{
|
||||
|
||||
for(int i = 0; i < hdallas.onewire->RomCnt; i++)
|
||||
{
|
||||
if (sens[i].temperature < sens[i].set_temp - sens[i].hyst)
|
||||
|
||||
{
|
||||
|
||||
MB_DATA.Coils.relay_struct_off.all |= 1 << i;
|
||||
MB_DATA.Coils.relay_struct_on.all &= ~(1 << i);
|
||||
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
|
||||
if (sens[i].temperature > sens[i].set_temp + sens[i].hyst)
|
||||
{
|
||||
|
||||
MB_DATA.Coils.relay_struct_off.all &= ~(1 << i);
|
||||
MB_DATA.Coils.relay_struct_on.all |= 1 << i;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
|
||||
if (sens[i].temperature == sens[i].set_temp )
|
||||
{
|
||||
MB_DATA.Coils.relay_struct_on.all &= ~(1 << i);
|
||||
MB_DATA.Coils.relay_struct_off.all &= ~(1 << i);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return FuncOK;
|
||||
}
|
||||
|
||||
|
||||
uint16_t handle_valves(TEMP_TypeDef* temp_sense[MAX_SENSE] )
|
||||
{
|
||||
|
||||
if (temp_sense[0]->state == STATE_OPEN_VALVE)
|
||||
{
|
||||
GPIOC->ODR |= 1 << 14;
|
||||
}
|
||||
else if (temp_sense[0]->state == STATE_CLOSE_VALVE)
|
||||
{
|
||||
GPIOC->ODR &= ~(1 << 14);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
void init_setpoint_all_T_sense(TEMP_TypeDef* temp_sense, int size_array)
|
||||
{
|
||||
//ds_search_devices();
|
||||
for(int i = 0; i < size_array ; i++)
|
||||
{
|
||||
temp_sense[i].id[0] = roms[i][0] << 0 | roms[i][1] << 8 | roms[i][2] << 16 | roms[i][3] << 24;
|
||||
temp_sense[i].id[1] = roms[i][4] << 0 | roms[i][5] << 8 | roms[i][6] << 16 | roms[i][7] << 24;
|
||||
temp_sense[i].count = i + 1;
|
||||
temp_sense[i].location = 1;
|
||||
temp_sense[i].t_open = 22;
|
||||
temp_sense[i].t_close = 18;
|
||||
temp_sense[i].status_T_sense = 1;
|
||||
}
|
||||
}
|
||||
/* USER CODE END 4 */
|
||||
|
||||
/**
|
||||
* @brief Period elapsed callback in non blocking mode
|
||||
* @note This function is called when TIM3 interrupt took place, inside
|
||||
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
|
||||
* a global variable "uwTick" used as application time base.
|
||||
* @param htim : TIM handle
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
||||
{
|
||||
/* USER CODE BEGIN Callback 0 */
|
||||
|
||||
/* USER CODE END Callback 0 */
|
||||
if (htim->Instance == TIM3)
|
||||
{
|
||||
HAL_IncTick();
|
||||
}
|
||||
/* USER CODE BEGIN Callback 1 */
|
||||
|
||||
/* USER CODE END Callback 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function is executed in case of error occurrence.
|
||||
* @retval None
|
||||
*/
|
||||
void Error_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN Error_Handler_Debug */
|
||||
/* User can add his own implementation to report the HAL error return state */
|
||||
__disable_irq();
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
/* USER CODE END Error_Handler_Debug */
|
||||
}
|
||||
#ifdef USE_FULL_ASSERT
|
||||
/**
|
||||
* @brief Reports the name of the source file and the source line number
|
||||
* where the assert_param error has occurred.
|
||||
* @param file: pointer to the source file name
|
||||
* @param line: assert_param error line source number
|
||||
* @retval None
|
||||
*/
|
||||
void assert_failed(uint8_t *file, uint32_t line)
|
||||
{
|
||||
/* USER CODE BEGIN 6 */
|
||||
/* User can add his own implementation to report the file name and line number,
|
||||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
||||
/* USER CODE END 6 */
|
||||
}
|
||||
#endif /* USE_FULL_ASSERT */
|
||||
@@ -1,127 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file rtc.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of the RTC instances.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "rtc.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
RTC_HandleTypeDef hrtc;
|
||||
|
||||
/* RTC init function */
|
||||
void MX_RTC_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN RTC_Init 0 */
|
||||
|
||||
/* USER CODE END RTC_Init 0 */
|
||||
|
||||
RTC_TimeTypeDef sTime = {0};
|
||||
RTC_DateTypeDef DateToUpdate = {0};
|
||||
|
||||
/* USER CODE BEGIN RTC_Init 1 */
|
||||
|
||||
/* USER CODE END RTC_Init 1 */
|
||||
|
||||
/** Initialize RTC Only
|
||||
*/
|
||||
hrtc.Instance = RTC;
|
||||
hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
|
||||
hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
|
||||
if (HAL_RTC_Init(&hrtc) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN Check_RTC_BKUP */
|
||||
|
||||
/* USER CODE END Check_RTC_BKUP */
|
||||
|
||||
/** Initialize RTC and set the Time and Date
|
||||
*/
|
||||
sTime.Hours = 0x0;
|
||||
sTime.Minutes = 0x0;
|
||||
sTime.Seconds = 0x0;
|
||||
|
||||
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
|
||||
DateToUpdate.Month = RTC_MONTH_JANUARY;
|
||||
DateToUpdate.Date = 0x1;
|
||||
DateToUpdate.Year = 0x0;
|
||||
|
||||
if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN RTC_Init 2 */
|
||||
|
||||
/* USER CODE END RTC_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
|
||||
{
|
||||
|
||||
if(rtcHandle->Instance==RTC)
|
||||
{
|
||||
/* USER CODE BEGIN RTC_MspInit 0 */
|
||||
|
||||
/* USER CODE END RTC_MspInit 0 */
|
||||
HAL_PWR_EnableBkUpAccess();
|
||||
/* Enable BKP CLK enable for backup registers */
|
||||
__HAL_RCC_BKP_CLK_ENABLE();
|
||||
/* RTC clock enable */
|
||||
__HAL_RCC_RTC_ENABLE();
|
||||
|
||||
/* RTC interrupt Init */
|
||||
HAL_NVIC_SetPriority(RTC_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(RTC_IRQn);
|
||||
/* USER CODE BEGIN RTC_MspInit 1 */
|
||||
|
||||
/* USER CODE END RTC_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle)
|
||||
{
|
||||
|
||||
if(rtcHandle->Instance==RTC)
|
||||
{
|
||||
/* USER CODE BEGIN RTC_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END RTC_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_RTC_DISABLE();
|
||||
|
||||
/* RTC interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(RTC_IRQn);
|
||||
/* USER CODE BEGIN RTC_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END RTC_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
@@ -1,330 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f1xx_it.c
|
||||
* @brief Interrupt Service Routines.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "stm32f1xx_it.h"
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "modbus.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN TD */
|
||||
|
||||
/* USER CODE END TD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PM */
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
extern RTC_HandleTypeDef hrtc;
|
||||
extern TIM_HandleTypeDef htim1;
|
||||
extern TIM_HandleTypeDef htim2;
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern TIM_HandleTypeDef htim3;
|
||||
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
||||
/******************************************************************************/
|
||||
/* Cortex-M3 Processor Interruption and Exception Handlers */
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* @brief This function handles Non maskable interrupt.
|
||||
*/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
|
||||
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
/* USER CODE END NonMaskableInt_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Hard fault interrupt.
|
||||
*/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN HardFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END HardFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
|
||||
/* USER CODE END W1_HardFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Memory management fault.
|
||||
*/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN MemoryManagement_IRQn 0 */
|
||||
|
||||
/* USER CODE END MemoryManagement_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
|
||||
/* USER CODE END W1_MemoryManagement_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Prefetch fault, memory access fault.
|
||||
*/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN BusFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END BusFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_BusFault_IRQn 0 */
|
||||
/* USER CODE END W1_BusFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Undefined instruction or illegal state.
|
||||
*/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN UsageFault_IRQn 0 */
|
||||
|
||||
/* USER CODE END UsageFault_IRQn 0 */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE BEGIN W1_UsageFault_IRQn 0 */
|
||||
/* USER CODE END W1_UsageFault_IRQn 0 */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System service call via SWI instruction.
|
||||
*/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SVCall_IRQn 0 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 0 */
|
||||
/* USER CODE BEGIN SVCall_IRQn 1 */
|
||||
|
||||
/* USER CODE END SVCall_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Debug monitor.
|
||||
*/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 0 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 0 */
|
||||
/* USER CODE BEGIN DebugMonitor_IRQn 1 */
|
||||
|
||||
/* USER CODE END DebugMonitor_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles Pendable request for system service.
|
||||
*/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN PendSV_IRQn 0 */
|
||||
|
||||
/* USER CODE END PendSV_IRQn 0 */
|
||||
/* USER CODE BEGIN PendSV_IRQn 1 */
|
||||
|
||||
/* USER CODE END PendSV_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles System tick timer.
|
||||
*/
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SysTick_IRQn 0 */
|
||||
|
||||
/* USER CODE END SysTick_IRQn 0 */
|
||||
|
||||
/* USER CODE BEGIN SysTick_IRQn 1 */
|
||||
|
||||
/* USER CODE END SysTick_IRQn 1 */
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* STM32F1xx Peripheral Interrupt Handlers */
|
||||
/* Add here the Interrupt Handlers for the used peripherals. */
|
||||
/* For the available peripheral interrupt handler names, */
|
||||
/* please refer to the startup file (startup_stm32f1xx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles RTC global interrupt.
|
||||
*/
|
||||
void RTC_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN RTC_IRQn 0 */
|
||||
|
||||
/* USER CODE END RTC_IRQn 0 */
|
||||
HAL_RTCEx_RTCIRQHandler(&hrtc);
|
||||
/* USER CODE BEGIN RTC_IRQn 1 */
|
||||
|
||||
/* USER CODE END RTC_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM1 break interrupt.
|
||||
*/
|
||||
void TIM1_BRK_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_BRK_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM1_BRK_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim1);
|
||||
/* USER CODE BEGIN TIM1_BRK_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM1_BRK_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM1 update interrupt.
|
||||
*/
|
||||
void TIM1_UP_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_UP_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM1_UP_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim1);
|
||||
/* USER CODE BEGIN TIM1_UP_IRQn 1 */
|
||||
|
||||
//GPIOC->ODR^=(1<<13);
|
||||
/* USER CODE END TIM1_UP_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM1 trigger and commutation interrupts.
|
||||
*/
|
||||
void TIM1_TRG_COM_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_TRG_COM_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM1_TRG_COM_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim1);
|
||||
/* USER CODE BEGIN TIM1_TRG_COM_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM1_TRG_COM_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM1 capture compare interrupt.
|
||||
*/
|
||||
void TIM1_CC_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_CC_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM1_CC_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim1);
|
||||
/* USER CODE BEGIN TIM1_CC_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM1_CC_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM2 global interrupt.
|
||||
*/
|
||||
void TIM2_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_IRQn 0 */
|
||||
RS_TIM_Handler(&hmodbus1);
|
||||
return;
|
||||
/* USER CODE END TIM2_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim2);
|
||||
/* USER CODE BEGIN TIM2_IRQn 1 */
|
||||
//RS_TIM_Handler(&hmodbus1);
|
||||
/* USER CODE END TIM2_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM3 global interrupt.
|
||||
*/
|
||||
void TIM3_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM3_IRQn 0 */
|
||||
static uint8_t first_in=1;
|
||||
/* USER CODE END TIM3_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim3);
|
||||
/* USER CODE BEGIN TIM3_IRQn 1 */
|
||||
if (first_in)
|
||||
{
|
||||
first_in=0;
|
||||
}
|
||||
|
||||
/* USER CODE END TIM3_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles USART1 global interrupt.
|
||||
*/
|
||||
void USART1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_IRQn 0 */
|
||||
RS_UART_Handler(&hmodbus1);
|
||||
return;
|
||||
/* USER CODE END USART1_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&huart1);
|
||||
/* USER CODE BEGIN USART1_IRQn 1 */
|
||||
//RS_UART_Handler(&hmodbus1);
|
||||
|
||||
|
||||
/* USER CODE END USART1_IRQn 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
@@ -1,191 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file tim.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of the TIM instances.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "tim.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
TIM_HandleTypeDef htim1;
|
||||
TIM_HandleTypeDef htim2;
|
||||
|
||||
/* TIM1 init function */
|
||||
void MX_TIM1_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM1_Init 0 */
|
||||
|
||||
/* USER CODE END TIM1_Init 0 */
|
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM1_Init 1 */
|
||||
|
||||
/* USER CODE END TIM1_Init 1 */
|
||||
htim1.Instance = TIM1;
|
||||
htim1.Init.Prescaler = 0;
|
||||
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim1.Init.Period = 65535;
|
||||
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim1.Init.RepetitionCounter = 0;
|
||||
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM1_Init 2 */
|
||||
|
||||
/* USER CODE END TIM1_Init 2 */
|
||||
|
||||
}
|
||||
/* TIM2 init function */
|
||||
void MX_TIM2_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM2_Init 0 */
|
||||
|
||||
/* USER CODE END TIM2_Init 0 */
|
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM2_Init 1 */
|
||||
|
||||
/* USER CODE END TIM2_Init 1 */
|
||||
htim2.Instance = TIM2;
|
||||
htim2.Init.Prescaler = 72-1;
|
||||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim2.Init.Period = 65535;
|
||||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM2_Init 2 */
|
||||
|
||||
/* USER CODE END TIM2_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
{
|
||||
|
||||
if(tim_baseHandle->Instance==TIM1)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM1_MspInit 0 */
|
||||
/* TIM1 clock enable */
|
||||
__HAL_RCC_TIM1_CLK_ENABLE();
|
||||
|
||||
/* TIM1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM1_BRK_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM1_BRK_IRQn);
|
||||
HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
|
||||
HAL_NVIC_SetPriority(TIM1_TRG_COM_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM1_TRG_COM_IRQn);
|
||||
HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
|
||||
/* USER CODE BEGIN TIM1_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM1_MspInit 1 */
|
||||
}
|
||||
else if(tim_baseHandle->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 0 */
|
||||
/* TIM2 clock enable */
|
||||
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||
|
||||
/* TIM2 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
||||
/* USER CODE BEGIN TIM2_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
{
|
||||
|
||||
if(tim_baseHandle->Instance==TIM1)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM1_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM1_CLK_DISABLE();
|
||||
|
||||
/* TIM1 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(TIM1_BRK_IRQn);
|
||||
HAL_NVIC_DisableIRQ(TIM1_UP_IRQn);
|
||||
HAL_NVIC_DisableIRQ(TIM1_TRG_COM_IRQn);
|
||||
HAL_NVIC_DisableIRQ(TIM1_CC_IRQn);
|
||||
/* USER CODE BEGIN TIM1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM1_MspDeInit 1 */
|
||||
}
|
||||
else if(tim_baseHandle->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM2_CLK_DISABLE();
|
||||
|
||||
/* TIM2 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(TIM2_IRQn);
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
@@ -1,124 +0,0 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file usart.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of the USART instances.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usart.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
UART_HandleTypeDef huart1;
|
||||
|
||||
/* USART1 init function */
|
||||
|
||||
void MX_USART1_UART_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN USART1_Init 0 */
|
||||
|
||||
/* USER CODE END USART1_Init 0 */
|
||||
|
||||
/* USER CODE BEGIN USART1_Init 1 */
|
||||
huart1.ReceptionType=HAL_UART_RECEPTION_TOIDLE;
|
||||
/* USER CODE END USART1_Init 1 */
|
||||
huart1.Instance = USART1;
|
||||
huart1.Init.BaudRate = 115200;
|
||||
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
huart1.Init.StopBits = UART_STOPBITS_1;
|
||||
huart1.Init.Parity = UART_PARITY_NONE;
|
||||
huart1.Init.Mode = UART_MODE_TX_RX;
|
||||
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
if (HAL_UART_Init(&huart1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN USART1_Init 2 */
|
||||
|
||||
/* USER CODE END USART1_Init 2 */
|
||||
|
||||
}
|
||||
|
||||
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(uartHandle->Instance==USART1)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_MspInit 0 */
|
||||
|
||||
/* USER CODE END USART1_MspInit 0 */
|
||||
/* USART1 clock enable */
|
||||
__HAL_RCC_USART1_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
/**USART1 GPIO Configuration
|
||||
PB6 ------> USART1_TX
|
||||
PB7 ------> USART1_RX
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_6;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_7;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
__HAL_AFIO_REMAP_USART1_ENABLE();
|
||||
|
||||
/* USART1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspInit 1 */
|
||||
|
||||
/* USER CODE END USART1_MspInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
||||
{
|
||||
|
||||
if(uartHandle->Instance==USART1)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END USART1_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_USART1_CLK_DISABLE();
|
||||
|
||||
/**USART1 GPIO Configuration
|
||||
PB6 ------> USART1_TX
|
||||
PB7 ------> USART1_RX
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
|
||||
|
||||
/* USART1 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END USART1_MspDeInit 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
@@ -1,23 +0,0 @@
|
||||
/*
|
||||
* UVISION generated file: DO NOT EDIT!
|
||||
* Generated by: uVision version 5.41.0.0
|
||||
*
|
||||
* Project: 'john103C6T6'
|
||||
* Target: 'john103C6T6'
|
||||
*/
|
||||
|
||||
#ifndef RTE_COMPONENTS_H
|
||||
#define RTE_COMPONENTS_H
|
||||
|
||||
|
||||
/*
|
||||
* Define the Device Header File:
|
||||
*/
|
||||
#define CMSIS_device_header "stm32f10x.h"
|
||||
|
||||
/* Keil::Compiler&ARM Compiler:I/O:STDOUT&Breakpoint@1.2.0 */
|
||||
#define RTE_Compiler_IO_STDOUT /* Compiler I/O: STDOUT */
|
||||
#define RTE_Compiler_IO_STDOUT_BKPT /* Compiler I/O: STDOUT Breakpoint */
|
||||
|
||||
|
||||
#endif /* RTE_COMPONENTS_H */
|
||||
@@ -1,1005 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
|
||||
|
||||
<SchemaVersion>1.0</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Extensions>
|
||||
<cExt>*.c</cExt>
|
||||
<aExt>*.s*; *.src; *.a*</aExt>
|
||||
<oExt>*.obj; *.o</oExt>
|
||||
<lExt>*.lib</lExt>
|
||||
<tExt>*.txt; *.h; *.inc; *.md</tExt>
|
||||
<pExt>*.plm</pExt>
|
||||
<CppX>*.cpp</CppX>
|
||||
<nMigrate>0</nMigrate>
|
||||
</Extensions>
|
||||
|
||||
<DaveTm>
|
||||
<dwLowDateTime>0</dwLowDateTime>
|
||||
<dwHighDateTime>0</dwHighDateTime>
|
||||
</DaveTm>
|
||||
|
||||
<Target>
|
||||
<TargetName>john103C6T6</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<TargetOption>
|
||||
<CLKADS>12000000</CLKADS>
|
||||
<OPTTT>
|
||||
<gFlags>1</gFlags>
|
||||
<BeepAtEnd>1</BeepAtEnd>
|
||||
<RunSim>0</RunSim>
|
||||
<RunTarget>1</RunTarget>
|
||||
<RunAbUc>0</RunAbUc>
|
||||
</OPTTT>
|
||||
<OPTHX>
|
||||
<HexSelection>1</HexSelection>
|
||||
<FlashByte>65535</FlashByte>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
</OPTHX>
|
||||
<OPTLEX>
|
||||
<PageWidth>79</PageWidth>
|
||||
<PageLength>66</PageLength>
|
||||
<TabStop>8</TabStop>
|
||||
<ListingPath>C:\Users\z\Documents\</ListingPath>
|
||||
</OPTLEX>
|
||||
<ListingPage>
|
||||
<CreateCListing>1</CreateCListing>
|
||||
<CreateAListing>1</CreateAListing>
|
||||
<CreateLListing>1</CreateLListing>
|
||||
<CreateIListing>0</CreateIListing>
|
||||
<AsmCond>1</AsmCond>
|
||||
<AsmSymb>1</AsmSymb>
|
||||
<AsmXref>0</AsmXref>
|
||||
<CCond>1</CCond>
|
||||
<CCode>0</CCode>
|
||||
<CListInc>0</CListInc>
|
||||
<CSymb>0</CSymb>
|
||||
<LinkerCodeListing>0</LinkerCodeListing>
|
||||
</ListingPage>
|
||||
<OPTXL>
|
||||
<LMap>1</LMap>
|
||||
<LComments>1</LComments>
|
||||
<LGenerateSymbols>1</LGenerateSymbols>
|
||||
<LLibSym>1</LLibSym>
|
||||
<LLines>1</LLines>
|
||||
<LLocSym>1</LLocSym>
|
||||
<LPubSym>1</LPubSym>
|
||||
<LXref>0</LXref>
|
||||
<LExpSel>0</LExpSel>
|
||||
</OPTXL>
|
||||
<OPTFL>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<IsCurrentTarget>1</IsCurrentTarget>
|
||||
</OPTFL>
|
||||
<CpuCode>18</CpuCode>
|
||||
<DebugOpt>
|
||||
<uSim>0</uSim>
|
||||
<uTrg>1</uTrg>
|
||||
<sLdApp>1</sLdApp>
|
||||
<sGomain>1</sGomain>
|
||||
<sRbreak>1</sRbreak>
|
||||
<sRwatch>1</sRwatch>
|
||||
<sRmem>1</sRmem>
|
||||
<sRfunc>1</sRfunc>
|
||||
<sRbox>1</sRbox>
|
||||
<tLdApp>1</tLdApp>
|
||||
<tGomain>1</tGomain>
|
||||
<tRbreak>1</tRbreak>
|
||||
<tRwatch>1</tRwatch>
|
||||
<tRmem>1</tRmem>
|
||||
<tRfunc>1</tRfunc>
|
||||
<tRbox>1</tRbox>
|
||||
<tRtrace>1</tRtrace>
|
||||
<sRSysVw>1</sRSysVw>
|
||||
<tRSysVw>1</tRSysVw>
|
||||
<sRunDeb>0</sRunDeb>
|
||||
<sLrtime>0</sLrtime>
|
||||
<bEvRecOn>1</bEvRecOn>
|
||||
<bSchkAxf>0</bSchkAxf>
|
||||
<bTchkAxf>0</bTchkAxf>
|
||||
<nTsel>6</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
<sDlgPa></sDlgPa>
|
||||
<sIfile></sIfile>
|
||||
<tDll></tDll>
|
||||
<tDllPa></tDllPa>
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile></tIfile>
|
||||
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>UL2CM3</Key>
|
||||
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_128 -FL020000 -FS08000000 -FP0($$Device:STM32F103CB$Flash\STM32F10x_128.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||
<Name>-U002400343233511639363634 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103CB$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 -WK0-R0</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ARMRTXEVENTFLAGS</Key>
|
||||
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGTARM</Key>
|
||||
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ARMDBGFLAGS</Key>
|
||||
<Name></Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>(105=-1,-1,-1,-1,0)</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>sens</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>MB_DATA,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>2</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>temp_sense</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>3</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>roms</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>4</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>state</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>5</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>last_page_addr</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>6</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>\\john103C6T6\../EEPROM_Emul/src/flash_ring.c\buffer_write_record\record_addr</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>7</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>record</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>8</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>flash_buff</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>9</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>new_record</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>10</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>state</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>11</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>htim</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>12</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>sens[i].set_temp</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<WatchWindow2>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>resolution</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>hmodbus1</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
<WinNumber>1</WinNumber>
|
||||
<SubType>0</SubType>
|
||||
<ItemText>0x0800f800</ItemText>
|
||||
<AccSizeX>0</AccSizeX>
|
||||
</Mm>
|
||||
</MemoryWindow1>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>1</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>1</viewmode>
|
||||
<vrSel>0</vrSel>
|
||||
<aSym>0</aSym>
|
||||
<aTbox>0</aTbox>
|
||||
<AscS1>0</AscS1>
|
||||
<AscS2>0</AscS2>
|
||||
<AscS3>0</AscS3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>0</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
<StkLoc>1</StkLoc>
|
||||
<TrcWin>0</TrcWin>
|
||||
<newCpu>0</newCpu>
|
||||
<uProt>0</uProt>
|
||||
</DebugFlag>
|
||||
<LintExecutable></LintExecutable>
|
||||
<LintConfigFile></LintConfigFile>
|
||||
<bLintAuto>0</bLintAuto>
|
||||
<bAutoGenD>0</bAutoGenD>
|
||||
<LntExFlags>0</LntExFlags>
|
||||
<pMisraName></pMisraName>
|
||||
<pszMrule></pszMrule>
|
||||
<pSingCmds></pSingCmds>
|
||||
<pMultCmds></pMultCmds>
|
||||
<pMisraNamep></pMisraNamep>
|
||||
<pszMrulep></pszMrulep>
|
||||
<pSingCmdsp></pSingCmdsp>
|
||||
<pMultCmdsp></pMultCmdsp>
|
||||
<SystemViewers>
|
||||
<Entry>
|
||||
<Name>System Viewer\FLASH</Name>
|
||||
<WinId>35904</WinId>
|
||||
</Entry>
|
||||
<Entry>
|
||||
<Name>System Viewer\GPIOB</Name>
|
||||
<WinId>35900</WinId>
|
||||
</Entry>
|
||||
<Entry>
|
||||
<Name>System Viewer\GPIOC</Name>
|
||||
<WinId>35905</WinId>
|
||||
</Entry>
|
||||
</SystemViewers>
|
||||
<DebugDescription>
|
||||
<Enable>1</Enable>
|
||||
<EnableFlashSeq>0</EnableFlashSeq>
|
||||
<EnableLog>0</EnableLog>
|
||||
<Protocol>2</Protocol>
|
||||
<DbgClock>10000000</DbgClock>
|
||||
</DebugDescription>
|
||||
</TargetOption>
|
||||
</Target>
|
||||
|
||||
<Group>
|
||||
<GroupName>Application/MDK-ARM</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>1</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>.\startup_stm32f10x_md.s</PathWithFileName>
|
||||
<FilenameWithoutPath>startup_stm32f10x_md.s</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Application/User/Core</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>2</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Src\dallas_tools.c</PathWithFileName>
|
||||
<FilenameWithoutPath>dallas_tools.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Src\ds18b20_driver.c</PathWithFileName>
|
||||
<FilenameWithoutPath>ds18b20_driver.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Src\onewire.c</PathWithFileName>
|
||||
<FilenameWithoutPath>onewire.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Src\ow_port.c</PathWithFileName>
|
||||
<FilenameWithoutPath>ow_port.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/main.c</PathWithFileName>
|
||||
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/gpio.c</PathWithFileName>
|
||||
<FilenameWithoutPath>gpio.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/adc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>adc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/can.c</PathWithFileName>
|
||||
<FilenameWithoutPath>can.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/i2c.c</PathWithFileName>
|
||||
<FilenameWithoutPath>i2c.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/rtc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>rtc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/spi.c</PathWithFileName>
|
||||
<FilenameWithoutPath>spi.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/tim.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tim.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/usart.c</PathWithFileName>
|
||||
<FilenameWithoutPath>usart.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/stm32f1xx_it.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_it.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/stm32f1xx_hal_msp.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_msp.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/stm32f1xx_hal_timebase_tim.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_timebase_tim.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\EEPROM_Emul\src\flash_ring.c</PathWithFileName>
|
||||
<FilenameWithoutPath>flash_ring.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Drivers/STM32F1xx_HAL_Driver</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_gpio_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_tim.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_tim_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_adc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_adc_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rcc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rcc_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_gpio.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_dma.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_cortex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_pwr.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_flash.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_flash_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_exti.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_can.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_i2c.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rtc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_rtc_ex.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_spi.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>39</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</PathWithFileName>
|
||||
<FilenameWithoutPath>stm32f1xx_hal_uart.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Drivers/CMSIS</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>40</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>../Core/Src/system_stm32f1xx.c</PathWithFileName>
|
||||
<FilenameWithoutPath>system_stm32f1xx.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>modbus</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>41</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\__crc_algs.c</PathWithFileName>
|
||||
<FilenameWithoutPath>__crc_algs.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>42</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\__modbus_compat.c</PathWithFileName>
|
||||
<FilenameWithoutPath>__modbus_compat.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>43</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>44</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_coils.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_coils.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>45</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_core.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_core.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>46</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_devid.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_devid.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>47</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_diag.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_diag.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>48</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_holdregs.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_holdregs.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>49</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_inputregs.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_inputregs.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>50</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_master.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_master.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>51</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\modbus_slave.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_slave.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>52</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\core\STM32_Modbus\Src\rs_message.c</PathWithFileName>
|
||||
<FilenameWithoutPath>rs_message.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>53</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Modbus\modbus_data.c</PathWithFileName>
|
||||
<FilenameWithoutPath>modbus_data.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::CMSIS Driver</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::Compiler</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
||||
@@ -1,1341 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
|
||||
|
||||
<SchemaVersion>2.1</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Targets>
|
||||
<Target>
|
||||
<TargetName>john103C6T6</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pArmCC>6220000::V6.22::ARMCLANG</pArmCC>
|
||||
<pCCUsed>6220000::V6.22::ARMCLANG</pCCUsed>
|
||||
<uAC6>1</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F103CB</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F1xx_DFP.2.4.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00020000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103CB$Flash\STM32F10x_128.FLM))</FlashDriverDll>
|
||||
<DeviceId>0</DeviceId>
|
||||
<RegisterFile>$$Device:STM32F103CB$Device\Include\stm32f10x.h</RegisterFile>
|
||||
<MemoryEnv></MemoryEnv>
|
||||
<Cmp></Cmp>
|
||||
<Asm></Asm>
|
||||
<Linker></Linker>
|
||||
<OHString></OHString>
|
||||
<InfinionOptionDll></InfinionOptionDll>
|
||||
<SLE66CMisc></SLE66CMisc>
|
||||
<SLE66AMisc></SLE66AMisc>
|
||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||
<SFDFile>$$Device:STM32F103CB$SVD\STM32F103xx.svd</SFDFile>
|
||||
<bCustSvd>0</bCustSvd>
|
||||
<UseEnv>0</UseEnv>
|
||||
<BinPath></BinPath>
|
||||
<IncludePath></IncludePath>
|
||||
<LibPath></LibPath>
|
||||
<RegisterFilePath></RegisterFilePath>
|
||||
<DBRegisterFilePath></DBRegisterFilePath>
|
||||
<TargetStatus>
|
||||
<Error>0</Error>
|
||||
<ExitCodeStop>0</ExitCodeStop>
|
||||
<ButtonStop>0</ButtonStop>
|
||||
<NotGenerated>0</NotGenerated>
|
||||
<InvalidFlash>1</InvalidFlash>
|
||||
</TargetStatus>
|
||||
<OutputDirectory>john103C6T6\</OutputDirectory>
|
||||
<OutputName>john103C6T6</OutputName>
|
||||
<CreateExecutable>1</CreateExecutable>
|
||||
<CreateLib>0</CreateLib>
|
||||
<CreateHexFile>1</CreateHexFile>
|
||||
<DebugInformation>1</DebugInformation>
|
||||
<BrowseInformation>1</BrowseInformation>
|
||||
<ListingPath>C:\Users\z\Documents\</ListingPath>
|
||||
<HexFormatSelection>1</HexFormatSelection>
|
||||
<Merge32K>0</Merge32K>
|
||||
<CreateBatchFile>0</CreateBatchFile>
|
||||
<BeforeCompile>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopU1X>0</nStopU1X>
|
||||
<nStopU2X>0</nStopU2X>
|
||||
</BeforeCompile>
|
||||
<BeforeMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopB1X>0</nStopB1X>
|
||||
<nStopB2X>0</nStopB2X>
|
||||
</BeforeMake>
|
||||
<AfterMake>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name></UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||
<nStopA1X>0</nStopA1X>
|
||||
<nStopA2X>0</nStopA2X>
|
||||
</AfterMake>
|
||||
<SelectedForBatchBuild>1</SelectedForBatchBuild>
|
||||
<SVCSIdString></SVCSIdString>
|
||||
</TargetCommonOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>0</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>0</AlwaysBuild>
|
||||
<GenerateAssemblyFile>0</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>0</AssembleAssemblyFile>
|
||||
<PublicsOnly>0</PublicsOnly>
|
||||
<StopOnExitCode>3</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>0</ComprImg>
|
||||
</CommonProperty>
|
||||
<DllOption>
|
||||
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||
<SimDllArguments> -REMAP</SimDllArguments>
|
||||
<SimDlgDll>DCM.DLL</SimDlgDll>
|
||||
<SimDlgDllArguments>-pCM3</SimDlgDllArguments>
|
||||
<TargetDllName>SARMCM3.DLL</TargetDllName>
|
||||
<TargetDllArguments></TargetDllArguments>
|
||||
<TargetDlgDll>TCM.DLL</TargetDlgDll>
|
||||
<TargetDlgDllArguments>-pCM3</TargetDlgDllArguments>
|
||||
</DllOption>
|
||||
<DebugOption>
|
||||
<OPTHX>
|
||||
<HexSelection>1</HexSelection>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
<Oh166RecLen>16</Oh166RecLen>
|
||||
</OPTHX>
|
||||
</DebugOption>
|
||||
<Utilities>
|
||||
<Flash1>
|
||||
<UseTargetDll>1</UseTargetDll>
|
||||
<UseExternalTool>0</UseExternalTool>
|
||||
<RunIndependent>0</RunIndependent>
|
||||
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
||||
<Capability>1</Capability>
|
||||
<DriverSelection>4096</DriverSelection>
|
||||
</Flash1>
|
||||
<bUseTDR>1</bUseTDR>
|
||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||
<Flash3></Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
<pFcarmGrp></pFcarmGrp>
|
||||
<pFcArmRoot></pFcArmRoot>
|
||||
<FcArmLst>0</FcArmLst>
|
||||
</Utilities>
|
||||
<TargetArmAds>
|
||||
<ArmAdsMisc>
|
||||
<GenerateListings>0</GenerateListings>
|
||||
<asHll>1</asHll>
|
||||
<asAsm>1</asAsm>
|
||||
<asMacX>1</asMacX>
|
||||
<asSyms>1</asSyms>
|
||||
<asFals>1</asFals>
|
||||
<asDbgD>1</asDbgD>
|
||||
<asForm>1</asForm>
|
||||
<ldLst>0</ldLst>
|
||||
<ldmm>1</ldmm>
|
||||
<ldXref>1</ldXref>
|
||||
<BigEnd>0</BigEnd>
|
||||
<AdsALst>0</AdsALst>
|
||||
<AdsACrf>1</AdsACrf>
|
||||
<AdsANop>0</AdsANop>
|
||||
<AdsANot>0</AdsANot>
|
||||
<AdsLLst>1</AdsLLst>
|
||||
<AdsLmap>1</AdsLmap>
|
||||
<AdsLcgr>1</AdsLcgr>
|
||||
<AdsLsym>1</AdsLsym>
|
||||
<AdsLszi>1</AdsLszi>
|
||||
<AdsLtoi>1</AdsLtoi>
|
||||
<AdsLsun>1</AdsLsun>
|
||||
<AdsLven>1</AdsLven>
|
||||
<AdsLsxf>1</AdsLsxf>
|
||||
<RvctClst>0</RvctClst>
|
||||
<GenPPlst>0</GenPPlst>
|
||||
<AdsCpuType>"Cortex-M3"</AdsCpuType>
|
||||
<RvctDeviceName></RvctDeviceName>
|
||||
<mOS>0</mOS>
|
||||
<uocRom>0</uocRom>
|
||||
<uocRam>0</uocRam>
|
||||
<hadIROM>1</hadIROM>
|
||||
<hadIRAM>1</hadIRAM>
|
||||
<hadXRAM>0</hadXRAM>
|
||||
<uocXRam>0</uocXRam>
|
||||
<RvdsVP>0</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<nBranchProt>0</nBranchProt>
|
||||
<hadIRAM2>0</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
<useUlib>0</useUlib>
|
||||
<EndSel>0</EndSel>
|
||||
<uLtcg>0</uLtcg>
|
||||
<nSecure>0</nSecure>
|
||||
<RoSelD>3</RoSelD>
|
||||
<RwSelD>3</RwSelD>
|
||||
<CodeSel>0</CodeSel>
|
||||
<OptFeed>0</OptFeed>
|
||||
<NoZi1>0</NoZi1>
|
||||
<NoZi2>0</NoZi2>
|
||||
<NoZi3>0</NoZi3>
|
||||
<NoZi4>0</NoZi4>
|
||||
<NoZi5>0</NoZi5>
|
||||
<Ro1Chk>0</Ro1Chk>
|
||||
<Ro2Chk>0</Ro2Chk>
|
||||
<Ro3Chk>0</Ro3Chk>
|
||||
<Ir1Chk>1</Ir1Chk>
|
||||
<Ir2Chk>0</Ir2Chk>
|
||||
<Ra1Chk>0</Ra1Chk>
|
||||
<Ra2Chk>0</Ra2Chk>
|
||||
<Ra3Chk>0</Ra3Chk>
|
||||
<Im1Chk>1</Im1Chk>
|
||||
<Im2Chk>0</Im2Chk>
|
||||
<OnChipMemories>
|
||||
<Ocm1>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm1>
|
||||
<Ocm2>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm2>
|
||||
<Ocm3>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm3>
|
||||
<Ocm4>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm4>
|
||||
<Ocm5>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm5>
|
||||
<Ocm6>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</Ocm6>
|
||||
<IRAM>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x20000000</StartAddress>
|
||||
<Size>0x5000</Size>
|
||||
</IRAM>
|
||||
<IROM>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x8000000</StartAddress>
|
||||
<Size>0x20000</Size>
|
||||
</IROM>
|
||||
<XRAM>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</XRAM>
|
||||
<OCR_RVCT1>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT1>
|
||||
<OCR_RVCT2>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT2>
|
||||
<OCR_RVCT3>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT3>
|
||||
<OCR_RVCT4>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x8000000</StartAddress>
|
||||
<Size>0x20000</Size>
|
||||
</OCR_RVCT4>
|
||||
<OCR_RVCT5>
|
||||
<Type>1</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT5>
|
||||
<OCR_RVCT6>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT6>
|
||||
<OCR_RVCT7>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT7>
|
||||
<OCR_RVCT8>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT8>
|
||||
<OCR_RVCT9>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x20000000</StartAddress>
|
||||
<Size>0x5000</Size>
|
||||
</OCR_RVCT9>
|
||||
<OCR_RVCT10>
|
||||
<Type>0</Type>
|
||||
<StartAddress>0x0</StartAddress>
|
||||
<Size>0x0</Size>
|
||||
</OCR_RVCT10>
|
||||
</OnChipMemories>
|
||||
<RvctStartVector></RvctStartVector>
|
||||
</ArmAdsMisc>
|
||||
<Cads>
|
||||
<interw>1</interw>
|
||||
<Optim>1</Optim>
|
||||
<oTime>0</oTime>
|
||||
<SplitLS>0</SplitLS>
|
||||
<OneElfS>1</OneElfS>
|
||||
<Strict>0</Strict>
|
||||
<EnumInt>0</EnumInt>
|
||||
<PlainCh>0</PlainCh>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<wLevel>3</wLevel>
|
||||
<uThumb>0</uThumb>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<uC99>1</uC99>
|
||||
<uGnu>0</uGnu>
|
||||
<useXO>0</useXO>
|
||||
<v6Lang>5</v6Lang>
|
||||
<v6LangP>5</v6LangP>
|
||||
<vShortEn>1</vShortEn>
|
||||
<vShortWch>1</vShortWch>
|
||||
<v6Lto>0</v6Lto>
|
||||
<v6WtE>0</v6WtE>
|
||||
<v6Rtti>0</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define>USE_HAL_DRIVER,STM32F103xB</Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../Modbus;..\EEPROM_Emul\lib;..\..\core\STM32_Modbus\Inc;..\EEPROM_Emul\lib</IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
<interw>1</interw>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<thumb>0</thumb>
|
||||
<SplitLS>0</SplitLS>
|
||||
<SwStkChk>0</SwStkChk>
|
||||
<NoWarn>0</NoWarn>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<useXO>0</useXO>
|
||||
<ClangAsOpt>1</ClangAsOpt>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Aads>
|
||||
<LDads>
|
||||
<umfTarg>1</umfTarg>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<noStLib>0</noStLib>
|
||||
<RepFail>1</RepFail>
|
||||
<useFile>0</useFile>
|
||||
<TextAddressRange></TextAddressRange>
|
||||
<DataAddressRange></DataAddressRange>
|
||||
<pXoBase></pXoBase>
|
||||
<ScatterFile></ScatterFile>
|
||||
<IncludeLibs></IncludeLibs>
|
||||
<IncludeLibsPath></IncludeLibsPath>
|
||||
<Misc></Misc>
|
||||
<LinkerInputFile></LinkerInputFile>
|
||||
<DisabledWarnings></DisabledWarnings>
|
||||
</LDads>
|
||||
</TargetArmAds>
|
||||
</TargetOption>
|
||||
<Groups>
|
||||
<Group>
|
||||
<GroupName>Application/MDK-ARM</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>startup_stm32f10x_md.s</FileName>
|
||||
<FileType>2</FileType>
|
||||
<FilePath>.\startup_stm32f10x_md.s</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Application/User/Core</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>dallas_tools.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Core\Src\dallas_tools.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ds18b20_driver.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Core\Src\ds18b20_driver.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>onewire.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Core\Src\onewire.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ow_port.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Core\Src\ow_port.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>main.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/main.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>gpio.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/gpio.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>adc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/adc.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>can.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/can.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>i2c.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/i2c.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>rtc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/rtc.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>spi.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/spi.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tim.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/tim.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>usart.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/usart.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_it.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/stm32f1xx_it.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_msp.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/stm32f1xx_hal_msp.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_timebase_tim.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/stm32f1xx_hal_timebase_tim.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>flash_ring.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\EEPROM_Emul\src\flash_ring.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Drivers/STM32F1xx_HAL_Driver</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_gpio_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_tim.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_tim_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_adc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_adc_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_rcc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_rcc_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_gpio.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_dma.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_cortex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_pwr.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_flash.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_flash_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_exti.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_can.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_i2c.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_rtc.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_rtc_ex.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rtc_ex.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_spi.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>1</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>stm32f1xx_hal_uart.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Drivers/CMSIS</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>system_stm32f1xx.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>../Core/Src/system_stm32f1xx.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>modbus</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>__crc_algs.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\__crc_algs.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>__modbus_compat.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\__modbus_compat.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_coils.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_coils.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_core.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_core.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_devid.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_devid.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_diag.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_diag.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_holdregs.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_holdregs.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_inputregs.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_inputregs.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_master.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_master.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_slave.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\modbus_slave.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>rs_message.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\core\STM32_Modbus\Src\rs_message.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>modbus_data.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Modbus\modbus_data.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::CMSIS Driver</GroupName>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::Compiler</GroupName>
|
||||
</Group>
|
||||
</Groups>
|
||||
</Target>
|
||||
</Targets>
|
||||
|
||||
<RTE>
|
||||
<apis>
|
||||
<api Capiversion="2.3.0" Cclass="CMSIS Driver" Cgroup="Flash" exclusive="0">
|
||||
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="john103C6T6"/>
|
||||
</targetInfos>
|
||||
</api>
|
||||
</apis>
|
||||
<components>
|
||||
<component Capiversion="2.3.0" Cclass="CMSIS Driver" Cgroup="Flash" Csub="Custom" Cvendor="ARM" Cversion="1.0.0" custom="1">
|
||||
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="john103C6T6"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="6.1.0" condition="ARMv6_7_8-M Device">
|
||||
<package name="CMSIS" schemaVersion="1.7.36" url="https://www.keil.com/pack/" vendor="ARM" version="6.1.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="john103C6T6"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="I/O" Csub="STDOUT" Cvariant="Breakpoint" Cvendor="Keil" Cversion="1.2.0" condition="ARMCC Cortex-M">
|
||||
<package name="ARM_Compiler" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="Keil" version="1.7.2"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="john103C6T6"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
</components>
|
||||
<files/>
|
||||
</RTE>
|
||||
|
||||
<LayerInfo>
|
||||
<Layers>
|
||||
<Layer>
|
||||
<LayName>john103C6T6</LayName>
|
||||
<LayPrjMark>1</LayPrjMark>
|
||||
</Layer>
|
||||
</Layers>
|
||||
</LayerInfo>
|
||||
|
||||
</Project>
|
||||
@@ -1,71 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file modbus_config.h
|
||||
* @brief Конфигурационные параметры Modbus устройства
|
||||
******************************************************************************
|
||||
@addtogroup MODBUS_CONFIGS Modbus configs
|
||||
@ingroup MODBUS
|
||||
@brief Конфигурация библиотеки
|
||||
@{
|
||||
******************************************************************************
|
||||
* @details
|
||||
Файл содержит настройки для работы Modbus:
|
||||
- Подключение библиотек контроллера
|
||||
- ID устройства и таймауты
|
||||
- Строковые идентификаторы (Vendor, Product, Revision)
|
||||
- Настройки периферии (UART, TIMER)
|
||||
- Подключение модулей Modbus
|
||||
- Опциональные функции (переключение команд 0x03/0x04)
|
||||
******************************************************************************/
|
||||
#ifndef _MODBUS_CONFIG_H_
|
||||
#define _MODBUS_CONFIG_H_
|
||||
#include "stm32f1xx_hal.h"
|
||||
|
||||
// Общие параметры
|
||||
#define MODBUS_DEVICE_ID 3 ///< Адрес устройства в сети Modbus
|
||||
#define MODBUS_TIMEOUT 5000 ///< Таймаут в тиках таймера
|
||||
|
||||
// Строковые идентификаторы устройства
|
||||
#define MODBUS_VENDOR_NAME "NIO-12"
|
||||
#define MODBUS_PRODUCT_CODE ""
|
||||
#define MODBUS_REVISION ""
|
||||
#define MODBUS_VENDOR_URL ""
|
||||
#define MODBUS_PRODUCT_NAME ""
|
||||
#define MODBUS_MODEL_NAME ""
|
||||
#define MODBUS_USER_APPLICATION_NAME ""
|
||||
|
||||
#define MODBUS_NUMB_OF_USEROBJECTS 0 ///< Количество пользовательских объектов
|
||||
#define MODBUS_USEROBJECT_0_NAME "" ///< Строка пользовательского идентификатора 0. По аналогии можно определить строки до <=128 USEROBJECT
|
||||
|
||||
// Периферия (опционально)
|
||||
#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart
|
||||
#define mb_htim htim2 ///< Удобный дефайн для модбасовского таймера
|
||||
//#define RS_EnableReceive() ///< Функция изменения направления передачи на ПРИЕМ для RS-485
|
||||
//#define RS_EnableTransmit() ///< Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485
|
||||
|
||||
|
||||
// Модули modbus
|
||||
#define MODBUS_ENABLE_SLAVE ///< Включить обработку СЛЕЙВ режима
|
||||
//#define MODBUS_ENABLE_MASTER ///< Включить обработку МАСТЕР режима
|
||||
|
||||
#define MODBUS_ENABLE_COILS ///< Включить обработку коилов
|
||||
#define MODBUS_ENABLE_HOLDINGS ///< Включить обработку регистров хранения
|
||||
#define MODBUS_ENABLE_INPUTS ///< Включить обработку входных регистров
|
||||
#define MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///< Включить обработку идентификаторы устройства
|
||||
#define MODBUS_ENABLE_DIAGNOSTICS ///< Включить обработку диагностики модбас
|
||||
|
||||
//#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU
|
||||
|
||||
/**
|
||||
* @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей)
|
||||
* @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS
|
||||
* Поэтому чтобы считывать Input Regs - надо поменять их местами.
|
||||
*/
|
||||
//#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////---CALC DEFINES---//////////////////////////
|
||||
|
||||
|
||||
|
||||
#endif //_MODBUS_CONFIG_H_
|
||||
@@ -1,284 +0,0 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file modbus_data.h
|
||||
* @brief Заголовочный файл с описанием даты MODBUS.
|
||||
* @details Данный файл необходимо подключается в rs_message.h. После rs_message.h
|
||||
* подключается к основному проекту.
|
||||
*
|
||||
* @defgroup MODBUS_DATA
|
||||
* @ingroup MODBUS
|
||||
* @brief Modbus data description
|
||||
*
|
||||
*************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef _MODBUS_DATA_H_
|
||||
#define _MODBUS_DATA_H_
|
||||
|
||||
|
||||
// DEFINES FOR INPUT REGISTERS ARRAYS
|
||||
#define R_INPUT_ADDR 0
|
||||
#define R_INPUT_QNT 2000
|
||||
|
||||
// DEFINES FOR HOLDING REGISTERS ARRAYS
|
||||
#define R_HOLDING_ADDR 0
|
||||
#define R_HOLDING_QNT 2000
|
||||
|
||||
// DEFINES FOR COIL ARRAYS
|
||||
#define C_CONTROL_ADDR 0
|
||||
#define C_CONTROL_QNT 1000
|
||||
|
||||
|
||||
|
||||
#include "stdint.h"
|
||||
#include "ds18b20_driver.h"
|
||||
#include "PROJ_setup.h"
|
||||
|
||||
|
||||
//--------------DEFINES FOR REGISTERS---------------
|
||||
// DEFINES FOR ARRAYS
|
||||
/**
|
||||
* @addtogroup MODBUS_DATA_RERISTERS_DEFINES
|
||||
* @ingroup MODBUS_DATA
|
||||
* @brief Defines for registers
|
||||
Структура дефайна адресов
|
||||
@verbatim
|
||||
Для массивов регистров:
|
||||
R_<NAME_ARRAY>_ADDR - модбас адресс первого регистра в массиве
|
||||
R_<NAME_ARRAY>_QNT - количество регистров в массиве
|
||||
|
||||
При добавлении новых массивов регистров, необходимо их добавить в функцию MB_DefineRegistersAddress
|
||||
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, R_<NEW_ARRAY>_ADDR, R_<NEW_ARRAY>_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pRegs = MB_Set_Register_Ptr(&<NEW_ARRAY>, Addr); // начало регистров хранения/входных
|
||||
}
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Регистры хранения
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Определить размер структуры в регистрах модбас (16-бит слова)
|
||||
*/
|
||||
#define mb_sizeof(_struct_) (sizeof(_struct_)/sizeof(uint16_t))
|
||||
/**
|
||||
* @brief Определить количество резервных байт для выравнивания
|
||||
* @details Выравнивает так, чтобы количество регистров в _struct_ и reserved равнялось _align_.
|
||||
*
|
||||
*/
|
||||
#define mb_fill_rsv(_align_, _struct_) ((_align_ > mb_sizeof(_struct_)) ? (_align_ - mb_sizeof(_struct_)) : 0)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef __PACKED_STRUCT//MB_DataInRegsTypeDef
|
||||
{
|
||||
|
||||
uint16_t sens_Temp[MAX_SENSE];
|
||||
uint16_t reserve[mb_fill_rsv(1000, uint16_t[MAX_SENSE])];
|
||||
DS18B20_Drv_t ID;
|
||||
uint16_t reserve1[mb_fill_rsv(200, DS18B20_Drv_t)];
|
||||
uint16_t num_Tsens;
|
||||
|
||||
|
||||
} MB_DataInRegsTypeDef;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Входные регистры
|
||||
*/
|
||||
typedef __PACKED_STRUCT //MB_DataInRegsTypeDef
|
||||
{
|
||||
uint16_t set_Temp[MAX_SENSE];
|
||||
uint16_t reserve[mb_fill_rsv(100, uint16_t[MAX_SENSE])];
|
||||
uint16_t set_hyst[MAX_SENSE];
|
||||
uint16_t reserve1[mb_fill_rsv(100, uint16_t[MAX_SENSE])];
|
||||
} MB_DataHoldRegsTypeDef;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** MODBUS_DATA_RERISTERS_DEFINES
|
||||
* @}
|
||||
*/
|
||||
|
||||
//----------------DEFINES FOR COILS-----------------
|
||||
/**
|
||||
* @addtogroup MODBUS_DATA_COILS_DEFINES
|
||||
* @ingroup MODBUS_DATA
|
||||
* @brief Defines for coils
|
||||
@verbatim
|
||||
Структура дефайна
|
||||
Для массивов коилов:
|
||||
C_<NAME_ARRAY>_ADDR - модбас адресс первого коила в массиве
|
||||
C_<NAME_ARRAY>_QNT - количество коилов в массиве (минимум 16)
|
||||
|
||||
При добавлении новых массивов коилов, необходимо их добавить в функцию MB_DefineCoilsAddress
|
||||
|
||||
if(MB_Check_Address_For_Arr(Addr, Qnt, C_<NEW_ARRAY>_ADDR, C_<NEW_ARRAY>_QNT) == NO_ERRORS)
|
||||
{
|
||||
*pCoils = MB_Set_Coil_Reg_Ptr(&<NEW_ARRAY>, Addr);
|
||||
}
|
||||
|
||||
@endverbatim
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Коилы
|
||||
* @details Желательно с помощью reserved делать стркутуру кратной 16-битам
|
||||
*/
|
||||
typedef union
|
||||
{
|
||||
__PACKED_STRUCT
|
||||
{
|
||||
unsigned state_val_01: 1;
|
||||
unsigned state_val_02: 1;
|
||||
unsigned state_val_03: 1;
|
||||
unsigned state_val_04: 1;
|
||||
unsigned state_val_05: 1;
|
||||
unsigned state_val_06: 1;
|
||||
unsigned state_val_07: 1;
|
||||
unsigned state_val_08: 1;
|
||||
unsigned state_val_09: 1;
|
||||
unsigned state_val_10: 1;
|
||||
unsigned state_val_11: 1;
|
||||
unsigned state_val_12: 1;
|
||||
unsigned state_val_13: 1;
|
||||
unsigned state_val_14: 1;
|
||||
unsigned state_val_15: 1;
|
||||
unsigned state_val_16: 1;
|
||||
} state_val_bit;
|
||||
uint16_t all;
|
||||
|
||||
|
||||
} word;
|
||||
typedef union
|
||||
{
|
||||
__PACKED_STRUCT
|
||||
{
|
||||
unsigned Temp1_relay_isOn : 1;
|
||||
unsigned Temp2_relay_isOn : 1;
|
||||
unsigned Temp3_relay_isOn : 1;
|
||||
unsigned Temp4_relay_isOn : 1;
|
||||
unsigned Temp5_relay_isOn : 1;
|
||||
unsigned Temp6_relay_isOn : 1;
|
||||
unsigned Temp7_relay_isOn : 1;
|
||||
unsigned Temp8_relay_isOn : 1;
|
||||
unsigned Temp9_relay_isOn : 1;
|
||||
unsigned Temp10_relay_isOn : 1;
|
||||
unsigned Temp11_relay_isOn : 1;
|
||||
unsigned Temp12_relay_isOn : 1;
|
||||
unsigned Temp13_relay_isOn : 1;
|
||||
unsigned Temp14_relay_isOn : 1;
|
||||
unsigned Temp15_relay_isOn : 1;
|
||||
unsigned Temp16_relay_isOn : 1;
|
||||
|
||||
|
||||
} state_val_bit;
|
||||
uint16_t all;
|
||||
|
||||
|
||||
} RELAY_Struct;
|
||||
|
||||
typedef union
|
||||
{
|
||||
__PACKED_STRUCT
|
||||
{
|
||||
unsigned Temp1_isConnected : 1;
|
||||
unsigned Temp2_isConnected : 1;
|
||||
unsigned Temp3_isConnected : 1;
|
||||
unsigned Temp4_isConnected : 1;
|
||||
unsigned Temp5_isConnected : 1;
|
||||
unsigned Temp6_isConnected : 1;
|
||||
unsigned Temp7_isConnected : 1;
|
||||
unsigned Temp8_isConnected : 1;
|
||||
unsigned Temp9_isConnected : 1;
|
||||
unsigned Temp10_isConnected : 1;
|
||||
unsigned Temp11_isConnected : 1;
|
||||
unsigned Temp12_isConnected : 1;
|
||||
unsigned Temp13_isConnected : 1;
|
||||
unsigned Temp14_isConnected : 1;
|
||||
unsigned Temp15_isConnected : 1;
|
||||
unsigned Temp16_isConnected : 1;
|
||||
|
||||
} state_val_bit;
|
||||
uint16_t all;
|
||||
|
||||
|
||||
} STATUS_TSENS;
|
||||
|
||||
|
||||
typedef __PACKED_STRUCT
|
||||
{
|
||||
int temp ;
|
||||
unsigned Temp_relay_on : 1;
|
||||
unsigned Temp_relay_off : 1;
|
||||
unsigned is_connect: 1;
|
||||
|
||||
} Temp_sens;
|
||||
extern Temp_sens temp_sens ;
|
||||
|
||||
typedef __PACKED_STRUCT
|
||||
{
|
||||
|
||||
|
||||
|
||||
word coils[3]; //48
|
||||
uint16_t reserve_coils[mb_fill_rsv(128 / 16, word[3])];
|
||||
STATUS_TSENS status_tSens[MAX_SENSE / 16]; //32
|
||||
uint16_t reserve_status_tSens[mb_fill_rsv(128 / 16, STATUS_TSENS[MAX_SENSE / 16])];
|
||||
RELAY_Struct relay_struct_on; //16 ON
|
||||
uint16_t reserve_relay_struct_on[mb_fill_rsv(32 / 16, RELAY_Struct)];
|
||||
RELAY_Struct relay_struct_off; //16 OFF
|
||||
uint16_t reserve_relay_struct_off[mb_fill_rsv(32 / 16, RELAY_Struct)];
|
||||
uint16_t reserve3[mb_fill_rsv(80 / 16, RELAY_Struct)];
|
||||
|
||||
unsigned init_param: 1; //384
|
||||
unsigned init_Tsens: 1; //385
|
||||
unsigned Save_Param_to_Flash: 1; //386
|
||||
unsigned reserved2: 13;
|
||||
|
||||
} MB_DataCoilsTypeDef;
|
||||
|
||||
|
||||
|
||||
/** MODBUS_DATA_COILS_DEFINES
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
//-----------MODBUS DEVICE DATA SETTING-------------
|
||||
// MODBUS DATA STRUCTTURE
|
||||
/**
|
||||
* @brief Структура со всеми регистрами и коилами модбас
|
||||
* @ingroup MODBUS_DATA
|
||||
*/
|
||||
typedef struct // tester modbus data
|
||||
{
|
||||
MB_DataInRegsTypeDef InRegs; ///< Modbus input registers @ref MB_DataInRegsTypeDef
|
||||
|
||||
MB_DataCoilsTypeDef Coils; ///< Modbus coils @ref MB_DataCoilsTypeDef
|
||||
|
||||
MB_DataHoldRegsTypeDef HoldRegs; ///< Modbus holding registers @ref MB_DataHoldRegsTypeDef
|
||||
} MB_DataStructureTypeDef;
|
||||
extern MB_DataStructureTypeDef MB_DATA;
|
||||
|
||||
#endif //_MODBUS_DATA_H_
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
///////////////////////TEMP/OUTDATE/OTHER////////////////////
|
||||
@@ -1,264 +0,0 @@
|
||||
#MicroXplorer Configuration settings - do not modify
|
||||
ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_VREFINT
|
||||
ADC1.ContinuousConvMode=ENABLE
|
||||
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,master
|
||||
ADC1.NbrOfConversionFlag=1
|
||||
ADC1.Rank-0\#ChannelRegularConversion=1
|
||||
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||
ADC1.master=1
|
||||
CAD.formats=
|
||||
CAD.pinconfig=
|
||||
CAD.provider=
|
||||
CAN.CalculateBaudRate=749999
|
||||
CAN.CalculateTimeBit=1333
|
||||
CAN.CalculateTimeQuantum=444.44444444444446
|
||||
CAN.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate
|
||||
File.Version=6
|
||||
GPIO.groupedBy=Group By Peripherals
|
||||
KeepUserPlacement=false
|
||||
Mcu.CPN=STM32F103C6T6A
|
||||
Mcu.Family=STM32F1
|
||||
Mcu.IP0=ADC1
|
||||
Mcu.IP1=CAN
|
||||
Mcu.IP10=USART1
|
||||
Mcu.IP2=I2C1
|
||||
Mcu.IP3=NVIC
|
||||
Mcu.IP4=RCC
|
||||
Mcu.IP5=RTC
|
||||
Mcu.IP6=SPI1
|
||||
Mcu.IP7=SYS
|
||||
Mcu.IP8=TIM1
|
||||
Mcu.IP9=TIM2
|
||||
Mcu.IPNb=11
|
||||
Mcu.Name=STM32F103C(4-6)Tx
|
||||
Mcu.Package=LQFP48
|
||||
Mcu.Pin0=PC13-TAMPER-RTC
|
||||
Mcu.Pin1=PD0-OSC_IN
|
||||
Mcu.Pin10=PA7
|
||||
Mcu.Pin11=PB0
|
||||
Mcu.Pin12=PB1
|
||||
Mcu.Pin13=PB2
|
||||
Mcu.Pin14=PB10
|
||||
Mcu.Pin15=PB11
|
||||
Mcu.Pin16=PB12
|
||||
Mcu.Pin17=PB13
|
||||
Mcu.Pin18=PB14
|
||||
Mcu.Pin19=PB15
|
||||
Mcu.Pin2=PD1-OSC_OUT
|
||||
Mcu.Pin20=PA8
|
||||
Mcu.Pin21=PA9
|
||||
Mcu.Pin22=PA10
|
||||
Mcu.Pin23=PA11
|
||||
Mcu.Pin24=PA12
|
||||
Mcu.Pin25=PA13
|
||||
Mcu.Pin26=PA14
|
||||
Mcu.Pin27=PA15
|
||||
Mcu.Pin28=PB3
|
||||
Mcu.Pin29=PB4
|
||||
Mcu.Pin3=PA0-WKUP
|
||||
Mcu.Pin30=PB5
|
||||
Mcu.Pin31=PB6
|
||||
Mcu.Pin32=PB7
|
||||
Mcu.Pin33=PB8
|
||||
Mcu.Pin34=PB9
|
||||
Mcu.Pin35=VP_ADC1_TempSens_Input
|
||||
Mcu.Pin36=VP_ADC1_Vref_Input
|
||||
Mcu.Pin37=VP_RTC_VS_RTC_Activate
|
||||
Mcu.Pin38=VP_RTC_VS_RTC_Calendar
|
||||
Mcu.Pin39=VP_SYS_VS_tim3
|
||||
Mcu.Pin4=PA1
|
||||
Mcu.Pin40=VP_TIM1_VS_ClockSourceINT
|
||||
Mcu.Pin41=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin5=PA2
|
||||
Mcu.Pin6=PA3
|
||||
Mcu.Pin7=PA4
|
||||
Mcu.Pin8=PA5
|
||||
Mcu.Pin9=PA6
|
||||
Mcu.PinsNb=42
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
Mcu.UserName=STM32F103C6Tx
|
||||
MxCube.Version=6.15.0
|
||||
MxDb.Version=DB.6.0.150
|
||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.ForceEnableDMAVector=true
|
||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
||||
NVIC.RTC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
||||
NVIC.TIM1_BRK_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM1_CC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM1_TRG_COM_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM1_UP_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM3_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true
|
||||
NVIC.TimeBase=TIM3_IRQn
|
||||
NVIC.TimeBaseIP=TIM3
|
||||
NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
PA0-WKUP.Locked=true
|
||||
PA0-WKUP.Signal=GPIO_Input
|
||||
PA1.Locked=true
|
||||
PA1.Signal=GPIO_Output
|
||||
PA10.GPIOParameters=GPIO_Label
|
||||
PA10.GPIO_Label=Relay_dc5v
|
||||
PA10.Locked=true
|
||||
PA10.Signal=GPIO_Output
|
||||
PA11.Mode=CAN_Activate
|
||||
PA11.Signal=CAN_RX
|
||||
PA12.Mode=CAN_Activate
|
||||
PA12.Signal=CAN_TX
|
||||
PA13.Mode=Serial_Wire
|
||||
PA13.Signal=SYS_JTMS-SWDIO
|
||||
PA14.Mode=Serial_Wire
|
||||
PA14.Signal=SYS_JTCK-SWCLK
|
||||
PA15.GPIOParameters=GPIO_Label
|
||||
PA15.GPIO_Label=One_wire
|
||||
PA15.Locked=true
|
||||
PA15.Signal=GPIO_Output
|
||||
PA2.Locked=true
|
||||
PA2.Signal=GPIO_Output
|
||||
PA3.Locked=true
|
||||
PA3.Signal=GPIO_Output
|
||||
PA4.Locked=true
|
||||
PA4.Signal=GPIO_Output
|
||||
PA5.Locked=true
|
||||
PA5.Signal=GPIO_Output
|
||||
PA6.Locked=true
|
||||
PA6.Signal=GPIO_Output
|
||||
PA7.Locked=true
|
||||
PA7.Signal=GPIO_Output
|
||||
PA8.Locked=true
|
||||
PA8.Signal=GPIO_Output
|
||||
PA9.Locked=true
|
||||
PA9.Signal=GPIO_Output
|
||||
PB0.Locked=true
|
||||
PB0.Signal=GPIO_Output
|
||||
PB1.Locked=true
|
||||
PB1.Signal=GPIO_Output
|
||||
PB10.Locked=true
|
||||
PB10.Signal=GPIO_Output
|
||||
PB11.Locked=true
|
||||
PB11.Signal=GPIO_Output
|
||||
PB12.Locked=true
|
||||
PB12.Signal=GPIO_Output
|
||||
PB13.Locked=true
|
||||
PB13.Signal=GPIO_Output
|
||||
PB14.Locked=true
|
||||
PB14.Signal=GPIO_Output
|
||||
PB15.Locked=true
|
||||
PB15.Signal=GPIO_Output
|
||||
PB2.Locked=true
|
||||
PB2.Signal=GPIO_Output
|
||||
PB3.Mode=Full_Duplex_Master
|
||||
PB3.Signal=SPI1_SCK
|
||||
PB4.Mode=Full_Duplex_Master
|
||||
PB4.Signal=SPI1_MISO
|
||||
PB5.Mode=Full_Duplex_Master
|
||||
PB5.Signal=SPI1_MOSI
|
||||
PB6.Mode=Asynchronous
|
||||
PB6.Signal=USART1_TX
|
||||
PB7.Mode=Asynchronous
|
||||
PB7.Signal=USART1_RX
|
||||
PB8.Mode=I2C
|
||||
PB8.Signal=I2C1_SCL
|
||||
PB9.Mode=I2C
|
||||
PB9.Signal=I2C1_SDA
|
||||
PC13-TAMPER-RTC.Locked=true
|
||||
PC13-TAMPER-RTC.Signal=GPIO_Output
|
||||
PD0-OSC_IN.Mode=HSE-External-Oscillator
|
||||
PD0-OSC_IN.Signal=RCC_OSC_IN
|
||||
PD1-OSC_OUT.Mode=HSE-External-Oscillator
|
||||
PD1-OSC_OUT.Signal=RCC_OSC_OUT
|
||||
PinOutPanel.RotationAngle=0
|
||||
ProjectManager.AskForMigrate=true
|
||||
ProjectManager.BackupPrevious=false
|
||||
ProjectManager.CompilerLinker=GCC
|
||||
ProjectManager.CompilerOptimize=6
|
||||
ProjectManager.ComputerToolchain=false
|
||||
ProjectManager.CoupleFile=true
|
||||
ProjectManager.CustomerFirmwarePackage=
|
||||
ProjectManager.DefaultFWLocation=true
|
||||
ProjectManager.DeletePrevious=true
|
||||
ProjectManager.DeviceId=STM32F103C6Tx
|
||||
ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.8.6
|
||||
ProjectManager.FreePins=false
|
||||
ProjectManager.HalAssertFull=false
|
||||
ProjectManager.HeapSize=0x400
|
||||
ProjectManager.KeepUserCode=true
|
||||
ProjectManager.LastFirmware=true
|
||||
ProjectManager.LibraryCopy=1
|
||||
ProjectManager.MainLocation=Core/Src
|
||||
ProjectManager.NoMain=false
|
||||
ProjectManager.PreviousToolchain=
|
||||
ProjectManager.ProjectBuild=false
|
||||
ProjectManager.ProjectFileName=john103C6T6.ioc
|
||||
ProjectManager.ProjectName=john103C6T6
|
||||
ProjectManager.ProjectStructure=
|
||||
ProjectManager.RegisterCallBack=
|
||||
ProjectManager.StackSize=0x400
|
||||
ProjectManager.TargetToolchain=MDK-ARM V5.32
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UAScriptAfterPath=
|
||||
ProjectManager.UAScriptBeforePath=
|
||||
ProjectManager.UnderRoot=false
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_TIM1_Init-TIM1-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM2_Init-TIM2-false-HAL-true,6-MX_ADC1_Init-ADC1-false-HAL-true,7-MX_CAN_Init-CAN-false-HAL-true,8-MX_I2C1_Init-I2C1-false-HAL-true,9-MX_RTC_Init-RTC-false-HAL-true,10-MX_SPI1_Init-SPI1-false-HAL-true
|
||||
RCC.ADCFreqValue=12000000
|
||||
RCC.ADCPresc=RCC_ADCPCLK2_DIV6
|
||||
RCC.AHBFreq_Value=72000000
|
||||
RCC.APB1CLKDivider=RCC_HCLK_DIV2
|
||||
RCC.APB1Freq_Value=36000000
|
||||
RCC.APB1TimFreq_Value=72000000
|
||||
RCC.APB2Freq_Value=72000000
|
||||
RCC.APB2TimFreq_Value=72000000
|
||||
RCC.FCLKCortexFreq_Value=72000000
|
||||
RCC.FamilyName=M
|
||||
RCC.HCLKFreq_Value=72000000
|
||||
RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler,VCOOutput2Freq_Value
|
||||
RCC.MCOFreq_Value=72000000
|
||||
RCC.PLLCLKFreq_Value=72000000
|
||||
RCC.PLLMCOFreq_Value=36000000
|
||||
RCC.PLLMUL=RCC_PLL_MUL9
|
||||
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
|
||||
RCC.SYSCLKFreq_VALUE=72000000
|
||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||
RCC.TimSysFreq_Value=72000000
|
||||
RCC.USBFreq_Value=48000000
|
||||
RCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5
|
||||
RCC.VCOOutput2Freq_Value=8000000
|
||||
RTC.IPParameters=OutPut
|
||||
RTC.OutPut=RTC_OUTPUTSOURCE_SECOND
|
||||
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4
|
||||
SPI1.CalculateBaudRate=18.0 MBits/s
|
||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||
SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate
|
||||
SPI1.Mode=SPI_MODE_MASTER
|
||||
SPI1.VirtualType=VM_MASTER
|
||||
TIM1.IPParameters=Prescaler,Period
|
||||
TIM1.Period=65535
|
||||
TIM1.Prescaler=0
|
||||
TIM2.IPParameters=Prescaler,Period
|
||||
TIM2.Period=65535
|
||||
TIM2.Prescaler=7199
|
||||
USART1.IPParameters=VirtualMode
|
||||
USART1.VirtualMode=VM_ASYNC
|
||||
VP_ADC1_TempSens_Input.Mode=IN-TempSens
|
||||
VP_ADC1_TempSens_Input.Signal=ADC1_TempSens_Input
|
||||
VP_ADC1_Vref_Input.Mode=IN-Vrefint
|
||||
VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input
|
||||
VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
|
||||
VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
|
||||
VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
|
||||
VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
|
||||
VP_SYS_VS_tim3.Mode=TIM3
|
||||
VP_SYS_VS_tim3.Signal=SYS_VS_tim3
|
||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
||||
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||
board=custom
|
||||
78
john103C6T6NewVer/MCU_PINS.md
Normal file
78
john103C6T6NewVer/MCU_PINS.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Пины МК
|
||||
|
||||
Документ составлен по прошивке:
|
||||
|
||||
- `..\new rev\john103C8T6\john103C6T6.ioc`
|
||||
- `..\new rev\john103C8T6\Core\Inc\main.h`
|
||||
- `..\new rev\john103C8T6\Core\Src\gpio.c`
|
||||
- `..\new rev\john103C8T6\Core\Src\usart.c`
|
||||
- `..\new rev\john103C8T6\Core\Src\can.c`
|
||||
- `..\new rev\john103C8T6\Core\Src\i2c.c`
|
||||
- `..\new rev\john103C8T6\Core\Src\spi.c`
|
||||
- `..\new rev\john103C8T6\Core\Inc\ow_port.h`
|
||||
|
||||
МК: `STM32F103C8Tx`, корпус `LQFP48`.
|
||||
|
||||
## Основные интерфейсы
|
||||
|
||||
| Пин МК | Функция | Настройка | Назначение в проекте |
|
||||
|---|---|---|---|
|
||||
| `PB6` | `USART1_TX` | AF push-pull, remap USART1 | Modbus RTU slave TX |
|
||||
| `PB7` | `USART1_RX` | input, no pull, remap USART1 | Modbus RTU slave RX |
|
||||
| `PA2` | `USART2_TX` | AF push-pull | Modbus RTU master TX |
|
||||
| `PA3` | `USART2_RX` | input, no pull | Modbus RTU master RX |
|
||||
| `PA15` | `One_wire` | GPIO, динамически input/output | Шина 1-Wire для DS18B20 |
|
||||
| `PA10` | `Relay_dc5v` | GPIO output push-pull | Реле 5 В, управляется из Modbus coil `20` |
|
||||
| `PC13` | GPIO output | push-pull | Светодиод/индикация, используется в `led_blink()` |
|
||||
| `PA0` | GPIO input | no pull | Вход, назначение в коде не найдено |
|
||||
| `PA11` | `CAN_RX` | input | CAN RX |
|
||||
| `PA12` | `CAN_TX` | AF push-pull | CAN TX |
|
||||
| `PB8` | `I2C1_SCL` | AF open-drain, remap I2C1 | I2C1 SCL |
|
||||
| `PB9` | `I2C1_SDA` | AF open-drain, remap I2C1 | I2C1 SDA |
|
||||
| `PB3` | `SPI1_SCK` | AF push-pull, remap SPI1 | SPI1 SCK |
|
||||
| `PB4` | `SPI1_MISO` | input, no pull, remap SPI1 | SPI1 MISO |
|
||||
| `PB5` | `SPI1_MOSI` | AF push-pull, remap SPI1 | SPI1 MOSI |
|
||||
| `PA13` | `SWDIO` | Serial Wire | Отладка |
|
||||
| `PA14` | `SWCLK` | Serial Wire | Отладка |
|
||||
| `PD0` | `OSC_IN` | HSE oscillator | Внешний кварц |
|
||||
| `PD1` | `OSC_OUT` | HSE oscillator | Внешний кварц |
|
||||
|
||||
## GPIO output, сконфигурированные в `MX_GPIO_Init`
|
||||
|
||||
| Пин МК | Начальное состояние | Комментарий |
|
||||
|---|---:|---|
|
||||
| `PC13` | `RESET` | Индикация, мигает при старте через `led_blink(GPIOC, 13, ...)` |
|
||||
| `PA1` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PA4` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PA5` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PA6` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PA7` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PA8` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PA9` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PA10` | `RESET` | `Relay_dc5v`, в цикле main зависит от `MB_DATA.Coils.coils[1].state_val_bit.state_val_05` |
|
||||
| `PA15` | `RESET` | 1-Wire, затем драйвер меняет режим пина input/output |
|
||||
| `PB0` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PB1` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PB2` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PB10` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PB11` | `RESET` | Есть macro `GPIOB11_valve`, но прямой записи в `PB11` в текущем коде не найдено |
|
||||
| `PB12` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PB13` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PB14` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
| `PB15` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
|
||||
|
||||
## Периферия без внешнего пина
|
||||
|
||||
| Периферия | Настройка | Назначение |
|
||||
|---|---|---|
|
||||
| `TIM1` | internal clock, period `65535`, prescaler `0` | Тайминги 1-Wire, `OW_TIM` |
|
||||
| `TIM2` | internal clock, period `65535`, prescaler `7199` | Таймер Modbus slave |
|
||||
| `TIM4` | internal clock, period `65535`, prescaler `7199` | Таймер Modbus master |
|
||||
| `ADC1` | `ADC_CHANNEL_VREFINT` | Внутренний Vref, внешних ADC-пинов нет |
|
||||
| `RTC` | LSI | Часы, доступны через Modbus-регистры |
|
||||
|
||||
## Замечания
|
||||
|
||||
- В `.ioc` пины `PA2/PA3` отмечены как GPIO output, но в актуальном `usart.c` они инициализируются как `USART2_TX/RX`. Для документации использована фактическая инициализация из исходников.
|
||||
- Функция `handle_valves()` содержит запись в `GPIOC` pin `14`, но `PC14` не инициализирован в `MX_GPIO_Init()` и сама функция в основном цикле закомментирована.
|
||||
- Для RS-485 direction control (`DE/RE`) отдельный GPIO в `modbus_config.h` не задан: `RS_EnableReceive()` и `RS_EnableTransmit()` закомментированы.
|
||||
201
john103C6T6NewVer/MODBUS_MAP.md
Normal file
201
john103C6T6NewVer/MODBUS_MAP.md
Normal file
@@ -0,0 +1,201 @@
|
||||
# Modbus Map
|
||||
|
||||
Документ составлен по прошивке:
|
||||
|
||||
- `..\new rev\john103C8T6\Modbus\modbus_config.h`
|
||||
- `..\new rev\john103C8T6\Modbus\modbus_data.h`
|
||||
- `..\new rev\john103C8T6\Modbus\modbus_data.c`
|
||||
- `..\new rev\john103C8T6\Core\Src\main.c`
|
||||
- `..\new rev\john103C8T6\Core\Inc\PROJ_setup.h`
|
||||
|
||||
Адреса ниже указаны в 0-based формате, как они используются в прошивке. В некоторых Modbus-терминалах эти же адреса отображаются как `30001`, `40001`, `00001` и т.п. В таком терминале к адресу обычно надо прибавить `1` и выбрать нужный тип таблицы.
|
||||
|
||||
## Общие параметры
|
||||
|
||||
| Параметр | Значение |
|
||||
|---|---|
|
||||
| Протокол | Modbus RTU |
|
||||
| Slave ID | `3` |
|
||||
| Slave UART | `USART1`, `PB6 TX`, `PB7 RX` |
|
||||
| Slave UART настройки | `115200`, `8N1` |
|
||||
| Slave таймер | `TIM2` |
|
||||
| Master UART | `USART2`, `PA2 TX`, `PA3 RX` |
|
||||
| Master UART настройки | `115200`, `8N1` |
|
||||
| Master таймер | `TIM4` |
|
||||
| `MAX_SENSE` | `32` |
|
||||
| Включенные таблицы | Coils, Holding Registers, Input Registers |
|
||||
|
||||
## Input Registers, function `0x04`
|
||||
|
||||
Базовый массив: `MB_DATA.InRegs`, адресный диапазон прошивки `0..1999`.
|
||||
|
||||
| Адрес | Кол-во | Имя | Тип | Описание |
|
||||
|---:|---:|---|---|---|
|
||||
| `0` | `32` | `sens_Temp[0..31]` | `uint16_t` | Температура DS18B20, в коде записывается как `temperature * 10`. Рекомендуется читать как `int16_t / 10.0`, если возможны отрицательные температуры |
|
||||
| `32` | `968` | `reserve` | `uint16_t[]` | Резерв до адреса `999` |
|
||||
| `1000` | `128` | `ID.DevAddr[32][8]` | raw bytes as registers | ROM-коды DS18B20: 32 датчика по 8 байт. Для датчика `N`: базовый регистр `1000 + N * 4` |
|
||||
| `1128` | `72` | `reserve1` | `uint16_t[]` | Резерв до адреса `1199` |
|
||||
| `1200` | `1` | `num_Tsens` | `uint16_t` | Количество найденных датчиков DS18B20 |
|
||||
| `1201` | `1` | `rtc.hours` | `uint16_t` | Текущие часы RTC |
|
||||
| `1202` | `1` | `rtc.minutes` | `uint16_t` | Текущие минуты RTC |
|
||||
| `1203` | `1` | `rtc.seconds` | `uint16_t` | Текущие секунды RTC |
|
||||
| `1204` | `1` | `rtc.date` | `uint16_t` | День месяца |
|
||||
| `1205` | `1` | `rtc.month` | `uint16_t` | Месяц |
|
||||
| `1206` | `1` | `rtc.year` | `uint16_t` | Год в формате RTC проекта |
|
||||
| `1207` | `1` | `rtc.weekday` | `uint16_t` | День недели |
|
||||
| `1208` | `1` | `rtc.apply` | `uint16_t` | Для input-регистров обычно `0` |
|
||||
| `1209` | `1` | `rtc.status` | `uint16_t` | Статус RTC |
|
||||
| `1210` | `790` | reserved | `uint16_t[]` | Адреса доступны в общем диапазоне, прикладного поля нет |
|
||||
|
||||
## Holding Registers, functions `0x03`, `0x06`, `0x10`
|
||||
|
||||
Базовый массив: `MB_DATA.HoldRegs`, адресный диапазон прошивки `0..1999`.
|
||||
|
||||
| Адрес | Кол-во | Имя | Тип | Описание |
|
||||
|---:|---:|---|---|---|
|
||||
| `0` | `32` | `set_Temp[0..31]` | `uint16_t` | Уставки температуры для датчиков. В текущем коде используются как градусы без умножения на 10 |
|
||||
| `32` | `68` | `reserve` | `uint16_t[]` | Резерв до адреса `99` |
|
||||
| `100` | `32` | `set_hyst[0..31]` | `uint16_t` | Гистерезис температуры для датчиков. В текущем коде используется как градусы |
|
||||
| `132` | `68` | `reserve1` | `uint16_t[]` | Резерв до адреса `199` |
|
||||
| `200` | `1` | `rtc.hours` | `uint16_t` | Часы для установки RTC |
|
||||
| `201` | `1` | `rtc.minutes` | `uint16_t` | Минуты для установки RTC |
|
||||
| `202` | `1` | `rtc.seconds` | `uint16_t` | Секунды для установки RTC |
|
||||
| `203` | `1` | `rtc.date` | `uint16_t` | День месяца |
|
||||
| `204` | `1` | `rtc.month` | `uint16_t` | Месяц |
|
||||
| `205` | `1` | `rtc.year` | `uint16_t` | Год в формате RTC проекта |
|
||||
| `206` | `1` | `rtc.weekday` | `uint16_t` | День недели |
|
||||
| `207` | `1` | `rtc.apply` | `uint16_t` | Записать `1`, чтобы применить время RTC |
|
||||
| `208` | `1` | `rtc.status` | `uint16_t` | Статус установки RTC |
|
||||
| `209` | `1791` | reserved | `uint16_t[]` | Адреса доступны в общем диапазоне, прикладного поля нет |
|
||||
|
||||
RTC status:
|
||||
|
||||
| Значение | Имя | Описание |
|
||||
|---:|---|---|
|
||||
| `0` | `MB_RTC_STATUS_IDLE` | Нет операции |
|
||||
| `1` | `MB_RTC_STATUS_SET_OK` | Время установлено |
|
||||
| `2` | `MB_RTC_STATUS_VALUE_ERROR` | Ошибка значения времени/даты |
|
||||
| `3` | `MB_RTC_STATUS_HAL_ERROR` | Ошибка HAL RTC |
|
||||
|
||||
## Coils, functions `0x01`, `0x05`, `0x0F`
|
||||
|
||||
Базовый массив: `MB_DATA.Coils`, адресный диапазон прошивки `0..999`.
|
||||
|
||||
| Coil address | Кол-во | Имя | Описание |
|
||||
|---:|---:|---|---|
|
||||
| `0` | `48` | `coils[0..2]` | Общие управляющие биты `state_val_01..state_val_16` в трех 16-битных словах |
|
||||
| `20` | `1` | `coils[1].state_val_05` | Управляет `PA10 / Relay_dc5v` в основном цикле |
|
||||
| `48` | `80` | `reserve_coils` | Резерв до coil `127` |
|
||||
| `128` | `32` | `status_tSens[0..1]` | Статусы подключения DS18B20: `Temp1_isConnected..Temp32_isConnected` |
|
||||
| `160` | `96` | `reserve_status_tSens` | Резерв до coil `255` |
|
||||
| `256` | `16` | `relay_struct_on` | Расчетные биты включения реле по датчикам `Temp1..Temp16` |
|
||||
| `272` | `16` | `reserve_relay_struct_on` | Резерв |
|
||||
| `288` | `16` | `relay_struct_off` | Расчетные биты выключения реле по датчикам `Temp1..Temp16` |
|
||||
| `304` | `80` | reserved | Резерв до coil `383` |
|
||||
| `384` | `1` | `init_param` | При записи `1` прошивка применяет `set_Temp[]` и `set_hyst[]`, затем сбрасывает бит |
|
||||
| `385` | `1` | `init_Tsens` | При записи `1` прошивка повторно ищет DS18B20, затем сбрасывает бит |
|
||||
| `386` | `1` | `Save_Param_to_Flash` | Поле объявлено, активного использования в текущем `main.c` не найдено |
|
||||
| `387` | `13` | reserved2 | Резервные биты |
|
||||
| `400` | `600` | reserved | Адреса доступны в общем диапазоне, прикладного поля нет |
|
||||
|
||||
## Привязка температур и реле
|
||||
|
||||
В `value_control()` прошивка сравнивает `sens[i].temperature` с уставкой и гистерезисом:
|
||||
|
||||
- если `temperature < set_temp - hyst`, выставляется `relay_struct_off` для датчика `i`;
|
||||
- если `temperature > set_temp + hyst`, выставляется `relay_struct_on` для датчика `i`;
|
||||
- если `temperature == set_temp`, оба бита для датчика сбрасываются.
|
||||
|
||||
Эти расчетные биты лежат в coils `256..271` и `288..303`. Прямая аппаратная привязка этих расчетных битов к GPIO-выходам в текущем `main.c` не найдена. Прямое управление GPIO найдено только для `PA10 / Relay_dc5v` через coil `20`.
|
||||
|
||||
|
||||
## GUI binding to the real STM project
|
||||
|
||||
Source project checked: `..\new rev\john103C8T6`.
|
||||
|
||||
The PC GUI bridge is bound to the actual STM Modbus layout from:
|
||||
|
||||
- `Modbus\modbus_config.h`
|
||||
- `Modbus\modbus_data.h`
|
||||
- `Core\Src\main.c`
|
||||
- `Core\Inc\ds18b20_driver.h`
|
||||
- `Core\Inc\PROJ_setup.h`
|
||||
|
||||
Active STM settings:
|
||||
|
||||
| Item | Value |
|
||||
|---|---:|
|
||||
| Default slave ID | `3` |
|
||||
| `MAX_SENSE` in STM | `32` |
|
||||
| GUI channels used | first `16` |
|
||||
| STM protocol on COM | Modbus RTU |
|
||||
| Optional GUI network mode | Modbus TCP gateway/device with the same register map |
|
||||
|
||||
GUI runtime map:
|
||||
|
||||
| GUI value | STM source | Modbus function | 0-based address |
|
||||
|---|---|---:|---:|
|
||||
| Current temperature channel `N` | `MB_DATA.InRegs.sens_Temp[N]` | `0x04` | `0 + N` |
|
||||
| DS18B20 ROM ID channel `N` | `MB_DATA.InRegs.ID.DevAddr[N][8]` | `0x04` | `1000 + N * 4` |
|
||||
| Sensor connected channel `N` | `MB_DATA.Coils.status_tSens` | `0x01` | `128 + N` |
|
||||
| Setpoint channel `N` | `MB_DATA.HoldRegs.set_Temp[N]`, value = `degC * 10` | `0x03` / `0x06` | `0 + N` |
|
||||
| Apply setpoints | `MB_DATA.Coils.init_param` | `0x05` | `384` |
|
||||
| Open command/state channel `N` | `MB_DATA.Coils.relay_struct_on` | `0x01` / `0x05` | `256 + N` |
|
||||
| Close command/state channel `N` | `MB_DATA.Coils.relay_struct_off` | `0x01` / `0x05` | `288 + N` |
|
||||
|
||||
Notes:
|
||||
|
||||
- GUI channel `1` uses index `N = 0`; GUI channel `16` uses index `N = 15`.
|
||||
- Setpoints are written as tenths of a degree: GUI `28.5°C` -> Modbus holding value `285`; readback `285` -> GUI `28.5°C`.
|
||||
- DS18B20 IDs are stored by STM as `uint8_t DevAddr[32][8]` and exposed through 16-bit input registers. The bridge restores each register in little-endian byte order to display the ROM ID correctly.
|
||||
- The current STM project does not expose analog valve position or opening angle registers. GUI position/angle are therefore derived from binary relay state: open = `100% / 90°`, close = `0% / 0°`.
|
||||
- `value_control()` in `Core\Src\main.c` calculates `relay_struct_on/off` from temperature, setpoint, and hysteresis. Direct manual coil writes from GUI can be overwritten by that firmware logic unless STM firmware adds a manual override register/coil.
|
||||
|
||||
|
||||
## STM room/channel structure added for GUI
|
||||
|
||||
Added to Keil STM project `..\new rev\john103C8T6`.
|
||||
|
||||
### Input registers: room status block
|
||||
|
||||
Base address: `400`. One room/channel uses `18` registers. Channel `N` uses base `400 + N * 18`, where GUI channel 1 is `N = 0`.
|
||||
|
||||
| Offset | Field | Scale / meaning |
|
||||
|---:|---|---|
|
||||
| 0 | `channel` | 1-based channel number |
|
||||
| 1 | `location` | numeric location code |
|
||||
| 2..5 | `ds18b20_id[4]` | 8-byte DS18B20 ROM ID, little-endian bytes per register |
|
||||
| 6 | `temperature_x10` | current temperature, degC * 10 |
|
||||
| 7 | `setpoint_x10` | setpoint, degC * 10 |
|
||||
| 8 | `hysteresis_x10` | hysteresis, degC * 10 |
|
||||
| 9 | `valve_position_pct` | valve opening percent, 0..100 |
|
||||
| 10 | `valve_angle_deg` | opening angle in degrees |
|
||||
| 11 | `valve_angle_max_deg` | max opening angle, default 90 |
|
||||
| 12 | `is_connected` | DS18B20 connected flag |
|
||||
| 13 | `valve_open` | open relay/command state |
|
||||
| 14 | `valve_close` | close relay/command state |
|
||||
| 15 | `mode` | 0 auto, 1 manual |
|
||||
| 16 | `command_state` | 0 stop, 1 open, 2 close |
|
||||
| 17 | `reserved` | reserved |
|
||||
|
||||
### Holding registers: room control block
|
||||
|
||||
Base address: `300`. One room/channel uses `8` registers. Channel `N` uses base `300 + N * 8`.
|
||||
|
||||
| Offset | Field | Scale / meaning |
|
||||
|---:|---|---|
|
||||
| 0 | `setpoint_x10` | writable setpoint, degC * 10 |
|
||||
| 1 | `hysteresis_x10` | writable hysteresis, degC * 10 |
|
||||
| 2 | `valve_position_pct` | writable manual opening percent, 0..100 |
|
||||
| 3 | `valve_angle_max_deg` | max opening angle, default 90 |
|
||||
| 4 | `mode` | 0 auto, 1 manual |
|
||||
| 5 | `command` | 0 stop, 1 open, 2 close |
|
||||
| 6 | `location` | numeric location code |
|
||||
| 7 | `apply` | write 1 to apply room setpoint/hysteresis |
|
||||
|
||||
Compatibility:
|
||||
|
||||
- Legacy `set_Temp[0..31]` at holding `0..31` is kept.
|
||||
- Legacy `set_hyst[0..31]` at holding `100..131` is kept.
|
||||
- Legacy coils `256..271` and `288..303` are kept.
|
||||
- The Python bridge writes both the legacy map and the new room control block.
|
||||
105
john103C6T6NewVer/README.md
Normal file
105
john103C6T6NewVer/README.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# Web GUI для датчиков температуры и клапанов
|
||||
|
||||
Веб-интерфейс для:
|
||||
- мониторинга температур,
|
||||
- установки уставок,
|
||||
- ручного и автоматического управления клапанами,
|
||||
- управления позицией клапана в `%`.
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
1. Запустите демо backend:
|
||||
```bash
|
||||
python mock_server.py
|
||||
```
|
||||
2. Откройте страницу:
|
||||
- `http://127.0.0.1:8080/index.html`
|
||||
3. В поле `API endpoint` оставьте пустым для демо или укажите `http://127.0.0.1:8080`.
|
||||
|
||||
Если API не указан, интерфейс переходит в офлайн-режим (демо) и хранит состояние в `localStorage`.
|
||||
|
||||
## Привязка к вашему проекту
|
||||
|
||||
GUI читает и пишет данные через `API_PATHS` в `app.js`:
|
||||
|
||||
1. Датчики: `/api/sensors`, `/sensors`, `/api/data`, `/state`
|
||||
2. Клапаны: `/api/valves`, `/valves`, `/api/data`, `/state`
|
||||
3. Запись: сначала `PUT /api/*/:id`, затем `PUT /api/*` (без `:id`)
|
||||
|
||||
Если ваш контракт другой, правьте:
|
||||
- массив `API_PATHS` в `app.js`
|
||||
- функции `normalizeSensor`, `normalizeValve` в `app.js`
|
||||
|
||||
## Работа с COM-портом (MCU)
|
||||
|
||||
Для чтения с порта COM запущен `serial_bridge.py`:
|
||||
|
||||
```bash
|
||||
python serial_bridge.py --serial-port COM3 --baudrate 115200
|
||||
```
|
||||
|
||||
По умолчанию сервис доступен на `http://127.0.0.1:8080`.
|
||||
|
||||
Поддерживаемые входящие форматы с порта:
|
||||
|
||||
1) JSON-пакет:
|
||||
```json
|
||||
{"sensors":[{"id":"zone_1","value":24.5,"setpoint":28.0}], "valves":[{"id":"valve_1","mode":"auto","position":32,"targetTemp":28}]}
|
||||
```
|
||||
|
||||
2) Текстовый формат:
|
||||
```text
|
||||
T1=24.5;T1_SETPOINT=28.0;V1_MODE=auto;V1_POS=32;V1_TGT=28
|
||||
```
|
||||
|
||||
Исходящие команды от GUI (`PUT`) также отправляются в порт как JSON:
|
||||
```json
|
||||
{"type":"sensor","id":"zone_1","setpoint":28.0}
|
||||
{"type":"valve","id":"valve_1","mode":"manual","position":50}
|
||||
```
|
||||
|
||||
Если нужен другой протокол от/к MCU (Modbus/байт-структура), пришлите пример кадров — подгоню парсер в `serial_bridge.py`.
|
||||
|
||||
В GUI:
|
||||
- поле `COM порт` показывает список `/api/serial/ports`;
|
||||
- кнопка `Обновить порты` — принудительно перечитывает список COM;
|
||||
- кнопка `Подключить` / `Отключить` — вызывает `/api/serial/connect` и `/api/serial/disconnect` в `serial_bridge.py`.
|
||||
|
||||
## Форматы API
|
||||
|
||||
### GET
|
||||
- `GET /api/sensors` → массив:
|
||||
```json
|
||||
[
|
||||
{ "id": "zone_1", "name": "Термопара 1", "value": 24.6, "setpoint": 28, "unit": "°C", "zone": "1" }
|
||||
]
|
||||
```
|
||||
- `GET /api/valves` → массив:
|
||||
```json
|
||||
[
|
||||
{ "id": "valve_1", "name": "Клапан 1", "zone": "1", "mode": "auto", "position": 40, "targetTemp": 28, "isOpen": true }
|
||||
]
|
||||
```
|
||||
|
||||
### PUT
|
||||
- `PUT /api/sensors/{id}`:
|
||||
```json
|
||||
{ "setpoint": 29.5 }
|
||||
```
|
||||
- `PUT /api/valves/{id}`:
|
||||
- ручной:
|
||||
```json
|
||||
{ "mode": "manual", "position": 50 }
|
||||
```
|
||||
- авто:
|
||||
```json
|
||||
{ "mode": "auto", "targetTemp": 28.0 }
|
||||
```
|
||||
- или отдельные поля (`mode`, `position`, `targetTemp`).
|
||||
|
||||
## Файлы
|
||||
- `index.html` — разметка страницы
|
||||
- `styles.css` — стили
|
||||
- `app.js` — логика интерфейса
|
||||
- `mock_server.py` — демонстрационный backend
|
||||
- `serial_bridge.py` — backend для COM-порта
|
||||
1640
john103C6T6NewVer/app.js
Normal file
1640
john103C6T6NewVer/app.js
Normal file
@@ -0,0 +1,1640 @@
|
||||
const SENSOR_COUNT = 16;
|
||||
const VALVE_COUNT = 32;
|
||||
const DEFAULT_OPEN_DEGREES_MAX = 90;
|
||||
const CHANNEL_LOCATIONS = [
|
||||
"DUO прав",
|
||||
"DUO лев",
|
||||
"TRIO",
|
||||
"SOLO",
|
||||
"ОСНОВА 7",
|
||||
"ОСНОВА 6",
|
||||
"ОСНОВА 5",
|
||||
"ОСНОВА 4",
|
||||
"ОСНОВА 3",
|
||||
"ОСНОВА 2",
|
||||
"ОСНОВА 1",
|
||||
];
|
||||
|
||||
function defaultChannelLocation(index) {
|
||||
return CHANNEL_LOCATIONS[index % CHANNEL_LOCATIONS.length];
|
||||
}
|
||||
|
||||
function makeDefaultSensors() {
|
||||
return Array.from({ length: SENSOR_COUNT }, (_, index) => {
|
||||
const number = index + 1;
|
||||
return {
|
||||
id: `zone_${number}`,
|
||||
name: `Датчик ${number}`,
|
||||
value: 0,
|
||||
setpoint: 28,
|
||||
unit: "°C",
|
||||
zone: String(number),
|
||||
location: defaultChannelLocation(index),
|
||||
ds18b20Id: `28-00-00-00-00-00-00-${number.toString(16).toUpperCase().padStart(2, "0")}`,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function makeDefaultValves() {
|
||||
return Array.from({ length: VALVE_COUNT }, (_, index) => {
|
||||
const number = index + 1;
|
||||
const zone = (index % SENSOR_COUNT) + 1;
|
||||
return {
|
||||
id: `valve_${number}`,
|
||||
name: `Клапан ${number}`,
|
||||
zone: String(zone),
|
||||
mode: "auto",
|
||||
position: 0,
|
||||
targetTemp: 28,
|
||||
isOpen: false,
|
||||
openDegrees: 0,
|
||||
openDegreesMax: DEFAULT_OPEN_DEGREES_MAX,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
const defaultSensors = makeDefaultSensors();
|
||||
const defaultValves = makeDefaultValves();
|
||||
|
||||
const API_PATHS = {
|
||||
sensorsRead: ["/api/sensors", "/sensors", "/api/data", "/state"],
|
||||
valvesRead: ["/api/valves", "/valves", "/api/data", "/state"],
|
||||
sensorWrite: [
|
||||
(id) => `/api/sensors/${encodeURIComponent(id)}`,
|
||||
(id) => `/sensors/${encodeURIComponent(id)}`,
|
||||
() => "/api/sensors",
|
||||
() => "/sensors",
|
||||
],
|
||||
valveWrite: [
|
||||
(id) => `/api/valves/${encodeURIComponent(id)}`,
|
||||
(id) => `/valves/${encodeURIComponent(id)}`,
|
||||
() => "/api/valves",
|
||||
() => "/valves",
|
||||
],
|
||||
valveCalibrate: [
|
||||
(id) => `/api/valves/${encodeURIComponent(id)}/calibrate`,
|
||||
(id) => `/valves/${encodeURIComponent(id)}/calibrate`,
|
||||
],
|
||||
valvesCalibrateAll: ["/api/valves/calibrate-all", "/api/calibration/all", "/calibration/all"],
|
||||
};
|
||||
|
||||
const SERIAL_API_PATHS = {
|
||||
ports: [
|
||||
"/api/serial/ports",
|
||||
"/api/ports",
|
||||
"/ports",
|
||||
"/serial/ports",
|
||||
"/status/ports",
|
||||
],
|
||||
status: [
|
||||
"/api/serial/status",
|
||||
"/api/state",
|
||||
"/state",
|
||||
"/serial/status",
|
||||
],
|
||||
connect: [
|
||||
"/api/serial/connect",
|
||||
"/api/connect",
|
||||
"/connect",
|
||||
"/serial/connect",
|
||||
],
|
||||
disconnect: [
|
||||
"/api/serial/disconnect",
|
||||
"/api/disconnect",
|
||||
"/disconnect",
|
||||
"/serial/disconnect",
|
||||
],
|
||||
};
|
||||
|
||||
const state = {
|
||||
sensors: [...defaultSensors],
|
||||
valves: [...defaultValves],
|
||||
apiBase: "",
|
||||
timer: null,
|
||||
};
|
||||
|
||||
let serialConnected = false;
|
||||
let selectedPort = "";
|
||||
|
||||
const sensorsEl = document.getElementById("sensors");
|
||||
const valvesEl = document.getElementById("valves");
|
||||
const statusEl = document.getElementById("status");
|
||||
const globalStatus = document.getElementById("globalStatus");
|
||||
const apiInput = document.getElementById("apiBase");
|
||||
const refreshBtn = document.getElementById("refreshBtn");
|
||||
const saveApiBtn = document.getElementById("saveApiBtn");
|
||||
const refreshPortsBtn = document.getElementById("refreshPortsBtn");
|
||||
const connectPortBtn = document.getElementById("connectPortBtn");
|
||||
const comPortSelect = document.getElementById("comPortSelect");
|
||||
const modbusTransport = document.getElementById("modbusTransport");
|
||||
const tcpHost = document.getElementById("tcpHost");
|
||||
const tcpPort = document.getElementById("tcpPort");
|
||||
const modbusSlaveId = document.getElementById("modbusSlaveId");
|
||||
const serialStatus = document.getElementById("serialStatus");
|
||||
const calibrateAllBtn = document.getElementById("calibrateAllBtn");
|
||||
|
||||
function clamp(value, min, max) {
|
||||
return Math.max(min, Math.min(max, value));
|
||||
}
|
||||
|
||||
function parseGuiNumber(value, fallback = 0) {
|
||||
const parsed = Number(String(value ?? "").replace(",", "."));
|
||||
return Number.isFinite(parsed) ? parsed : fallback;
|
||||
}
|
||||
|
||||
function storageGet(name, fallback) {
|
||||
const raw = localStorage.getItem(name);
|
||||
if (!raw) return fallback;
|
||||
try {
|
||||
return JSON.parse(raw);
|
||||
} catch {
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
||||
function storageSet(name, value) {
|
||||
localStorage.setItem(name, JSON.stringify(value));
|
||||
}
|
||||
|
||||
function getModbusTransport() {
|
||||
return (modbusTransport?.value || storageGet("modbusTransport", "rtu") || "rtu").toLowerCase();
|
||||
}
|
||||
|
||||
function applyModbusTransportView() {
|
||||
const transport = getModbusTransport();
|
||||
const isTcp = transport === "tcp";
|
||||
|
||||
document.querySelectorAll(".rtu-field").forEach((element) => {
|
||||
element.classList.toggle("hidden", isTcp);
|
||||
});
|
||||
document.querySelectorAll(".tcp-field").forEach((element) => {
|
||||
element.classList.toggle("hidden", !isTcp);
|
||||
});
|
||||
|
||||
if (refreshPortsBtn) {
|
||||
refreshPortsBtn.disabled = isTcp;
|
||||
}
|
||||
if (serialStatus && !serialConnected) {
|
||||
serialStatus.textContent = isTcp ? "Modbus TCP: не подключен" : "COM: не подключен";
|
||||
}
|
||||
}
|
||||
|
||||
function initModbusTransportControls() {
|
||||
if (modbusTransport) {
|
||||
modbusTransport.value = storageGet("modbusTransport", "rtu");
|
||||
modbusTransport.addEventListener("change", () => {
|
||||
storageSet("modbusTransport", modbusTransport.value);
|
||||
applyModbusTransportView();
|
||||
});
|
||||
}
|
||||
if (tcpHost) {
|
||||
tcpHost.value = storageGet("tcpHost", tcpHost.value || "192.168.0.10");
|
||||
tcpHost.addEventListener("change", () => storageSet("tcpHost", tcpHost.value.trim()));
|
||||
}
|
||||
if (tcpPort) {
|
||||
tcpPort.value = storageGet("tcpPort", tcpPort.value || "502");
|
||||
tcpPort.addEventListener("change", () => storageSet("tcpPort", tcpPort.value || "502"));
|
||||
}
|
||||
if (modbusSlaveId) {
|
||||
modbusSlaveId.value = storageGet("modbusSlaveId", modbusSlaveId.value || "3");
|
||||
modbusSlaveId.addEventListener("change", () => storageSet("modbusSlaveId", modbusSlaveId.value || "3"));
|
||||
}
|
||||
applyModbusTransportView();
|
||||
}
|
||||
|
||||
function normalizeApiUrl(value) {
|
||||
const trimmed = (value || "").trim();
|
||||
if (trimmed && !/^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed)) {
|
||||
return normalizeApiUrl(`http://${trimmed}`);
|
||||
}
|
||||
if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) {
|
||||
try {
|
||||
const parsed = new URL(trimmed);
|
||||
return `${parsed.protocol}//${parsed.host}`;
|
||||
} catch {
|
||||
return trimmed.endsWith("/") ? trimmed.slice(0, -1) : trimmed;
|
||||
}
|
||||
}
|
||||
return trimmed.endsWith("/") ? trimmed.slice(0, -1) : trimmed;
|
||||
}
|
||||
|
||||
function ensureApiBase() {
|
||||
if (state.apiBase) {
|
||||
return state.apiBase;
|
||||
}
|
||||
if (window.location?.protocol?.startsWith("http") && window.location.host) {
|
||||
state.apiBase = `${window.location.protocol}//${window.location.host}`;
|
||||
} else {
|
||||
state.apiBase = "http://127.0.0.1:8080";
|
||||
}
|
||||
if (apiInput) {
|
||||
apiInput.value = state.apiBase;
|
||||
}
|
||||
storageSet("apiBase", state.apiBase);
|
||||
return state.apiBase;
|
||||
}
|
||||
|
||||
function endpoint(path) {
|
||||
if (!state.apiBase) {
|
||||
throw new Error("demo");
|
||||
}
|
||||
return `${state.apiBase}${path}`;
|
||||
}
|
||||
|
||||
async function parseResponseBody(response) {
|
||||
const body = await response.text();
|
||||
if (!body) {
|
||||
return {};
|
||||
}
|
||||
try {
|
||||
return JSON.parse(body);
|
||||
} catch {
|
||||
return body;
|
||||
}
|
||||
}
|
||||
|
||||
async function apiGet(path) {
|
||||
const response = await fetch(endpoint(path), {
|
||||
method: "GET",
|
||||
headers: { accept: "application/json" },
|
||||
});
|
||||
if (!response.ok) {
|
||||
const body = await response.text();
|
||||
throw new Error(`HTTP ${response.status}: ${body}`);
|
||||
}
|
||||
return parseResponseBody(response);
|
||||
}
|
||||
|
||||
async function apiPut(path, payload) {
|
||||
const response = await fetch(endpoint(path), {
|
||||
method: "PUT",
|
||||
headers: { "content-type": "application/json", accept: "application/json" },
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
if (!response.ok) {
|
||||
const body = await response.text();
|
||||
throw new Error(`HTTP ${response.status}: ${body}`);
|
||||
}
|
||||
return parseResponseBody(response);
|
||||
}
|
||||
|
||||
async function apiPost(path, payload) {
|
||||
const response = await fetch(endpoint(path), {
|
||||
method: "POST",
|
||||
headers: { "content-type": "application/json", accept: "application/json" },
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
if (!response.ok) {
|
||||
const body = await response.text();
|
||||
throw new Error(`HTTP ${response.status}: ${body}`);
|
||||
}
|
||||
return parseResponseBody(response);
|
||||
}
|
||||
|
||||
function extractPorts(payload) {
|
||||
if (Array.isArray(payload)) return payload;
|
||||
if (Array.isArray(payload?.ports)) return payload.ports;
|
||||
return [];
|
||||
}
|
||||
|
||||
function extractSelectedPort(payload) {
|
||||
if (typeof payload?.selected === "string") return payload.selected;
|
||||
if (typeof payload?.port === "string") return payload.port;
|
||||
return "";
|
||||
}
|
||||
|
||||
async function apiGetFallback(paths) {
|
||||
let lastError;
|
||||
for (const path of paths) {
|
||||
try {
|
||||
return await apiGet(path);
|
||||
} catch (error) {
|
||||
lastError = error;
|
||||
}
|
||||
}
|
||||
throw lastError || new Error("No available endpoint");
|
||||
}
|
||||
|
||||
async function apiPostFallback(paths, payload) {
|
||||
let lastError;
|
||||
for (const path of paths) {
|
||||
try {
|
||||
return await apiPost(path, payload);
|
||||
} catch (error) {
|
||||
lastError = error;
|
||||
}
|
||||
}
|
||||
throw lastError || new Error("No available endpoint");
|
||||
}
|
||||
|
||||
function degreesFromPosition(position, maxDegrees = DEFAULT_OPEN_DEGREES_MAX) {
|
||||
const maxValue = Number(maxDegrees) > 0 ? Number(maxDegrees) : DEFAULT_OPEN_DEGREES_MAX;
|
||||
return Math.round(clamp(position, 0, 100) * maxValue / 100);
|
||||
}
|
||||
|
||||
function positionFromDegrees(degrees, maxDegrees = DEFAULT_OPEN_DEGREES_MAX) {
|
||||
const maxValue = Number(maxDegrees) > 0 ? Number(maxDegrees) : DEFAULT_OPEN_DEGREES_MAX;
|
||||
return Math.round(clamp(degrees, 0, maxValue) * 100 / maxValue);
|
||||
}
|
||||
|
||||
async function fetchComPorts() {
|
||||
if (!state.apiBase) {
|
||||
return { ports: [], selected: "" };
|
||||
}
|
||||
const payload = await apiGetFallback(SERIAL_API_PATHS.ports);
|
||||
return {
|
||||
ports: extractPorts(payload),
|
||||
selected: extractSelectedPort(payload),
|
||||
};
|
||||
}
|
||||
|
||||
function applyPortOptions(ports, preferredPort = "") {
|
||||
if (!comPortSelect) return;
|
||||
const current = comPortSelect.value;
|
||||
comPortSelect.innerHTML = "<option value=\"\">Порт не выбран</option>";
|
||||
for (const item of ports) {
|
||||
const entry = typeof item === "string" ? { device: item, description: "" } : item;
|
||||
const option = document.createElement("option");
|
||||
const value = entry.device || entry.port || "";
|
||||
if (!value) continue;
|
||||
option.value = value;
|
||||
option.textContent = `${entry.description ? `${entry.description} (${value})` : value}`;
|
||||
option.dataset.hwid = entry.hwid || "";
|
||||
comPortSelect.appendChild(option);
|
||||
}
|
||||
const targetPort = preferredPort || current;
|
||||
if (ports.find((item) => (typeof item === "string" ? item : item.device) === targetPort)) {
|
||||
comPortSelect.value = targetPort;
|
||||
} else if (current) {
|
||||
comPortSelect.value = "";
|
||||
}
|
||||
}
|
||||
|
||||
async function refreshPortsLegacy(silent = false) {
|
||||
const payload = await fetchComPorts();
|
||||
const ports = payload?.ports || [];
|
||||
applyPortOptions(ports, payload?.selected || "");
|
||||
if (!silent) {
|
||||
updateStatus(ports.length ? "Доступные порты обновлены" : "Порты не найдены", ports.length ? "ok" : "warn");
|
||||
}
|
||||
}
|
||||
|
||||
async function connectSelectedPortLegacyOld() {
|
||||
if (!state.apiBase) {
|
||||
updateStatus("Укажите API endpoint, чтобы работать с COM-портами", "warn");
|
||||
return;
|
||||
}
|
||||
const value = comPortSelect.value;
|
||||
if (!value) {
|
||||
updateStatus("Выберите COM порт", "warn");
|
||||
return;
|
||||
}
|
||||
selectedPort = value;
|
||||
try {
|
||||
const payload = { port: value, baud: 115200, baudrate: 115200, parity: "N", stopbits: 1, bytesize: 8, timeout: 0.3 };
|
||||
await apiPostFallback(SERIAL_API_PATHS.connect, payload);
|
||||
serialConnected = true;
|
||||
serialStatus.textContent = `COM: подключён (${value})`;
|
||||
serialStatus.className = "status status-ok";
|
||||
updateStatus(`COM ${value} подключён`, "ok");
|
||||
} catch (error) {
|
||||
serialConnected = false;
|
||||
serialStatus.textContent = "COM: ошибка подключения";
|
||||
serialStatus.className = "status status-error";
|
||||
updateStatus(`Ошибка подключения COM: ${error.message}`, "error");
|
||||
}
|
||||
}
|
||||
|
||||
async function disconnectPortLegacy() {
|
||||
if (!state.apiBase) return;
|
||||
try {
|
||||
await apiPostFallback(SERIAL_API_PATHS.disconnect, {});
|
||||
} catch {
|
||||
// ignore
|
||||
} finally {
|
||||
serialConnected = false;
|
||||
serialStatus.textContent = "COM: не подключён";
|
||||
serialStatus.className = "status status-warn";
|
||||
selectedPort = "";
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeSensor(raw = {}) {
|
||||
const rawId = raw.id ?? raw.sensorId ?? raw.key ?? raw.code;
|
||||
const zone = String(raw.zone ?? raw.channel ?? raw.sensorZone ?? "").trim() || String(rawId ?? "").replace(/\D+/g, "");
|
||||
const fallbackZone = zone ? `zone_${zone}` : "zone_1";
|
||||
const id = rawId || fallbackZone;
|
||||
return {
|
||||
id: String(id),
|
||||
name: String(raw.name ?? raw.label ?? `Термопара ${zone || 1}`),
|
||||
zone: String(zone || "1"),
|
||||
value: Number(raw.value ?? raw.current ?? raw.temperature ?? raw.temp ?? 0),
|
||||
setpoint: Number(raw.setpoint ?? raw.target ?? raw.targetTemp ?? raw.tSet ?? 0),
|
||||
unit: raw.unit ?? raw.units ?? "°C",
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeValve(raw = {}) {
|
||||
const rawId = raw.id ?? raw.valveId ?? raw.key ?? raw.code;
|
||||
const zone = String(raw.zone ?? raw.channel ?? raw.controlZone ?? "").trim() || String(rawId ?? "").replace(/\D+/g, "");
|
||||
const id = rawId || `valve_${zone || "1"}`;
|
||||
const mode = String(raw.mode ?? raw.workMode ?? "auto").toLowerCase() === "manual" ? "manual" : "auto";
|
||||
const maxOpenDegrees = Number(raw.openDegreesMax ?? raw.maxOpenDegrees ?? raw.degMax ?? DEFAULT_OPEN_DEGREES_MAX);
|
||||
const maxDegrees = Number.isFinite(maxOpenDegrees) && maxOpenDegrees > 0 ? maxOpenDegrees : DEFAULT_OPEN_DEGREES_MAX;
|
||||
let position = Number(raw.position ?? raw.pos ?? raw.percent ?? raw.value);
|
||||
let openDegrees = Number(raw.openDegrees ?? raw.degree ?? raw.posDeg ?? raw.opening ?? raw.openAngle ?? raw.angle);
|
||||
|
||||
if (Number.isNaN(position)) {
|
||||
if (Number.isNaN(openDegrees)) {
|
||||
position = 0;
|
||||
openDegrees = 0;
|
||||
} else {
|
||||
position = positionFromDegrees(openDegrees, maxDegrees);
|
||||
}
|
||||
} else if (Number.isNaN(openDegrees)) {
|
||||
openDegrees = degreesFromPosition(position, maxDegrees);
|
||||
} else {
|
||||
position = positionFromDegrees(openDegrees, maxDegrees);
|
||||
}
|
||||
return {
|
||||
id: String(id),
|
||||
name: String(raw.name ?? raw.label ?? `Клапан ${zone || 1}`),
|
||||
zone: String(zone || "1"),
|
||||
mode,
|
||||
position: clamp(position, 0, 100),
|
||||
openDegrees: clamp(Math.round(openDegrees), 0, maxDegrees),
|
||||
openDegreesMax: maxDegrees,
|
||||
targetTemp: Number(raw.targetTemp ?? raw.targetTemperature ?? raw.setpoint ?? raw.tSet ?? 0),
|
||||
isOpen: Boolean(raw.isOpen ?? raw.open ?? position > 0),
|
||||
};
|
||||
}
|
||||
|
||||
function extractCollection(payload, key) {
|
||||
if (!payload) return null;
|
||||
if (Array.isArray(payload)) return payload;
|
||||
if (Array.isArray(payload[key])) return payload[key];
|
||||
if (Array.isArray(payload.data?.[key])) return payload.data[key];
|
||||
if (Array.isArray(payload.result?.[key])) return payload.result[key];
|
||||
if (Array.isArray(payload.state?.[key])) return payload.state[key];
|
||||
if (Array.isArray(payload.data?.[`temperature_${key}`])) return payload.data[`temperature_${key}`];
|
||||
return null;
|
||||
}
|
||||
|
||||
async function fetchCollection(paths, key, normalizer) {
|
||||
let lastError;
|
||||
for (const path of paths) {
|
||||
try {
|
||||
const payload = await apiGet(path);
|
||||
const collection = extractCollection(payload, key);
|
||||
if (!collection || !Array.isArray(collection)) continue;
|
||||
return collection.map(normalizer);
|
||||
} catch (error) {
|
||||
lastError = error;
|
||||
}
|
||||
}
|
||||
throw lastError || new Error(`No available endpoint for ${key}`);
|
||||
}
|
||||
|
||||
async function sendWithFallback(paths, id, payload) {
|
||||
let lastError;
|
||||
for (const resolvePath of paths) {
|
||||
try {
|
||||
const route = typeof resolvePath === "function" ? resolvePath(id) : resolvePath;
|
||||
return await apiPut(route, payload);
|
||||
} catch (error) {
|
||||
lastError = error;
|
||||
}
|
||||
}
|
||||
throw lastError || new Error("No available write endpoint");
|
||||
}
|
||||
|
||||
async function postWithFallback(paths, id, payload) {
|
||||
let lastError;
|
||||
for (const resolvePath of paths) {
|
||||
try {
|
||||
const route = typeof resolvePath === "function" ? resolvePath(id) : resolvePath;
|
||||
return await apiPost(route, payload);
|
||||
} catch (error) {
|
||||
lastError = error;
|
||||
}
|
||||
}
|
||||
throw lastError || new Error("No available write endpoint");
|
||||
}
|
||||
|
||||
function writePayloadBase(id, type = "sensor") {
|
||||
const sensor = findSensorById(id);
|
||||
const valve = findValveById(id);
|
||||
const entity = type === "valve" ? valve : sensor;
|
||||
return {
|
||||
id,
|
||||
...(entity ? { zone: entity.zone, name: entity.name } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
function mergeDefaults(stored, defaults, normalizer = (item) => item) {
|
||||
const source = Array.isArray(stored) ? stored : [];
|
||||
const byId = new Map(source.map((item) => [String(item.id), normalizer(item)]));
|
||||
return defaults.map((item) => ({
|
||||
...item,
|
||||
...(byId.get(String(item.id)) || {}),
|
||||
}));
|
||||
}
|
||||
|
||||
function buildDemos() {
|
||||
state.sensors = mergeDefaults(storageGet("sensorState", []), defaultSensors, normalizeSensor);
|
||||
state.valves = mergeDefaults(storageGet("valveState", []), defaultValves, normalizeValve);
|
||||
storageSet("sensorState", state.sensors);
|
||||
storageSet("valveState", state.valves);
|
||||
}
|
||||
|
||||
function updateStatus(message, type = "ok") {
|
||||
globalStatus.textContent = message;
|
||||
globalStatus.className = `status-${type}`;
|
||||
}
|
||||
|
||||
function setConnectButtonText() {
|
||||
if (!connectPortBtn) {
|
||||
return;
|
||||
}
|
||||
connectPortBtn.textContent = serialConnected ? "Отключить" : "Подключить";
|
||||
}
|
||||
|
||||
function setSerialBusyState(isBusy, message) {
|
||||
if (refreshPortsBtn) {
|
||||
refreshPortsBtn.disabled = isBusy;
|
||||
}
|
||||
if (connectPortBtn) {
|
||||
connectPortBtn.disabled = isBusy;
|
||||
connectPortBtn.textContent = isBusy ? "..." : (serialConnected ? "Отключить" : "Подключить");
|
||||
}
|
||||
if (calibrateAllBtn) {
|
||||
calibrateAllBtn.disabled = isBusy || !serialConnected;
|
||||
}
|
||||
if (message) {
|
||||
serialStatus.textContent = message;
|
||||
}
|
||||
}
|
||||
|
||||
function applySerialStateFromPayload(payload = {}) {
|
||||
const connected = Boolean(payload?.connected);
|
||||
const transport = String(payload?.transport || getModbusTransport()).toLowerCase();
|
||||
const isTcp = transport === "tcp";
|
||||
const tcpAddress = payload?.address || (payload?.host || payload?.ip ? `${payload?.host || payload?.ip}:${payload?.tcpPort || payload?.tcp_port || 502}` : "");
|
||||
const port = isTcp ? (tcpAddress || payload?.port || "") : (payload?.port || payload?.selected || payload?.com || "");
|
||||
serialConnected = connected;
|
||||
selectedPort = connected && port ? port : "";
|
||||
if (comPortSelect && selectedPort) {
|
||||
comPortSelect.value = selectedPort;
|
||||
}
|
||||
if (serialStatus) {
|
||||
if (connected && selectedPort) {
|
||||
serialStatus.textContent = isTcp ? `Modbus TCP: connected (${selectedPort})` : `COM: connected (${selectedPort})`;
|
||||
serialStatus.className = "status status-ok";
|
||||
} else {
|
||||
serialStatus.textContent = isTcp ? "Modbus TCP: disconnected" : "COM: disconnected";
|
||||
serialStatus.className = "status status-warn";
|
||||
}
|
||||
}
|
||||
if (calibrateAllBtn) {
|
||||
calibrateAllBtn.disabled = !serialConnected;
|
||||
}
|
||||
setConnectButtonText();
|
||||
storageSet("comPort", selectedPort || "");
|
||||
}
|
||||
|
||||
async function loadState() {
|
||||
if (!state.apiBase) {
|
||||
buildDemos();
|
||||
simulateSensorPhysics();
|
||||
statusEl.textContent = "Режим: демо (без API)";
|
||||
statusEl.className = "status status-warn";
|
||||
globalStatus.textContent = "Демо: все изменения сохраняются в браузере";
|
||||
return;
|
||||
}
|
||||
const [sensors, valves] = await Promise.all([
|
||||
fetchCollection(API_PATHS.sensorsRead, "sensors", normalizeSensor),
|
||||
fetchCollection(API_PATHS.valvesRead, "valves", normalizeValve),
|
||||
]);
|
||||
state.sensors = sensors;
|
||||
state.valves = valves;
|
||||
statusEl.textContent = "Подключено к API";
|
||||
statusEl.className = "status status-ok";
|
||||
globalStatus.textContent = `API подключен: ${state.apiBase}`;
|
||||
}
|
||||
|
||||
function findSensorByZone(zone) {
|
||||
return state.sensors.find((s) => String(s.zone) === String(zone));
|
||||
}
|
||||
|
||||
function findValveByZone(zone) {
|
||||
return state.valves.find((v) => String(v.zone) === String(zone));
|
||||
}
|
||||
|
||||
function findSensorById(id) {
|
||||
return state.sensors.find((s) => s.id === id);
|
||||
}
|
||||
|
||||
function findValveById(id) {
|
||||
return state.valves.find((v) => v.id === id);
|
||||
}
|
||||
|
||||
function renderSensors() {
|
||||
const sensorsRoot = document.getElementById("sensors");
|
||||
if (!sensorsRoot) return;
|
||||
sensorsRoot.innerHTML = "";
|
||||
const sensorPanel = sensorsRoot.closest(".panel");
|
||||
if (sensorPanel) {
|
||||
sensorPanel.hidden = false;
|
||||
const title = sensorPanel.querySelector("h2");
|
||||
if (title) title.textContent = "Каналы обработки датчиков";
|
||||
}
|
||||
}
|
||||
|
||||
function renderValves() {
|
||||
const separateValvesRoot = document.getElementById("valves");
|
||||
if (separateValvesRoot) {
|
||||
separateValvesRoot.innerHTML = "";
|
||||
const separateValvesPanel = separateValvesRoot.closest(".panel");
|
||||
if (separateValvesPanel) separateValvesPanel.hidden = true;
|
||||
}
|
||||
|
||||
const valvesRoot = document.getElementById("sensors");
|
||||
if (!valvesRoot) return;
|
||||
valvesRoot.innerHTML = "";
|
||||
const valvePanel = valvesRoot.closest(".panel");
|
||||
if (valvePanel) {
|
||||
valvePanel.hidden = false;
|
||||
const title = valvePanel.querySelector("h2");
|
||||
if (title) title.textContent = "Каналы обработки датчиков";
|
||||
}
|
||||
|
||||
const sensorLocations = storageGet("sensorLocations", {});
|
||||
state.sensors.forEach((sensor, index) => {
|
||||
const channelNumber = index + 1;
|
||||
const openValve = state.valves[index * 2] || {};
|
||||
const closeValve = state.valves[index * 2 + 1] || {};
|
||||
const valve = openValve.id ? openValve : closeValve;
|
||||
const card = document.createElement("article");
|
||||
card.className = "item compact-item valve-item channel-card full-channel-card";
|
||||
card.dataset.id = valve.id || `valve_${channelNumber * 2 - 1}`;
|
||||
|
||||
const rawTemp = Number(sensor.value);
|
||||
const temp = Number.isFinite(rawTemp) ? rawTemp : 0;
|
||||
const tempText = Number.isFinite(rawTemp) ? temp.toFixed(1) : "--";
|
||||
let setpoint = Number(valve.targetTemp ?? sensor.setpoint ?? 28);
|
||||
const positionRaw = Number(valve.position ?? 0);
|
||||
const position = Number.isFinite(positionRaw) ? Math.max(0, Math.min(100, Math.round(positionRaw))) : 0;
|
||||
const maxDegreesRaw = Number(valve.openDegreesMax ?? DEFAULT_OPEN_DEGREES_MAX);
|
||||
const maxDegrees = Number.isFinite(maxDegreesRaw) && maxDegreesRaw > 0 ? maxDegreesRaw : DEFAULT_OPEN_DEGREES_MAX;
|
||||
const angleRaw = Number(valve.openDegrees ?? ((position / 100) * maxDegrees));
|
||||
const openDegrees = Number.isFinite(angleRaw) ? Math.max(0, Math.min(maxDegrees, Math.round(angleRaw))) : 0;
|
||||
const openActive = Boolean(openValve.isOpen || position > 0 || openDegrees > 0);
|
||||
const closeActive = Boolean(closeValve.isOpen || position <= 0);
|
||||
const connected = Boolean(valve.connected ?? valve.isConnected ?? sensor.connected ?? state.connected);
|
||||
const tempFill = Math.max(0, Math.min(100, ((temp + 5) / 55) * 100));
|
||||
const mode = valve.mode === "manual" ? "manual" : "auto";
|
||||
const modeText = mode === "manual" ? "ручной" : "авто";
|
||||
const sensorName = sensor.name || `Датчик ${channelNumber}`;
|
||||
const sensorId = sensor.id || `zone_${channelNumber}`;
|
||||
const setpointDrafts = storageGet("setpointDrafts", {});
|
||||
const draftValue = setpointDrafts[sensorId] ?? setpointDrafts[valve.id];
|
||||
if (draftValue !== undefined) {
|
||||
setpoint = parseGuiNumber(draftValue, setpoint);
|
||||
}
|
||||
const ds18b20Id = sensor.ds18b20Id || sensor.romId || sensor.rom || sensor.address || "--";
|
||||
const location = sensorLocations[sensorId] || sensor.location || defaultChannelLocation(index);
|
||||
const locationOptions = CHANNEL_LOCATIONS.map((name) => (
|
||||
`<option value="${name}" ${name === location ? "selected" : ""}>${name}</option>`
|
||||
)).join("");
|
||||
const openValveId = openValve.id || `valve_${channelNumber * 2 - 1}`;
|
||||
const closeValveId = closeValve.id || `valve_${channelNumber * 2}`;
|
||||
const openHex = (Number(String(openValveId).replace(/\D/g, "")) || channelNumber * 2 - 1).toString(16).toUpperCase().padStart(2, "0");
|
||||
const closeHex = (Number(String(closeValveId).replace(/\D/g, "")) || channelNumber * 2).toString(16).toUpperCase().padStart(2, "0");
|
||||
const setpointText = Number.isFinite(setpoint) ? setpoint.toFixed(1) : "--";
|
||||
const delta = Number.isFinite(rawTemp) && Number.isFinite(setpoint) ? temp - setpoint : NaN;
|
||||
const deltaText = Number.isFinite(delta) ? `${delta > 0 ? "+" : ""}${delta.toFixed(1)}°C` : "--";
|
||||
const deltaClass = !Number.isFinite(delta) || Math.abs(delta) <= 0.5 ? "ok" : delta > 0 ? "hot" : "cold";
|
||||
const stateText = openActive ? "открытие" : closeActive ? "закрытие" : "стоп";
|
||||
|
||||
card.innerHTML = `
|
||||
<div class="channel-head">
|
||||
<div class="channel-title">
|
||||
<strong>Канал ${channelNumber}</strong>
|
||||
<small>${sensorName} · ${location} · зона ${sensor.zone || channelNumber}</small>
|
||||
</div>
|
||||
<span>связь <i class="channel-lamp ${connected ? "on" : "alarm"}"></i></span>
|
||||
</div>
|
||||
|
||||
<div class="channel-id-grid full-channel-id-grid">
|
||||
<label>уставка
|
||||
<input class="targetTemp" type="number" step="0.5" value="${setpoint}">
|
||||
</label>
|
||||
<label>Расположение
|
||||
<select class="sensorLocation" data-id="${sensorId}">
|
||||
${locationOptions}
|
||||
</select>
|
||||
</label>
|
||||
<label>ID DS18B20
|
||||
<input readonly value="${ds18b20Id}">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="channel-body full-channel-body">
|
||||
<div class="temperature-widget" aria-label="Температура канала ${channelNumber}">
|
||||
<div class="temp-scale">
|
||||
<span>50</span><span>40</span><span>30</span><span>20</span><span>10</span><span>0</span><span>-5</span>
|
||||
</div>
|
||||
<div class="temp-bar"><b style="height: ${tempFill}%"></b></div>
|
||||
<div class="temp-now">${tempText}°C</div>
|
||||
</div>
|
||||
|
||||
<div class="channel-workarea">
|
||||
<div class="top-metrics-row">
|
||||
<div class="angle-panel">
|
||||
<span>угол открытия</span>
|
||||
<strong>${openDegrees}°</strong>
|
||||
<small>максимум ${Math.round(maxDegrees)}°</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="channel-data-grid full-channel-data-grid">
|
||||
<div><span>температура</span><strong>${tempText}°C</strong></div>
|
||||
<div><span>уставка</span><strong>${setpointText}°C</strong></div>
|
||||
<div><span>отклонение</span><strong class="delta ${deltaClass}">${deltaText}</strong></div>
|
||||
<div><span>расположение</span><strong>${location}</strong></div>
|
||||
<div><span>ID DS18B20</span><strong>${ds18b20Id}</strong></div>
|
||||
<div><span>режим</span><strong>${modeText}</strong></div>
|
||||
<div><span>угол/max</span><strong>${openDegrees}° / ${Math.round(maxDegrees)}°</strong></div>
|
||||
<div><span>команда</span><strong>${stateText}</strong></div>
|
||||
<div><span>связь</span><strong>${connected ? "есть" : "нет"}</strong></div>
|
||||
<div><span>канал</span><strong>${channelNumber}</strong></div>
|
||||
</div>
|
||||
|
||||
<label class="range-control channel-position">положение заслонки
|
||||
<input class="position" type="range" min="0" max="100" value="${position}">
|
||||
<strong>${position}%</strong>
|
||||
</label>
|
||||
|
||||
<div class="valve-state-row full-state-row">
|
||||
<span><i class="channel-lamp ${openActive ? "on" : "off"}"></i> клапан откр ${channelNumber}</span>
|
||||
<span><i class="channel-lamp ${closeActive ? "on" : "off"}"></i> клапан закр ${channelNumber}</span>
|
||||
</div>
|
||||
|
||||
<div class="channel-actions">
|
||||
<button class="quickPosition" data-position="100" type="button">откр ${channelNumber}</button>
|
||||
<button class="quickPosition" data-position="0" type="button">закр ${channelNumber}</button>
|
||||
</div>
|
||||
|
||||
<div class="channel-actions channel-mode-line">
|
||||
<div class="toggle channel-mode">
|
||||
<button class="modeBtn valveAuto ${mode === "auto" ? "active" : ""}" data-mode="auto" type="button">авто</button>
|
||||
<button class="modeBtn valveManual ${mode === "manual" ? "active" : ""}" data-mode="manual" type="button">ручное</button>
|
||||
</div>
|
||||
<button class="applyTarget mini-btn" type="button">SP</button>
|
||||
<button class="applyManual mini-btn" type="button">OK</button>
|
||||
<button class="calibrateValve mini-btn" type="button">CAL</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
valvesRoot.appendChild(card);
|
||||
});
|
||||
}
|
||||
|
||||
function render() {
|
||||
renderSensors();
|
||||
renderValves();
|
||||
}
|
||||
|
||||
async function applySetpoint(sensorId) {
|
||||
const sensor = findSensorById(sensorId);
|
||||
const input = document.querySelector(`.setpoint[data-id="${sensorId}"]`);
|
||||
const value = Number(input.value);
|
||||
if (Number.isNaN(value)) {
|
||||
updateStatus("Некорректное значение уставки", "warn");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!state.apiBase) {
|
||||
sensor.setpoint = value;
|
||||
storageSet("sensorState", state.sensors);
|
||||
render();
|
||||
updateStatus(`Демо: уставка ${sensor.name} = ${value.toFixed(1)} °C`, "ok");
|
||||
return;
|
||||
}
|
||||
|
||||
const payload = {
|
||||
...writePayloadBase(sensorId, "sensor"),
|
||||
setpoint: value,
|
||||
id: sensorId,
|
||||
};
|
||||
|
||||
try {
|
||||
await sendWithFallback(API_PATHS.sensorWrite, sensorId, payload);
|
||||
await loadState();
|
||||
render();
|
||||
updateStatus(`Уставка ${sensor.name} обновлена`, "ok");
|
||||
} catch (error) {
|
||||
updateStatus(`Ошибка уставки ${sensor.name}: ${error.message}`, "error");
|
||||
}
|
||||
}
|
||||
|
||||
async function applyValveMode(valveId, mode) {
|
||||
const valve = findValveById(valveId);
|
||||
if (!valve) return;
|
||||
valve.mode = mode;
|
||||
|
||||
if (!state.apiBase) {
|
||||
storageSet("valveState", state.valves);
|
||||
render();
|
||||
updateStatus(`Демо: ${valve.name} → ${mode}`, "ok");
|
||||
return;
|
||||
}
|
||||
|
||||
const payload = {
|
||||
...writePayloadBase(valveId, "valve"),
|
||||
mode,
|
||||
id: valveId,
|
||||
};
|
||||
|
||||
try {
|
||||
await sendWithFallback(API_PATHS.valveWrite, valveId, payload);
|
||||
await loadState();
|
||||
render();
|
||||
updateStatus(`Режим ${valve.name}: ${mode}`, "ok");
|
||||
} catch (error) {
|
||||
updateStatus(`Ошибка режима ${valve.name}: ${error.message}`, "error");
|
||||
await loadState();
|
||||
render();
|
||||
}
|
||||
}
|
||||
|
||||
async function applyValveTarget(valveId) {
|
||||
const valve = findValveById(valveId);
|
||||
const input = document.querySelector(`.targetTemp[data-id="${valveId}"]`);
|
||||
const value = Number(input.value);
|
||||
if (Number.isNaN(value)) {
|
||||
updateStatus("Некорректная целевая температура", "warn");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!state.apiBase) {
|
||||
valve.targetTemp = value;
|
||||
storageSet("valveState", state.valves);
|
||||
updateStatus(`Демо: цель ${valve.name} = ${value.toFixed(1)} °C`, "ok");
|
||||
return;
|
||||
}
|
||||
|
||||
const payload = {
|
||||
...writePayloadBase(valveId, "valve"),
|
||||
targetTemp: value,
|
||||
id: valveId,
|
||||
};
|
||||
|
||||
try {
|
||||
await sendWithFallback(API_PATHS.valveWrite, valveId, payload);
|
||||
await loadState();
|
||||
render();
|
||||
updateStatus(`Целевая температура ${valve.name} обновлена`, "ok");
|
||||
} catch (error) {
|
||||
updateStatus(`Ошибка цели ${valve.name}: ${error.message}`, "error");
|
||||
}
|
||||
}
|
||||
|
||||
async function applyValvePosition(valveId) {
|
||||
const valve = findValveById(valveId);
|
||||
const input = document.querySelector(`.position[data-id="${valveId}"]`);
|
||||
const value = Number(input.value);
|
||||
if (Number.isNaN(value)) {
|
||||
updateStatus("Некорректная позиция клапана", "warn");
|
||||
return;
|
||||
}
|
||||
valve.position = clamp(Math.round(value), 0, 100);
|
||||
valve.openDegrees = degreesFromPosition(valve.position, valve.openDegreesMax);
|
||||
valve.isOpen = valve.position > 0;
|
||||
|
||||
if (!state.apiBase) {
|
||||
storageSet("valveState", state.valves);
|
||||
render();
|
||||
updateStatus(`Демо: ручная позиция ${valve.name} = ${value}%`, "ok");
|
||||
return;
|
||||
}
|
||||
|
||||
const payload = {
|
||||
...writePayloadBase(valveId, "valve"),
|
||||
mode: "manual",
|
||||
position: valve.position,
|
||||
openDegrees: valve.openDegrees,
|
||||
openDegreesMax: valve.openDegreesMax,
|
||||
id: valveId,
|
||||
};
|
||||
|
||||
try {
|
||||
await sendWithFallback(API_PATHS.valveWrite, valveId, payload);
|
||||
await loadState();
|
||||
render();
|
||||
updateStatus(`Позиция ${valve.name} обновлена`, "ok");
|
||||
} catch (error) {
|
||||
updateStatus(`Ошибка позиции ${valve.name}: ${error.message}`, "error");
|
||||
}
|
||||
}
|
||||
|
||||
async function calibrateValve(valveId) {
|
||||
const valve = findValveById(valveId);
|
||||
if (!valve) return;
|
||||
|
||||
if (!state.apiBase) {
|
||||
valve.position = 0;
|
||||
valve.openDegrees = 0;
|
||||
valve.isOpen = false;
|
||||
storageSet("valveState", state.valves);
|
||||
render();
|
||||
updateStatus(`Демо: калибровка ${valve.name} выполнена`, "ok");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await postWithFallback(API_PATHS.valveCalibrate, valveId, {});
|
||||
const updated = response?.valve || response;
|
||||
if (updated && updated.id) {
|
||||
const index = state.valves.findIndex((item) => item.id === valveId);
|
||||
if (index !== -1) {
|
||||
state.valves[index] = normalizeValve(updated);
|
||||
} else {
|
||||
await loadState();
|
||||
}
|
||||
} else {
|
||||
await loadState();
|
||||
}
|
||||
render();
|
||||
updateStatus(`Калибровка ${valve.name} выполнена`, "ok");
|
||||
} catch (error) {
|
||||
updateStatus(`Ошибка калибровки ${valve.name}: ${error.message}`, "error");
|
||||
}
|
||||
}
|
||||
|
||||
async function calibrateAllValves(silent = false) {
|
||||
if (!state.apiBase) {
|
||||
state.valves = state.valves.map((valve) => ({
|
||||
...valve,
|
||||
position: 0,
|
||||
openDegrees: 0,
|
||||
isOpen: false,
|
||||
}));
|
||||
render();
|
||||
if (!silent) {
|
||||
updateStatus("Демо: калибровка всех клапанов выполнена", "ok");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await apiPostFallback(API_PATHS.valvesCalibrateAll, {});
|
||||
const payload = Array.isArray(response?.valves) ? response.valves : null;
|
||||
if (payload) {
|
||||
state.valves = payload.map(normalizeValve);
|
||||
} else {
|
||||
await loadState();
|
||||
}
|
||||
render();
|
||||
if (!silent) {
|
||||
updateStatus("Калибровка всех клапанов выполнена", "ok");
|
||||
}
|
||||
} catch (error) {
|
||||
if (!silent) {
|
||||
updateStatus(`Ошибка калибровки всех клапанов: ${error.message}`, "error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function simulateSensorPhysics() {
|
||||
if (state.timer) clearInterval(state.timer);
|
||||
state.timer = setInterval(() => {
|
||||
for (const sensor of state.sensors) {
|
||||
const valve = findValveByZone(sensor.zone);
|
||||
const v = valve || {};
|
||||
let target;
|
||||
if (v.mode === "manual") {
|
||||
target = 20 + (clamp(v.position ?? 0, 0, 100) / 100) * 70;
|
||||
} else {
|
||||
target = v.targetTemp ?? sensor.setpoint ?? 30;
|
||||
}
|
||||
const drift = target - sensor.value;
|
||||
const noise = (Math.random() - 0.5) * 0.2;
|
||||
sensor.value = clamp(sensor.value + drift * 0.08 + noise, -40, 150);
|
||||
sensor.value = Number(sensor.value.toFixed(2));
|
||||
}
|
||||
for (const valve of state.valves) {
|
||||
const maxOpenDegrees = Number(valve.openDegreesMax) > 0 ? Number(valve.openDegreesMax) : DEFAULT_OPEN_DEGREES_MAX;
|
||||
valve.openDegrees = Math.round(degreesFromPosition(valve.position ?? 0, maxOpenDegrees));
|
||||
valve.isOpen = (valve.position ?? 0) > 0;
|
||||
}
|
||||
storageSet("sensorState", state.sensors);
|
||||
storageSet("valveState", state.valves);
|
||||
render();
|
||||
}, 2500);
|
||||
}
|
||||
|
||||
function attachEvents() {
|
||||
refreshBtn.addEventListener("click", () => {
|
||||
const url = normalizeApiUrl(apiInput.value);
|
||||
state.apiBase = url;
|
||||
storageSet("apiBase", state.apiBase);
|
||||
refreshAll(true);
|
||||
refreshPorts(false);
|
||||
});
|
||||
|
||||
refreshPortsBtn.addEventListener("click", () => {
|
||||
refreshPorts();
|
||||
});
|
||||
|
||||
connectPortBtn.addEventListener("click", async () => {
|
||||
if (serialConnected) {
|
||||
await disconnectPort();
|
||||
setConnectButtonText();
|
||||
return;
|
||||
}
|
||||
await connectSelectedPort();
|
||||
setConnectButtonText();
|
||||
});
|
||||
|
||||
if (calibrateAllBtn) {
|
||||
calibrateAllBtn.addEventListener("click", () => {
|
||||
calibrateAllValves(false);
|
||||
});
|
||||
}
|
||||
|
||||
saveApiBtn.addEventListener("click", () => {
|
||||
const url = normalizeApiUrl(apiInput.value);
|
||||
state.apiBase = url;
|
||||
storageSet("apiBase", url);
|
||||
if (!url) {
|
||||
updateStatus("API отключён; переход в демо", "warn");
|
||||
statusEl.textContent = "Режим: демо (без API)";
|
||||
statusEl.className = "status status-warn";
|
||||
} else {
|
||||
updateStatus(`Сохранён API: ${state.apiBase}`, "ok");
|
||||
statusEl.textContent = "Сохранён адрес API";
|
||||
statusEl.className = "status status-ok";
|
||||
}
|
||||
render();
|
||||
refreshPorts(false);
|
||||
if (!url) {
|
||||
serialStatus.textContent = "COM: не подключён";
|
||||
serialStatus.className = "status status-warn";
|
||||
connectPortBtn.textContent = "Подключить";
|
||||
selectedPort = "";
|
||||
serialConnected = false;
|
||||
}
|
||||
});
|
||||
|
||||
sensorsEl.addEventListener("click", (event) => {
|
||||
const target = event.target;
|
||||
if (target.classList.contains("applySetpoint")) {
|
||||
applySetpoint(target.dataset.id);
|
||||
}
|
||||
});
|
||||
|
||||
valvesEl.addEventListener("click", (event) => {
|
||||
const target = event.target;
|
||||
if (target.classList.contains("modeBtn")) {
|
||||
const button = target.closest(".toggle");
|
||||
const valveId = button.dataset.id;
|
||||
const mode = target.dataset.mode;
|
||||
const card = button.closest(".item");
|
||||
if (!card) return;
|
||||
const autoBlock = card.querySelector(".valveAuto");
|
||||
const manualBlock = card.querySelector(".valveManual");
|
||||
const applyManualBtn = card.querySelector(".applyManual");
|
||||
|
||||
button.querySelectorAll(".modeBtn").forEach((b) => b.classList.remove("active"));
|
||||
target.classList.add("active");
|
||||
if (mode === "auto") {
|
||||
autoBlock.classList.remove("hidden");
|
||||
manualBlock.classList.add("hidden");
|
||||
applyManualBtn.classList.add("hidden");
|
||||
} else {
|
||||
autoBlock.classList.add("hidden");
|
||||
manualBlock.classList.remove("hidden");
|
||||
applyManualBtn.classList.remove("hidden");
|
||||
}
|
||||
applyValveMode(valveId, mode);
|
||||
}
|
||||
if (target.classList.contains("applyTarget")) {
|
||||
applyValveTarget(target.dataset.id);
|
||||
}
|
||||
if (target.classList.contains("applyManual")) {
|
||||
applyValvePosition(target.dataset.id);
|
||||
}
|
||||
if (target.classList.contains("calibrateValve")) {
|
||||
calibrateValve(target.dataset.id);
|
||||
}
|
||||
});
|
||||
|
||||
valvesEl.addEventListener("input", (event) => {
|
||||
const target = event.target;
|
||||
if (target.classList.contains("position")) {
|
||||
const label = target.closest("label");
|
||||
const span = label ? label.querySelector("strong") : null;
|
||||
if (span) span.textContent = `${target.value}%`;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function refreshAll(silent = false) {
|
||||
try {
|
||||
await loadState();
|
||||
render();
|
||||
if (!silent) updateStatus("Данные обновлены", "ok");
|
||||
} catch (error) {
|
||||
if (state.apiBase) {
|
||||
statusEl.textContent = `Ошибка API: ${error.message}`;
|
||||
statusEl.className = "status status-error";
|
||||
globalStatus.textContent = "Не удалось получить данные с API. Откат в демо";
|
||||
globalStatus.className = "status-warn";
|
||||
await refreshPorts();
|
||||
render();
|
||||
} else {
|
||||
updateStatus(`Демо инициализирован: ${error.message}`, "warn");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function connectSelectedPortLegacy() {
|
||||
if (!state.apiBase) {
|
||||
updateStatus("Укажите API endpoint для работы с COM-портами", "warn");
|
||||
return;
|
||||
}
|
||||
const value = comPortSelect.value;
|
||||
if (!value) {
|
||||
updateStatus("Выберите COM порт", "warn");
|
||||
return;
|
||||
}
|
||||
const payload = { port: value, baud: 115200, baudrate: 115200, parity: "N", stopbits: 1, bytesize: 8, timeout: 0.3 };
|
||||
try {
|
||||
await apiPostFallback(SERIAL_API_PATHS.connect, payload);
|
||||
selectedPort = value;
|
||||
serialConnected = true;
|
||||
storageSet("comPort", value);
|
||||
serialStatus.textContent = `COM: подключен (${value})`;
|
||||
serialStatus.className = "status status-ok";
|
||||
connectPortBtn.textContent = "Отключить";
|
||||
updateStatus(`COM ${value} подключен`, "ok");
|
||||
} catch (error) {
|
||||
serialConnected = false;
|
||||
serialStatus.textContent = "COM: ошибка подключения";
|
||||
serialStatus.className = "status status-error";
|
||||
connectPortBtn.textContent = "Подключить";
|
||||
storageSet("comPort", "");
|
||||
selectedPort = "";
|
||||
updateStatus(`Ошибка подключения COM: ${error.message}`, "error");
|
||||
}
|
||||
}
|
||||
|
||||
async function disconnectPortLegacy() {
|
||||
if (!state.apiBase) return;
|
||||
try {
|
||||
await apiPostFallback(SERIAL_API_PATHS.disconnect, {});
|
||||
} catch {
|
||||
// ignore
|
||||
} finally {
|
||||
serialConnected = false;
|
||||
selectedPort = "";
|
||||
storageSet("comPort", "");
|
||||
serialStatus.textContent = "COM: не подключен";
|
||||
serialStatus.className = "status status-warn";
|
||||
connectPortBtn.textContent = "Подключить";
|
||||
}
|
||||
}
|
||||
|
||||
async function restoreSerialUiLegacy() {
|
||||
if (!state.apiBase) return;
|
||||
try {
|
||||
const status = await apiGetFallback(SERIAL_API_PATHS.status);
|
||||
serialConnected = Boolean(status?.connected);
|
||||
const port = status?.port || status?.selected;
|
||||
if (serialConnected && port) {
|
||||
selectedPort = port;
|
||||
comPortSelect.value = selectedPort;
|
||||
serialStatus.textContent = `COM: подключен (${selectedPort})`;
|
||||
serialStatus.className = "status status-ok";
|
||||
connectPortBtn.textContent = "Отключить";
|
||||
storageSet("comPort", selectedPort);
|
||||
} else {
|
||||
selectedPort = "";
|
||||
storageSet("comPort", "");
|
||||
serialStatus.textContent = "COM: не подключен";
|
||||
serialStatus.className = "status status-warn";
|
||||
connectPortBtn.textContent = "Подключить";
|
||||
}
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
}
|
||||
|
||||
async function refreshPorts(silent = false) {
|
||||
if (!state.apiBase) {
|
||||
ensureApiBase();
|
||||
}
|
||||
if (!state.apiBase) {
|
||||
if (!silent) {
|
||||
updateStatus("Set API base URL first", "warn");
|
||||
}
|
||||
return;
|
||||
}
|
||||
setSerialBusyState(true, "Scanning COM ports...");
|
||||
try {
|
||||
const payload = await fetchComPorts();
|
||||
const ports = Array.isArray(payload?.ports) ? payload.ports : [];
|
||||
const preferredPort = payload?.selected || selectedPort || storageGet("comPort", "");
|
||||
applyPortOptions(ports, preferredPort);
|
||||
if (!silent) {
|
||||
updateStatus(
|
||||
ports.length ? `Found COM ports: ${ports.length}` : "No COM ports found",
|
||||
ports.length ? "ok" : "warn"
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
applyPortOptions([], "");
|
||||
updateStatus(`Port scan error: ${error.message}`, "error");
|
||||
} finally {
|
||||
setSerialBusyState(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function connectSelectedPort() {
|
||||
if (!state.apiBase) {
|
||||
updateStatus("Set API base URL first", "warn");
|
||||
return;
|
||||
}
|
||||
const requestedPort = comPortSelect.value;
|
||||
if (!requestedPort) {
|
||||
updateStatus("Select COM port", "warn");
|
||||
return;
|
||||
}
|
||||
setSerialBusyState(true, `Connecting ${requestedPort}...`);
|
||||
try {
|
||||
const payload = {
|
||||
port: requestedPort,
|
||||
baud: 115200,
|
||||
baudrate: 115200,
|
||||
parity: "N",
|
||||
stopBits: 1,
|
||||
stopbits: 1,
|
||||
byteSize: 8,
|
||||
bytesize: 8,
|
||||
timeout: 0.3,
|
||||
};
|
||||
const status = await apiPostFallback(SERIAL_API_PATHS.connect, payload);
|
||||
applySerialStateFromPayload({
|
||||
connected: true,
|
||||
port: status?.port || requestedPort,
|
||||
selected: status?.selected || requestedPort,
|
||||
});
|
||||
await calibrateAllValves(true);
|
||||
updateStatus(`COM ${requestedPort} connected`, "ok");
|
||||
await refreshPorts(true);
|
||||
} catch (error) {
|
||||
applySerialStateFromPayload({ connected: false });
|
||||
updateStatus(`COM connect error: ${error.message}`, "error");
|
||||
} finally {
|
||||
setSerialBusyState(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function connectRtuPort() {
|
||||
if (!state.apiBase) {
|
||||
updateStatus("Укажи API endpoint для Modbus RTU", "warn");
|
||||
return;
|
||||
}
|
||||
|
||||
const value = comPortSelect?.value || selectedPort;
|
||||
if (!value) {
|
||||
updateStatus("Выберите COM порт", "warn");
|
||||
return;
|
||||
}
|
||||
|
||||
const unitId = Number(modbusSlaveId?.value || 3);
|
||||
storageSet("modbusTransport", "rtu");
|
||||
storageSet("comPort", value);
|
||||
storageSet("modbusSlaveId", String(unitId));
|
||||
setSerialBusyState(true, `Modbus RTU: подключение ${value}, slave ${unitId}...`);
|
||||
try {
|
||||
const status = await apiPostFallback(SERIAL_API_PATHS.connect, {
|
||||
transport: "rtu",
|
||||
mode: "rtu",
|
||||
port: value,
|
||||
baud: 115200,
|
||||
baudrate: 115200,
|
||||
parity: "N",
|
||||
stopbits: 1,
|
||||
bytesize: 8,
|
||||
timeout: 0.8,
|
||||
unitId,
|
||||
slaveId: unitId,
|
||||
});
|
||||
applySerialStateFromPayload({
|
||||
...(status || {}),
|
||||
connected: Boolean(status?.connected ?? status?.ok),
|
||||
transport: "rtu",
|
||||
port: value,
|
||||
});
|
||||
updateStatus(`Modbus RTU connected: ${value}, slave ${unitId}`, "ok");
|
||||
} catch (error) {
|
||||
applySerialStateFromPayload({ connected: false, transport: "rtu" });
|
||||
updateStatus(`Modbus RTU error: ${error.message}`, "error");
|
||||
} finally {
|
||||
setSerialBusyState(false);
|
||||
applyModbusTransportView();
|
||||
}
|
||||
}
|
||||
|
||||
async function connectTcpPort() {
|
||||
if (!state.apiBase) {
|
||||
updateStatus("Укажи API endpoint для Modbus TCP", "warn");
|
||||
return;
|
||||
}
|
||||
|
||||
const host = (tcpHost?.value || "").trim();
|
||||
const port = Number(tcpPort?.value || 502);
|
||||
const unitId = Number(modbusSlaveId?.value || 3);
|
||||
if (!host) {
|
||||
updateStatus("Укажи IP адрес Modbus TCP", "warn");
|
||||
return;
|
||||
}
|
||||
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
||||
updateStatus("Некорректный TCP порт", "warn");
|
||||
return;
|
||||
}
|
||||
|
||||
storageSet("modbusTransport", "tcp");
|
||||
storageSet("tcpHost", host);
|
||||
storageSet("tcpPort", String(port));
|
||||
storageSet("modbusSlaveId", String(unitId));
|
||||
setSerialBusyState(true, `Modbus TCP: подключение ${host}:${port}, slave ${unitId}...`);
|
||||
try {
|
||||
const status = await apiPostFallback(SERIAL_API_PATHS.connect, {
|
||||
transport: "tcp",
|
||||
mode: "tcp",
|
||||
host,
|
||||
ip: host,
|
||||
tcpPort: port,
|
||||
tcp_port: port,
|
||||
port,
|
||||
unitId,
|
||||
slaveId: unitId,
|
||||
timeout: 0.8,
|
||||
});
|
||||
applySerialStateFromPayload({
|
||||
...(status || {}),
|
||||
connected: Boolean(status?.connected ?? status?.ok),
|
||||
transport: "tcp",
|
||||
host,
|
||||
tcpPort: port,
|
||||
address: `${host}:${port}`,
|
||||
});
|
||||
updateStatus(`Modbus TCP connected: ${host}:${port}, slave ${unitId}`, "ok");
|
||||
} catch (error) {
|
||||
applySerialStateFromPayload({ connected: false, transport: "tcp" });
|
||||
updateStatus(`Modbus TCP error: ${error.message}`, "error");
|
||||
} finally {
|
||||
setSerialBusyState(false);
|
||||
applyModbusTransportView();
|
||||
}
|
||||
}
|
||||
|
||||
if (connectPortBtn) {
|
||||
connectPortBtn.addEventListener("click", async (event) => {
|
||||
event.preventDefault();
|
||||
event.stopImmediatePropagation();
|
||||
|
||||
if (serialConnected) {
|
||||
await disconnectPort();
|
||||
setConnectButtonText();
|
||||
applyModbusTransportView();
|
||||
return;
|
||||
}
|
||||
|
||||
if (getModbusTransport() === "tcp") {
|
||||
await connectTcpPort();
|
||||
} else {
|
||||
await connectRtuPort();
|
||||
}
|
||||
setConnectButtonText();
|
||||
}, true);
|
||||
}
|
||||
|
||||
async function disconnectPort() {
|
||||
if (!state.apiBase) {
|
||||
applySerialStateFromPayload({ connected: false });
|
||||
return;
|
||||
}
|
||||
setSerialBusyState(true, "Disconnecting...");
|
||||
try {
|
||||
const status = await apiPostFallback(SERIAL_API_PATHS.disconnect, {});
|
||||
applySerialStateFromPayload(status || { connected: false });
|
||||
} catch {
|
||||
// ignore
|
||||
} finally {
|
||||
applySerialStateFromPayload({ connected: false });
|
||||
setSerialBusyState(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function restoreSerialUi() {
|
||||
if (!state.apiBase) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const status = await apiGetFallback(SERIAL_API_PATHS.status);
|
||||
applySerialStateFromPayload(status);
|
||||
if (status?.connected) {
|
||||
await calibrateAllValves(true);
|
||||
}
|
||||
} catch {
|
||||
applySerialStateFromPayload({ connected: false });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Channel location selector
|
||||
document.addEventListener("change", (event) => {
|
||||
const select = event.target.closest(".sensorLocation");
|
||||
if (!select) return;
|
||||
|
||||
const sensorId = select.dataset.id;
|
||||
const sensor = state.sensors.find((item) => item.id === sensorId);
|
||||
if (sensor) {
|
||||
sensor.location = select.value;
|
||||
storageSet("sensorState", state.sensors);
|
||||
}
|
||||
|
||||
const locations = storageGet("sensorLocations", {});
|
||||
locations[sensorId] = select.value;
|
||||
storageSet("sensorLocations", locations);
|
||||
|
||||
render();
|
||||
});
|
||||
|
||||
// Controls inside sensor processing channel cards
|
||||
document.addEventListener("input", (event) => {
|
||||
const targetInput = event.target.closest(".full-channel-card .targetTemp");
|
||||
if (targetInput) {
|
||||
const card = targetInput.closest(".full-channel-card");
|
||||
const valveId = card?.dataset.id;
|
||||
const targetTemp = parseGuiNumber(targetInput.value, 0);
|
||||
const valve = state.valves.find((item) => item.id === valveId);
|
||||
if (valve) {
|
||||
valve.targetTemp = targetTemp;
|
||||
}
|
||||
|
||||
const valveNumber = Number(String(valveId || "").replace(/\D/g, "")) || 1;
|
||||
const sensorIndex = Math.max(0, Math.floor((valveNumber - 1) / 2));
|
||||
const sensor = state.sensors[sensorIndex];
|
||||
if (sensor) {
|
||||
sensor.setpoint = targetTemp;
|
||||
}
|
||||
|
||||
const setpointDrafts = storageGet("setpointDrafts", {});
|
||||
if (sensor?.id) {
|
||||
setpointDrafts[sensor.id] = targetInput.value;
|
||||
}
|
||||
if (valveId) {
|
||||
setpointDrafts[valveId] = targetInput.value;
|
||||
}
|
||||
storageSet("setpointDrafts", setpointDrafts);
|
||||
storageSet("sensorState", state.sensors);
|
||||
storageSet("valveState", state.valves);
|
||||
return;
|
||||
}
|
||||
|
||||
const positionInput = event.target.closest(".full-channel-card .position");
|
||||
if (!positionInput) return;
|
||||
const label = positionInput.closest("label");
|
||||
const value = Number(positionInput.value || 0);
|
||||
const strong = label?.querySelector("strong");
|
||||
if (strong) strong.textContent = `${value}%`;
|
||||
});
|
||||
|
||||
document.addEventListener("click", async (event) => {
|
||||
const button = event.target.closest(".full-channel-card button");
|
||||
if (!button) return;
|
||||
|
||||
const card = button.closest(".full-channel-card");
|
||||
const valveId = card?.dataset.id;
|
||||
if (!card || !valveId) return;
|
||||
|
||||
if (button.classList.contains("modeBtn")) {
|
||||
const mode = button.dataset.mode === "manual" ? "manual" : "auto";
|
||||
card.querySelectorAll(".modeBtn").forEach((item) => item.classList.remove("active"));
|
||||
button.classList.add("active");
|
||||
const valve = state.valves.find((item) => item.id === valveId);
|
||||
if (valve) valve.mode = mode;
|
||||
storageSet("valveState", state.valves);
|
||||
await sendWithFallback(API_PATHS.valveWrite, valveId, {
|
||||
...writePayloadBase(valveId, "valve"),
|
||||
id: valveId,
|
||||
mode,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (button.classList.contains("applyTarget")) {
|
||||
const targetInput = card.querySelector(".targetTemp");
|
||||
const targetTemp = parseGuiNumber(targetInput?.value, 0);
|
||||
const valve = state.valves.find((item) => item.id === valveId);
|
||||
if (valve) valve.targetTemp = targetTemp;
|
||||
const valveNumber = Number(String(valveId || "").replace(/\D/g, "")) || 1;
|
||||
const sensorIndex = Math.max(0, Math.floor((valveNumber - 1) / 2));
|
||||
const sensor = state.sensors[sensorIndex];
|
||||
if (sensor) sensor.setpoint = targetTemp;
|
||||
const setpointDrafts = storageGet("setpointDrafts", {});
|
||||
if (sensor?.id) {
|
||||
setpointDrafts[sensor.id] = targetInput?.value ?? String(targetTemp);
|
||||
}
|
||||
setpointDrafts[valveId] = targetInput?.value ?? String(targetTemp);
|
||||
storageSet("setpointDrafts", setpointDrafts);
|
||||
storageSet("sensorState", state.sensors);
|
||||
storageSet("valveState", state.valves);
|
||||
await sendWithFallback(API_PATHS.valveWrite, valveId, {
|
||||
...writePayloadBase(valveId, "valve"),
|
||||
id: valveId,
|
||||
targetTemp,
|
||||
});
|
||||
await loadState();
|
||||
return;
|
||||
}
|
||||
|
||||
if (button.classList.contains("applyManual")) {
|
||||
const positionInput = card.querySelector(".position");
|
||||
const position = Number(positionInput?.value || 0);
|
||||
const valve = state.valves.find((item) => item.id === valveId);
|
||||
if (valve) {
|
||||
valve.position = position;
|
||||
valve.isOpen = position > 0;
|
||||
}
|
||||
storageSet("valveState", state.valves);
|
||||
await sendWithFallback(API_PATHS.valveWrite, valveId, {
|
||||
...writePayloadBase(valveId, "valve"),
|
||||
id: valveId,
|
||||
position,
|
||||
});
|
||||
await loadState();
|
||||
return;
|
||||
}
|
||||
|
||||
if (button.classList.contains("calibrateValve")) {
|
||||
await postWithFallback(API_PATHS.valveCalibrate, valveId, {
|
||||
...writePayloadBase(valveId, "valve"),
|
||||
id: valveId,
|
||||
});
|
||||
await loadState();
|
||||
}
|
||||
});
|
||||
|
||||
// Quick manual open/close buttons for channel cards
|
||||
document.addEventListener("click", (event) => {
|
||||
const quickButton = event.target.closest(".quickPosition");
|
||||
if (!quickButton) return;
|
||||
|
||||
const card = quickButton.closest(".valve-item");
|
||||
if (!card) return;
|
||||
|
||||
const manualButton = card.querySelector(".valveManual");
|
||||
if (manualButton && !manualButton.classList.contains("active")) {
|
||||
manualButton.click();
|
||||
}
|
||||
|
||||
const positionInput = card.querySelector(".position");
|
||||
if (positionInput) {
|
||||
positionInput.value = quickButton.dataset.position || "0";
|
||||
positionInput.dispatchEvent(new Event("input", { bubbles: true }));
|
||||
}
|
||||
|
||||
const applyButton = card.querySelector(".applyManual");
|
||||
if (applyButton) applyButton.click();
|
||||
});
|
||||
window.addEventListener("load", async () => {
|
||||
apiInput.value = storageGet("apiBase", "");
|
||||
state.apiBase = normalizeApiUrl(apiInput.value);
|
||||
initModbusTransportControls();
|
||||
ensureApiBase();
|
||||
selectedPort = storageGet("comPort", "");
|
||||
attachEvents();
|
||||
await refreshAll(true);
|
||||
if (getModbusTransport() !== "tcp") {
|
||||
await refreshPorts(true);
|
||||
}
|
||||
render();
|
||||
if (selectedPort) {
|
||||
comPortSelect.value = selectedPort;
|
||||
}
|
||||
await restoreSerialUi();
|
||||
setInterval(() => {
|
||||
if (state.apiBase) {
|
||||
loadState().then(render).catch(() => {});
|
||||
}
|
||||
}, 3000);
|
||||
});
|
||||
72
john103C6T6NewVer/index.html
Normal file
72
john103C6T6NewVer/index.html
Normal file
@@ -0,0 +1,72 @@
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Тепло и клапаны — управление</title>
|
||||
<link rel="stylesheet" href="styles.css?v=20260625-ds18b20-id-1" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="shell">
|
||||
<header class="header">
|
||||
<h1>Панель температуры и клапанов</h1>
|
||||
<p>Мониторинг датчиков, управление уставками и ручным/авто управлением клапанов.</p>
|
||||
</header>
|
||||
|
||||
<section class="panel">
|
||||
<label for="apiBase">API endpoint</label>
|
||||
<div class="api-row">
|
||||
<input id="apiBase" placeholder="http://127.0.0.1:1923 (пусто = демо)" value="" />
|
||||
<button id="refreshBtn">Обновить</button>
|
||||
<button id="saveApiBtn">Сохранить адрес API</button>
|
||||
<span id="status" class="status">Режим: не подключен</span>
|
||||
</div>
|
||||
<p class="hint">Если API не задан, интерфейс работает в автономном демо-режиме с локальным хранением.</p>
|
||||
<div class="serial-block">
|
||||
<div class="serial-row">
|
||||
|
||||
<label for="modbusTransport">Обмен</label>
|
||||
<select id="modbusTransport">
|
||||
<option value="rtu">Modbus RTU / COM</option>
|
||||
<option value="tcp">Modbus TCP / IP</option>
|
||||
</select>
|
||||
<label for="modbusSlaveId">Slave ID</label>
|
||||
<input id="modbusSlaveId" type="number" min="1" max="247" value="3">
|
||||
</select>
|
||||
<label class="rtu-field" for="comPortSelect">COM порт</label>
|
||||
<select id="comPortSelect" class="rtu-field">
|
||||
<option value="">Порт не выбран</option>
|
||||
</select>
|
||||
<button id="refreshPortsBtn" class="rtu-field">Обновить порты</button>
|
||||
<label class="tcp-field hidden" for="tcpHost">IP</label>
|
||||
<input id="tcpHost" class="tcp-field hidden" type="text" value="192.168.0.10" placeholder="192.168.0.10">
|
||||
<label class="tcp-field hidden" for="tcpPort">TCP порт</label>
|
||||
<input id="tcpPort" class="tcp-field hidden" type="number" min="1" max="65535" value="502">
|
||||
<button id="connectPortBtn">Подключить</button>
|
||||
<button id="calibrateAllBtn">Калибровать все</button>
|
||||
<span id="serialStatus" class="status status-warn">COM: не подключён</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="panel grid">
|
||||
<article class="card">
|
||||
<h2>Датчики температуры</h2>
|
||||
<div id="sensors" class="list"></div>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<h2>Клапаны</h2>
|
||||
<div id="valves" class="list"></div>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<footer class="footer">
|
||||
<span>Статус: </span>
|
||||
<span id="globalStatus">Ожидание...</span>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script src="app.js?v=20260625-setpoint-draft-1"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
F:\set\workspace\setcorp\set506\git_project\ds128b20\new rev\john103C8T6\.codex-restored-sessions\codex_sessions_restored_20260609132029
|
||||
@@ -0,0 +1,16 @@
|
||||
# Restored Codex sessions
|
||||
|
||||
Source archive: `C:\Users\z\Documents\Codex\2026-06-09\c-users-z-codex-sessions\outputs\codex_sessions_restored_20260609132029`
|
||||
Project CWD: `F:\set\workspace\setcorp\set506\git_project\ds128b20\new rev\john103C8T6`
|
||||
Generated copy: `2026-06-09T16:29:15.1490867+03:00`
|
||||
|
||||
## Dialogues
|
||||
|
||||
| Started | Title | Transcript |
|
||||
|---|---|---|
|
||||
| 2026-05-28T16:32:05.792Z | собери проект убери ошибки ,если нужны библиотеки подтяни их уровнем выше | [transcript](transcripts/001_14220bef_session.md) |
|
||||
| 2026-05-28T16:47:52.141Z | настроить RTC с календарем и backup в modbuds сделать регистр времени часы минуты секунды дата | [transcript](transcripts/002_a30c80b2_RTC_backup_modbuds.md) |
|
||||
|
||||
## Restored files from patch records
|
||||
|
||||
Recovered embedded file contents, if any, are in `files_from_patches/`. Original project files were not overwritten.
|
||||
42
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/.mxproject
Normal file
42
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/.mxproject
Normal file
File diff suppressed because one or more lines are too long
53
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/dma.h
Normal file
53
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/dma.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file dma.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the dma.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __DMA_H__
|
||||
#define __DMA_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* DMA memory to memory transfer handles -------------------------------------*/
|
||||
extern DMA_HandleTypeDef hdma_memtomem_dma1_channel1;
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_DMA_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __DMA_H__ */
|
||||
|
||||
150
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/main.h
Normal file
150
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/main.h
Normal file
@@ -0,0 +1,150 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
***************************************************************
|
||||
* 1 2 3 4 5 6 7 8 *
|
||||
* --- +++ *
|
||||
* *
|
||||
*****************************************************************
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* @file : main.h
|
||||
* @brief : Header for main.c file.
|
||||
* This file contains the common defines of the application.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __MAIN_H
|
||||
#define __MAIN_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "Proj_setup.h"
|
||||
#include "dallas_tools.h"
|
||||
#include "modbus.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FuncOK=0,
|
||||
FuncERROR=1
|
||||
|
||||
}FuncStat;
|
||||
|
||||
|
||||
typedef enum {
|
||||
CONFIG_DEVICE_ID = 0,
|
||||
CONFIG_BAUDRATE,
|
||||
CONFIG_CALIBRATION,
|
||||
CONFIG_SETTINGS
|
||||
} ConfigParams;
|
||||
|
||||
|
||||
|
||||
typedef enum {
|
||||
STATE_OPEN_VALVE = 0, // open
|
||||
STATE_CLOSE_VALVE= 1 // close
|
||||
} ValveState;
|
||||
typedef struct
|
||||
{
|
||||
uint32_t id[2];
|
||||
float temp;
|
||||
uint16_t location;
|
||||
uint8_t t_open;
|
||||
float t_set;
|
||||
uint8_t t_close;
|
||||
uint8_t status_T_sense:1 ;
|
||||
ValveState state;
|
||||
uint16_t count;
|
||||
}TEMP_TypeDef;
|
||||
typedef struct {
|
||||
uint32_t init_tsens : 1; // Update Interrupt Flag (бит 0) — флаг переполнения/обновления
|
||||
|
||||
// ... (другие биты могут быть зарезервированы или использоваться в расширенных таймерах)
|
||||
} Flags_TypeDef;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
#define reset_blink_delay 50
|
||||
#define rest_iter 10
|
||||
#define GPIOB11_valve MB_DATA.Coils.coils[0].state_val_bit.state_val_01
|
||||
#define ralay_5v_on GPIOA->ODR&(1<<10);
|
||||
|
||||
|
||||
|
||||
extern void handle_command(char* cmd);
|
||||
typedef void (*FunctionPointer)(void);
|
||||
|
||||
uint16_t handle_valves(TEMP_TypeDef* temp_sense[MAX_SENSE]);
|
||||
void init_setpoint_all_T_sense(TEMP_TypeDef* temp_sense, int size_array);
|
||||
void iwdg_refresh(void);
|
||||
void led_blink(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,uint8_t iter,uint16_t delay);
|
||||
FuncStat Field_modbus(MB_DataStructureTypeDef* MB_DATA, Flags_TypeDef* flag);
|
||||
FuncStat packStruct(MB_DataStructureTypeDef* MB_DATA,int sizeARR);
|
||||
void Check_Tconnect(MB_DataStructureTypeDef* MB_DATA, Flags_TypeDef* flag ,DALLAS_HandleTypeDef* hdallas, int a[50]);
|
||||
FuncStat value_control(void );
|
||||
|
||||
void reinit_t_sens(void);
|
||||
HAL_StatusTypeDef ModbusMaster_Request(RS_MsgTypeDef *request,
|
||||
void (*callback)(RS_HandleTypeDef *, RS_MsgTypeDef *));
|
||||
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
/* USER CODE END EC */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
/* USER CODE END EM */
|
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
void Error_Handler(void);
|
||||
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
#define Relay_dc5v_Pin GPIO_PIN_10
|
||||
#define Relay_dc5v_GPIO_Port GPIOA
|
||||
#define One_wire_Pin GPIO_PIN_15
|
||||
#define One_wire_GPIO_Port GPIOA
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __MAIN_H */
|
||||
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file ow_port.h
|
||||
* @brief This file includes the driver for port for OneWire purposes
|
||||
******************************************************************************
|
||||
*/
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef ONEWIRE_PORT_H
|
||||
#define ONEWIRE_PORT_H
|
||||
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
/* I/O Port ------------------------------------------------------------------*/
|
||||
//#define LL_Driver ///< использовать CMSIS для управления ножкой
|
||||
#define CMSIS_Driver ///< использовать CMSIS для управления ножкой
|
||||
// если ничего не выбрано - используется HAL
|
||||
|
||||
|
||||
/**
|
||||
* @def OW_GPIO_Port
|
||||
* @brief Порт вывода для шины 1-Wire.
|
||||
* @details Указывает порт GPIO, к которому подключена линия данных 1-Wire (например, для DS18B20).
|
||||
*/
|
||||
#define OW_GPIO_Port GPIOA
|
||||
|
||||
/**
|
||||
* @def OW_Pin_Numb
|
||||
* @brief Номер пина в порту OW_GPIO_Port.
|
||||
* @details Используется для формирования маски пина и настройки ввода/вывода.
|
||||
*/
|
||||
#define OW_Pin_Numb 15
|
||||
|
||||
/**
|
||||
* @def OW_Pin
|
||||
* @brief Маска пина, соответствующая номеру OW_Pin_Numb.
|
||||
* @details Используется при доступе к регистрам порта для управления состоянием линии 1-Wire.
|
||||
*/
|
||||
#define OW_Pin (1<<OW_Pin_Numb)
|
||||
|
||||
/**
|
||||
* @def OW_TIM
|
||||
* @brief Аппаратный таймер для формирования временных интервалов протокола 1-Wire.
|
||||
* @details Применяется для создания точных задержек при обмене данными по шине 1-Wire.
|
||||
*/
|
||||
#define OW_TIM TIM1
|
||||
|
||||
/**
|
||||
* @def OW_TIM_1US_PERIOD
|
||||
* @brief Количество тактов таймера OW_TIM, соответствующее 1 микросекунде.
|
||||
* @details Вычисляется на основе частоты таймера. Например, для таймера с частотой 24 МГц значение будет равно 24.
|
||||
*/
|
||||
#define OW_TIM_1US_PERIOD 72
|
||||
|
||||
|
||||
/* OneWire Timings -----------------------------------------------------------*/
|
||||
void OneWire_Delay_us(uint32_t us);
|
||||
/* Common Register -----------------------------------------------------------*/
|
||||
#endif /* ONEWIRE_PORT_H */
|
||||
65
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/rtc.h
Normal file
65
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/rtc.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file rtc.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the rtc.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __RTC_H__
|
||||
#define __RTC_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern RTC_HandleTypeDef hrtc;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
typedef struct
|
||||
{
|
||||
uint16_t hours;
|
||||
uint16_t minutes;
|
||||
uint16_t seconds;
|
||||
uint16_t date;
|
||||
uint16_t month;
|
||||
uint16_t year;
|
||||
uint16_t weekday;
|
||||
} RTC_CalendarTypeDef;
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_RTC_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
uint8_t RTC_CalendarIsValid(const RTC_CalendarTypeDef *calendar);
|
||||
HAL_StatusTypeDef RTC_CalendarGet(RTC_CalendarTypeDef *calendar);
|
||||
HAL_StatusTypeDef RTC_CalendarSet(const RTC_CalendarTypeDef *calendar);
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __RTC_H__ */
|
||||
|
||||
@@ -0,0 +1,605 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f4xx_hal_conf.h
|
||||
* @author MCD Application Team
|
||||
* @brief HAL configuration file.
|
||||
*
|
||||
* @note modified by ARM
|
||||
* The modifications allow to use this file as User Code Template
|
||||
* within the Device Family Pack.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2017 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F4xx_HAL_CONF_H
|
||||
#define __STM32F4xx_HAL_CONF_H
|
||||
|
||||
#ifdef _RTE_
|
||||
#include "RTE_Components.h" /* Component selection */
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/* ########################## Module Selection ############################## */
|
||||
/**
|
||||
* @brief This is the list of modules to be used in the HAL driver
|
||||
*/
|
||||
#ifdef RTE_DEVICE_HAL_COMMON
|
||||
#define HAL_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_ADC
|
||||
#define HAL_ADC_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_CAN
|
||||
#define HAL_CAN_MODULE_ENABLED
|
||||
/* #define HAL_CAN_LEGACY_MODULE_ENABLED */
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_CRC
|
||||
#define HAL_CRC_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_CEC
|
||||
#define HAL_CEC_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_CRYP
|
||||
#define HAL_CRYP_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_DAC
|
||||
#define HAL_DAC_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_DCMI
|
||||
#define HAL_DCMI_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_DMA
|
||||
#define HAL_DMA_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_DMA2D
|
||||
#define HAL_DMA2D_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_ETH
|
||||
#define HAL_ETH_MODULE_ENABLED
|
||||
#endif
|
||||
#if defined (RTE_DEVICE_HAL_FLASH) || defined (RTE_DEVICE_HAL_COMMON)
|
||||
#define HAL_FLASH_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_NAND
|
||||
#define HAL_NAND_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_NOR
|
||||
#define HAL_NOR_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_PCCARD
|
||||
#define HAL_PCCARD_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SRAM
|
||||
#define HAL_SRAM_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SDRAM
|
||||
#define HAL_SDRAM_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_HASH
|
||||
#define HAL_HASH_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_GPIO
|
||||
#define HAL_GPIO_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_EXTI
|
||||
#define HAL_EXTI_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_I2C
|
||||
#define HAL_I2C_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SMBUS
|
||||
#define HAL_SMBUS_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_I2S
|
||||
#define HAL_I2S_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_IWDG
|
||||
#define HAL_IWDG_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_LTDC
|
||||
#define HAL_LTDC_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_DSI
|
||||
#define HAL_DSI_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_PWR
|
||||
#define HAL_PWR_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_QSPI
|
||||
#define HAL_QSPI_MODULE_ENABLED
|
||||
#endif
|
||||
#if defined (RTE_DEVICE_HAL_RCC) || defined (RTE_DEVICE_HAL_COMMON)
|
||||
#define HAL_RCC_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_RNG
|
||||
#define HAL_RNG_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_RTC
|
||||
#define HAL_RTC_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SAI
|
||||
#define HAL_SAI_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SD
|
||||
#define HAL_SD_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SPI
|
||||
#define HAL_SPI_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_TIM
|
||||
#define HAL_TIM_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_UART
|
||||
#define HAL_UART_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_USART
|
||||
#define HAL_USART_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_IRDA
|
||||
#define HAL_IRDA_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SMARTCARD
|
||||
#define HAL_SMARTCARD_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_WWDG
|
||||
#define HAL_WWDG_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_CORTEX
|
||||
#define HAL_CORTEX_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_PCD
|
||||
#define HAL_PCD_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_HCD
|
||||
#define HAL_HCD_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_FMPI2C
|
||||
#define HAL_FMPI2C_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_FMPSMBUS
|
||||
#define HAL_FMPSMBUS_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_SPDIFRX
|
||||
#define HAL_SPDIFRX_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_DFSDM
|
||||
#define HAL_DFSDM_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_LPTIM
|
||||
#define HAL_LPTIM_MODULE_ENABLED
|
||||
#endif
|
||||
#ifdef RTE_DEVICE_HAL_MMC
|
||||
#define HAL_MMC_MODULE_ENABLED
|
||||
#endif
|
||||
|
||||
/* ########################## HSE/HSI Values adaptation ##################### */
|
||||
/**
|
||||
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
|
||||
* This value is used by the RCC HAL module to compute the system frequency
|
||||
* (when HSE is used as system clock source, directly or through the PLL).
|
||||
*/
|
||||
#if !defined (HSE_VALUE)
|
||||
#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */
|
||||
#endif /* HSE_VALUE */
|
||||
|
||||
#if !defined (HSE_STARTUP_TIMEOUT)
|
||||
#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */
|
||||
#endif /* HSE_STARTUP_TIMEOUT */
|
||||
|
||||
/**
|
||||
* @brief Internal High Speed oscillator (HSI) value.
|
||||
* This value is used by the RCC HAL module to compute the system frequency
|
||||
* (when HSI is used as system clock source, directly or through the PLL).
|
||||
*/
|
||||
#if !defined (HSI_VALUE)
|
||||
#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */
|
||||
#endif /* HSI_VALUE */
|
||||
|
||||
/**
|
||||
* @brief Internal Low Speed oscillator (LSI) value.
|
||||
*/
|
||||
#if !defined (LSI_VALUE)
|
||||
#define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */
|
||||
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
|
||||
The real value may vary depending on the variations
|
||||
in voltage and temperature. */
|
||||
/**
|
||||
* @brief External Low Speed oscillator (LSE) value.
|
||||
*/
|
||||
#if !defined (LSE_VALUE)
|
||||
#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */
|
||||
#endif /* LSE_VALUE */
|
||||
|
||||
#if !defined (LSE_STARTUP_TIMEOUT)
|
||||
#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */
|
||||
#endif /* LSE_STARTUP_TIMEOUT */
|
||||
|
||||
/**
|
||||
* @brief External clock source for I2S peripheral
|
||||
* This value is used by the I2S HAL module to compute the I2S clock source
|
||||
* frequency, this source is inserted directly through I2S_CKIN pad.
|
||||
*/
|
||||
#if !defined (EXTERNAL_CLOCK_VALUE)
|
||||
#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/
|
||||
#endif /* EXTERNAL_CLOCK_VALUE */
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
|
||||
=== you can define the HSE value in your toolchain compiler preprocessor. */
|
||||
|
||||
/* ########################### System Configuration ######################### */
|
||||
/**
|
||||
* @brief This is the HAL system configuration section
|
||||
*/
|
||||
#define VDD_VALUE 3300U /*!< Value of VDD in mv */
|
||||
#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */
|
||||
#define USE_RTOS 0U
|
||||
#define PREFETCH_ENABLE 0U /* The prefetch will be enabled in SystemClock_Config(), depending on the used
|
||||
STM32F405/415/07/417 device: RevA (prefetch must be off) or RevZ (prefetch can be on/off) */
|
||||
#define INSTRUCTION_CACHE_ENABLE 1U
|
||||
#define DATA_CACHE_ENABLE 1U
|
||||
|
||||
#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */
|
||||
#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */
|
||||
#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */
|
||||
#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */
|
||||
#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */
|
||||
#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */
|
||||
#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */
|
||||
#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */
|
||||
#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */
|
||||
#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */
|
||||
#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */
|
||||
#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */
|
||||
#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */
|
||||
#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */
|
||||
#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */
|
||||
#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */
|
||||
#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */
|
||||
#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */
|
||||
#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */
|
||||
#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */
|
||||
#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */
|
||||
#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */
|
||||
#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */
|
||||
#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */
|
||||
#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */
|
||||
#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */
|
||||
#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */
|
||||
#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */
|
||||
#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */
|
||||
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */
|
||||
#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */
|
||||
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */
|
||||
#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */
|
||||
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */
|
||||
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */
|
||||
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */
|
||||
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */
|
||||
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */
|
||||
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */
|
||||
|
||||
/* ########################## Assert Selection ############################## */
|
||||
/**
|
||||
* @brief Uncomment the line below to expanse the "assert_param" macro in the
|
||||
* HAL drivers code
|
||||
*/
|
||||
/* #define USE_FULL_ASSERT 1U */
|
||||
|
||||
/* ################## Ethernet peripheral configuration ##################### */
|
||||
|
||||
/* Section 1 : Ethernet peripheral configuration */
|
||||
|
||||
/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
|
||||
#define MAC_ADDR0 2U
|
||||
#define MAC_ADDR1 0U
|
||||
#define MAC_ADDR2 0U
|
||||
#define MAC_ADDR3 0U
|
||||
#define MAC_ADDR4 0U
|
||||
#define MAC_ADDR5 0U
|
||||
|
||||
/* Definition of the Ethernet driver buffers size and count */
|
||||
#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */
|
||||
#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */
|
||||
#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */
|
||||
#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */
|
||||
|
||||
/* Section 2: PHY configuration section */
|
||||
|
||||
/* DP83848 PHY Address*/
|
||||
#define DP83848_PHY_ADDRESS 0x01U
|
||||
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
|
||||
#define PHY_RESET_DELAY 0x000000FFU
|
||||
/* PHY Configuration delay */
|
||||
#define PHY_CONFIG_DELAY 0x00000FFFU
|
||||
|
||||
#define PHY_READ_TO 0x0000FFFFU
|
||||
#define PHY_WRITE_TO 0x0000FFFFU
|
||||
|
||||
/* Section 3: Common PHY Registers */
|
||||
|
||||
#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */
|
||||
#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */
|
||||
|
||||
#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */
|
||||
#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */
|
||||
#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */
|
||||
#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */
|
||||
#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */
|
||||
#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */
|
||||
#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */
|
||||
#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */
|
||||
#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */
|
||||
#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */
|
||||
|
||||
#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */
|
||||
#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */
|
||||
#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */
|
||||
|
||||
/* Section 4: Extended PHY Registers */
|
||||
|
||||
#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */
|
||||
#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */
|
||||
#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */
|
||||
|
||||
#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */
|
||||
#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */
|
||||
#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */
|
||||
|
||||
#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */
|
||||
#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */
|
||||
|
||||
#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */
|
||||
#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */
|
||||
|
||||
/* ################## SPI peripheral configuration ########################## */
|
||||
|
||||
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
|
||||
* Activated: CRC code is present inside driver
|
||||
* Deactivated: CRC code cleaned from driver
|
||||
*/
|
||||
|
||||
#define USE_SPI_CRC 1U
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Include module's header file
|
||||
*/
|
||||
|
||||
#ifdef HAL_RCC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_rcc.h"
|
||||
#endif /* HAL_RCC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_GPIO_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_gpio.h"
|
||||
#endif /* HAL_GPIO_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_EXTI_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_exti.h"
|
||||
#endif /* HAL_EXTI_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DMA_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_dma.h"
|
||||
#endif /* HAL_DMA_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CORTEX_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_cortex.h"
|
||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_ADC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_adc.h"
|
||||
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CAN_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_can.h"
|
||||
#endif /* HAL_CAN_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CAN_LEGACY_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_can_legacy.h"
|
||||
#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CRC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_crc.h"
|
||||
#endif /* HAL_CRC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CRYP_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_cryp.h"
|
||||
#endif /* HAL_CRYP_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DMA2D_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_dma2d.h"
|
||||
#endif /* HAL_DMA2D_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DAC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_dac.h"
|
||||
#endif /* HAL_DAC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DCMI_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_dcmi.h"
|
||||
#endif /* HAL_DCMI_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_ETH_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_eth.h"
|
||||
#endif /* HAL_ETH_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_FLASH_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_flash.h"
|
||||
#endif /* HAL_FLASH_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SRAM_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_sram.h"
|
||||
#endif /* HAL_SRAM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_NOR_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_nor.h"
|
||||
#endif /* HAL_NOR_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_NAND_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_nand.h"
|
||||
#endif /* HAL_NAND_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_PCCARD_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_pccard.h"
|
||||
#endif /* HAL_PCCARD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SDRAM_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_sdram.h"
|
||||
#endif /* HAL_SDRAM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_HASH_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_hash.h"
|
||||
#endif /* HAL_HASH_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_I2C_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_i2c.h"
|
||||
#endif /* HAL_I2C_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SMBUS_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_smbus.h"
|
||||
#endif /* HAL_SMBUS_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_I2S_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_i2s.h"
|
||||
#endif /* HAL_I2S_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_IWDG_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_iwdg.h"
|
||||
#endif /* HAL_IWDG_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_LTDC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_ltdc.h"
|
||||
#endif /* HAL_LTDC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_PWR_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_pwr.h"
|
||||
#endif /* HAL_PWR_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_RNG_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_rng.h"
|
||||
#endif /* HAL_RNG_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_RTC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_rtc.h"
|
||||
#endif /* HAL_RTC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SAI_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_sai.h"
|
||||
#endif /* HAL_SAI_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SD_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_sd.h"
|
||||
#endif /* HAL_SD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SPI_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_spi.h"
|
||||
#endif /* HAL_SPI_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_TIM_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_tim.h"
|
||||
#endif /* HAL_TIM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_UART_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_uart.h"
|
||||
#endif /* HAL_UART_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_USART_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_usart.h"
|
||||
#endif /* HAL_USART_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_IRDA_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_irda.h"
|
||||
#endif /* HAL_IRDA_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_smartcard.h"
|
||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_WWDG_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_wwdg.h"
|
||||
#endif /* HAL_WWDG_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_PCD_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_pcd.h"
|
||||
#endif /* HAL_PCD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_HCD_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_hcd.h"
|
||||
#endif /* HAL_HCD_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DSI_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_dsi.h"
|
||||
#endif /* HAL_DSI_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_QSPI_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_qspi.h"
|
||||
#endif /* HAL_QSPI_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_CEC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_cec.h"
|
||||
#endif /* HAL_CEC_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_FMPI2C_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_fmpi2c.h"
|
||||
#endif /* HAL_FMPI2C_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_FMPSMBUS_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_fmpsmbus.h"
|
||||
#endif /* HAL_FMPSMBUS_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_SPDIFRX_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_spdifrx.h"
|
||||
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_DFSDM_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_dfsdm.h"
|
||||
#endif /* HAL_DFSDM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_LPTIM_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_lptim.h"
|
||||
#endif /* HAL_LPTIM_MODULE_ENABLED */
|
||||
|
||||
#ifdef HAL_MMC_MODULE_ENABLED
|
||||
#include "stm32f4xx_hal_mmc.h"
|
||||
#endif /* HAL_MMC_MODULE_ENABLED */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
#ifdef USE_FULL_ASSERT
|
||||
/**
|
||||
* @brief The assert_param macro is used for function's parameters check.
|
||||
* @param expr If expr is false, it calls assert_failed function
|
||||
* which reports the name of the source file and the source
|
||||
* line number of the call that failed.
|
||||
* If expr is true, it returns no value.
|
||||
* @retval None
|
||||
*/
|
||||
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
void assert_failed(uint8_t* file, uint32_t line);
|
||||
#else
|
||||
#define assert_param(expr) ((void)0U)
|
||||
#endif /* USE_FULL_ASSERT */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM32F4xx_HAL_CONF_H */
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file Templates/Inc/stm32f4xx_it.h
|
||||
* @author MCD Application Team
|
||||
* @brief This file contains the headers of the interrupt handlers.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2017 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32F4xx_IT_H
|
||||
#define __STM32F4xx_IT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
void NMI_Handler(void);
|
||||
void HardFault_Handler(void);
|
||||
void MemManage_Handler(void);
|
||||
void BusFault_Handler(void);
|
||||
void UsageFault_Handler(void);
|
||||
void SVC_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __STM32F4xx_IT_H */
|
||||
57
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/tim.h
Normal file
57
john103C6T6NewVer/john103C6T6_JZ-F407VET6_F4/Core/Inc/tim.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file tim.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the tim.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __TIM_H__
|
||||
#define __TIM_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern TIM_HandleTypeDef htim1;
|
||||
|
||||
extern TIM_HandleTypeDef htim2;
|
||||
extern TIM_HandleTypeDef htim4;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_TIM1_Init(void);
|
||||
void MX_TIM2_Init(void);
|
||||
void MX_TIM4_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __TIM_H__ */
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file usart.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the usart.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2025 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USART_H__
|
||||
#define __USART_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
extern UART_HandleTypeDef huart1;
|
||||
extern UART_HandleTypeDef huart2;
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_USART1_UART_Init(void);
|
||||
void MX_USART2_UART_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __USART_H__ */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user