From b5a26200f3e8c95a70f478d4688aaa3afc4bbf7b Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Tue, 4 Mar 2025 09:41:49 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=83=D1=80=D1=81=D1=8B=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B2=20utf-8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Dallas/dallas_tools.c | 136 ++++++++++++++++++------------------- Core/Dallas/dallas_tools.h | 116 +++++++++++++++---------------- Core/Dallas/onewire.h | 18 ++--- Core/Dallas/pch_sensors.c | 4 +- Core/Dallas/pch_sensors.h | 76 ++++++++++----------- Core/Src/tim.c | 20 +++--- 6 files changed, 185 insertions(+), 185 deletions(-) diff --git a/Core/Dallas/dallas_tools.c b/Core/Dallas/dallas_tools.c index 5c9cb80..4d36623 100644 --- a/Core/Dallas/dallas_tools.c +++ b/Core/Dallas/dallas_tools.c @@ -1,13 +1,13 @@ /** ****************************************************************************** * @file dallas_tools.c -* @brief DS18B20 +* @brief Драйвер для работы с датчиками температуры DS18B20 * @author MicroTechnics (microtechnics.ru) ****************************************************************************** @details - DS18B20 - 1-Wire. -, . +Этот файл содержит реализацию функций для работы с датчиком DS18B20 +через интерфейс 1-Wire. Он предоставляет функции для чтения и записи +конфигурации, выполнения измерений и обработки полученных данных. *****************************************************************************/ @@ -22,8 +22,8 @@ DALLAS_HandleTypeDef hdallas1; /* Functions ---------------------------------------------------------------*/ /** - * @brief - * @param sensor + * @brief Функция для нахождения нового датчика на место потерянного + * @param sensor Указатель на структуру датчика * @retval HAL Status */ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor) @@ -48,15 +48,15 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor) } else { - return HAL_BUSY; // + return HAL_BUSY; // датчик не потерян } } /** - * @brief - * @param onewire OneWire - * @param sensor + * @brief Функция для иниицализации нового датчика в структуре + * @param onewire Указатель на структуру OneWire + * @param sensor Указатель на структуру датчика * @retval HAL Status */ HAL_StatusTypeDef Dallas_AddNewSensors(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) @@ -78,9 +78,9 @@ HAL_StatusTypeDef Dallas_AddNewSensors(DALLAS_HandleTypeDef *hdallas, DALLAS_Sen /** - * @brief ROM - * @param onewire OneWire - * @param sensor + * @brief Инициализирует структуру датчика по ROM + * @param onewire Указатель на структуру OneWire + * @param sensor Указатель на структуру датчика * @retval HAL Status */ HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) @@ -122,7 +122,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_S } } - /* */ + /* Проверка присутствует ли выбранный датчик на линии */ if(comparebytes == 0) { @@ -140,9 +140,9 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_S /** - * @brief - * @param onewire OneWire - * @param sensor + * @brief Инициализирует структуру датчика по пользовательским байтам + * @param onewire Указатель на структуру OneWire + * @param sensor Указатель на структуру датчика * @retval HAL Status */ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) @@ -163,12 +163,12 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA for(int i = 0; i < hdallas->onewire->RomCnt; i++) { - /* */ + /* Проверка присутствует ли выбранный датчик на линии */ result = DS18B20_ReadScratchpad(hdallas->onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&hdallas->scratchpad); if (result != HAL_OK) return result; - /* UserByte1 UserByte2, */ + /* Сравнение UserByte1 и UserByte2, если они не равны нулю */ if((sensor->Init.InitParam & 0xFFFF) != NULL) { if( (hdallas->scratchpad.tHighRegister == UserByte1) && @@ -176,12 +176,12 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA { UserByte12Cmp = 1; } - }/* UserByte1 UserByte2 , */ + }/* Если сравнение UserByte1 и UserByte2 не выбрано, то считаем что они совпадают */ else { UserByte12Cmp = 1; } - /* UserByte3 UserByte4, */ + /* Сравнение UserByte3 и UserByte4, если они не равны нулю */ if((sensor->Init.InitParam & 0xFFFF0000) != NULL) { if( (hdallas->scratchpad.UserByte3 == UserByte3) && @@ -189,12 +189,12 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA { UserByte34Cmp = 1; } - }/* UserByte3 UserByte4 , */ + }/* Если сравнение UserByte3 и UserByte4 не выбрано, то считаем что они одинаковые */ else { UserByte34Cmp = 1; } - /* - */ + /* Если нашли нужный датчик - завершаем поиск */ if(UserByte12Cmp && UserByte34Cmp) { // sensor->isInitialized = 1; @@ -205,17 +205,17 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA } sensor->sensROM = 0; - /* */ + /* Возвращаем ошибку если не нашли */ return HAL_ERROR; } /** - * @brief - * @param onewire OneWire - * @param sensor + * @brief Инициализирует структуру датчика по порядковому номеру + * @param onewire Указатель на структуру OneWire + * @param sensor Указатель на структуру датчика * @retval HAL Status - * @details . - * .. + * @details Порядковый номер датчика в списке найденных. + * Т.е. каким по счету этот датчик был найден */ HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) { @@ -232,10 +232,10 @@ HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_S } /** - * @brief - * @param onewire OneWire - * @param sensor - * @param ROM ROM , + * @brief Инициализирует датчик для работы + * @param onewire Указатель на структуру OneWire + * @param sensor Указатель на структуру датчика + * @param ROM ROM датчика, который надо инициализировать * @retval HAL Status */ HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]) @@ -253,11 +253,11 @@ HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_Sensor // for(int i = 0; i < DALLAS_ROM_SIZE; i++) // sensor->sensROM |= ((uint64_t)(*ROM)[i] << (56 - 8*i)); - /* */ + /* Проверка присутствует ли выбранный датчик на линии */ result = DS18B20_ReadScratchpad(hdallas->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&hdallas->scratchpad); if (result == HAL_OK) { - /* */ + /* Установка разрешения */ result = DS18B20_SetResolution(hdallas->onewire, (uint8_t *)ROM, sensor->Init.Resolution); if (result == HAL_OK) { @@ -278,10 +278,10 @@ HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_Sensor } /** - * @brief - * @param onewire OneWire - * @param sensor - * @param sens_ind + * @brief Деинициализирует структуру датчика + * @param onewire Указатель на структуру OneWire + * @param sensor Указатель на структуру датчика + * @param sens_ind Порядковый номер датчика в структуре * @retval HAL Status */ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor) @@ -299,10 +299,10 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor) } /** - * @brief - * @param onewire OneWire - * @param waitCondition - * @param dallas_delay_ms + * @brief Запускает измерение температуры на всех датчиках + * @param onewire Указатель на структуру OneWire + * @param waitCondition Условие ожидания завершения преобразования + * @param dallas_delay_ms Время ожидания окончания конверсии * @retval HAL Status */ HAL_StatusTypeDef Dallas_StartConvertTAll(DALLAS_HandleTypeDef *hdallas, DALLAS_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms) @@ -313,24 +313,24 @@ HAL_StatusTypeDef Dallas_StartConvertTAll(DALLAS_HandleTypeDef *hdallas, DALLAS_ if(hdallas == NULL) return HAL_ERROR; - // + // Отправка команды начала преобразования температуры result = DS18B20_StartConvTAll(hdallas->onewire); if(result != HAL_OK) { return result; } -// // +// // Проверка что преобразование началось // if(OneWire_ReadBit(onewire) == 1) // return HAL_ERROR; - // , + // Ожидание завершения преобразования, путем проверки шины if (waitCondition == DALLAS_WAIT_BUS) { result = DS18B20_WaitForEndConvertion(hdallas->onewire); return result; } - // , + // Ожидание завершения преобразования, путем задержки if (waitCondition == DALLAS_WAIT_DELAY) { uint32_t delayValueMs = 0; @@ -364,9 +364,9 @@ HAL_StatusTypeDef Dallas_StartConvertTAll(DALLAS_HandleTypeDef *hdallas, DALLAS_ } /** - * @brief - * @param sensor - * @param waitCondition + * @brief Измеряет температуру на датчике + * @param sensor Указатель на структуру датчика + * @param waitCondition Условие ожидания завершения преобразования * @retval HAL Status */ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition) @@ -379,19 +379,19 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_Wai if(sensor->isInitialized == 0) return HAL_ERROR; - /* */ + /* Проверка присутствует ли выбранный датчик на линии */ result = Dallas_IsConnected(sensor); if (result != HAL_OK) return result; - // + // Отправка команды начала преобразования температуры result = DS18B20_StartConvT(sensor->hdallas->onewire, (uint8_t *)&sensor->sensROM); if(result != HAL_OK) { return result; } - // , + // Ожидание завершения преобразования, путем проверки шины if (waitCondition == DALLAS_WAIT_BUS) { result = DS18B20_WaitForEndConvertion(sensor->hdallas->onewire); @@ -402,7 +402,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_Wai return result; } - // , + // Ожидание завершения преобразования, путем задержки if (waitCondition == DALLAS_WAIT_DELAY) { uint32_t delayValueMs = 0; @@ -432,7 +432,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_Wai HAL_Delay(delayValueMs); } - /* , */ + /* Не считываем температуру, если не выбрано ожидание окончания преобразования */ if(waitCondition != DALLAS_WAIT_NONE) { result = Dallas_ReadTemperature(sensor); @@ -443,8 +443,8 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_Wai /** - * @brief - * @param sensor + * @brief Читает измеренную датчиком температуру + * @param sensor Указатель на структуру датчика * @retval HAL Status */ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor) @@ -456,7 +456,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor) if(sensor->isInitialized == 0) return HAL_ERROR; - /* */ + /* Проверка присутствует ли выбранный датчик на линии */ result = Dallas_IsConnected(sensor); if (result != HAL_OK) { @@ -476,8 +476,8 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor) } /** - * @brief ( scratchpad) - * @param sensor + * @brief Проверяет подключен ли датчик (чтение scratchpad) + * @param sensor Указатель на структуру датчика * @retval HAL Status */ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor) @@ -506,18 +506,18 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor) sensor->isConnected = 0; // Dallas_ReplaceLostedSensor(sensor); - return HAL_BUSY; // busy, HAL_ERROR + return HAL_BUSY; // использую busy, чтобы отличать ситуацию от HAL_ERROR } } /** - * @brief - * @param sensor - * @param UserBytes12 1 2 - * @param UserBytes34 3 4 - * @param UserBytesMask , , + * @brief Записывает пользовательские байты + * @param sensor Указатель на структуру датчика + * @param UserBytes12 Пользовательские байты 1 и 2 + * @param UserBytes34 Пользовательские байты 3 и 4 + * @param UserBytesMask Маска, какие байты записывать, а какие нет * @retval HAL Status - * @details - UserByte4/UserByte2, - UserByte3/UserByte1. + * @details старший байт - UserByte4/UserByte2, младший - UserByte3/UserByte1. */ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask) { @@ -526,7 +526,7 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint if(sensor->isInitialized == 0) return HAL_ERROR; - /* */ + /* Проверка присутствует ли выбранный датчик на линии */ result = Dallas_IsConnected(sensor); if (result != HAL_OK) return result; diff --git a/Core/Dallas/dallas_tools.h b/Core/Dallas/dallas_tools.h index bc4c62c..aa4808d 100644 --- a/Core/Dallas/dallas_tools.h +++ b/Core/Dallas/dallas_tools.h @@ -1,14 +1,14 @@ /** ****************************************************************************** * @file dallas_tools.h -* @brief DALLAS +* @brief Драйвер датчиков температуры DALLAS ****************************************************************************** -* -* DS18B20. , -* , -* . +* Этот файл предоставляет объявления и определения для работы с датчиками +* температуры DS18B20. Он включает структуры данных, макросы и прототипы +* функций для инициализации, чтения температуры +* и управления датчиками. * -* OneWire. +* Работа с датчиками ведётся через протокол OneWire. *****************************************************************************/ #ifndef DALLAS_TOOLS_H @@ -20,15 +20,15 @@ #include "ds18b20_driver.h" #include "onewire.h" -/* */ -#define DALLAS_USER_BYTE_1 (1<<0) ///< -#define DALLAS_USER_BYTE_2 (1<<1) ///< -#define DALLAS_USER_BYTE_3 (1<<2) ///< -#define DALLAS_USER_BYTE_4 (1<<3) ///< +/* Определения пользовательских байтов для записи чтения */ +#define DALLAS_USER_BYTE_1 (1<<0) ///< Первый пользовательский байт +#define DALLAS_USER_BYTE_2 (1<<1) ///< Второй пользовательский байт +#define DALLAS_USER_BYTE_3 (1<<2) ///< Третий пользовательский байт +#define DALLAS_USER_BYTE_4 (1<<3) ///< Четвёртый пользовательский байт -#define DALLAS_USER_BYTE_12 (DALLAS_USER_BYTE_1|DALLAS_USER_BYTE_2) ///< -#define DALLAS_USER_BYTE_34 (DALLAS_USER_BYTE_3|DALLAS_USER_BYTE_4) ///< -#define DALLAS_USER_BYTE_ALL (DALLAS_USER_BYTE_12|DALLAS_USER_BYTE_34) ///< +#define DALLAS_USER_BYTE_12 (DALLAS_USER_BYTE_1|DALLAS_USER_BYTE_2) ///< Первые два байта +#define DALLAS_USER_BYTE_34 (DALLAS_USER_BYTE_3|DALLAS_USER_BYTE_4) ///< Вторые два байта +#define DALLAS_USER_BYTE_ALL (DALLAS_USER_BYTE_12|DALLAS_USER_BYTE_34) ///< Все пользовательские байты /* Declarations and definitions ---------------------------------------------*/ #define DALLAS_ROM_SIZE 8 @@ -44,41 +44,41 @@ #define DALLAS_DELAY_MS_12_BITS 750 #define DALLAS_DELAY_MS_MAX DALLAS_DELAY_MS_12_BITS -/** @brief Scratchpad DALLAS */ +/** @brief Структура Scratchpad датчика DALLAS */ typedef struct { - uint8_t TemperatureLSB; ///< - uint8_t TemperatureMSB; ///< - uint8_t tHighRegister; ///< - uint8_t tLowRegister; ///< - uint8_t ConfigRegister; ///< - uint8_t reserved; ///< - uint8_t UserByte3; ///< 3 - uint8_t UserByte4; ///< 4 - uint8_t ScratchpadCRC; ///< + uint8_t TemperatureLSB; ///< Младший байт температуры + uint8_t TemperatureMSB; ///< Старший байт температуры + uint8_t tHighRegister; ///< Верхний температурный порог + uint8_t tLowRegister; ///< Нижний температурный порог + uint8_t ConfigRegister; ///< Конфигурационный регистр + uint8_t reserved; ///< Зарезервировано + uint8_t UserByte3; ///< Пользовательский байт 3 + uint8_t UserByte4; ///< Пользовательский байт 4 + uint8_t ScratchpadCRC; ///< Контрольная сумма }DALLAS_ScratchpadTypeDef; -/** @brief DALLAS */ +/** @brief Структура флагов ошибок датчиков DALLAS */ typedef struct { - uint8_t disconnect_cnt; ///< - uint8_t read_temperature_err_cnt; ///< - uint8_t timeout_convertion_cnt; ///< - uint8_t write_err_cnt; ///< + uint8_t disconnect_cnt; ///< Счетчик отключений датчика + uint8_t read_temperature_err_cnt; ///< Счетчик ошибок чтения температуры + uint8_t timeout_convertion_cnt; ///< Счетчик ошибок таймаута конвертации + uint8_t write_err_cnt; ///< Счетчик других ошибок }DALLAS_FlagsTypeDef; -/** @brief DALLAS */ +/** @brief Структура инициализации датчика DALLAS */ typedef struct __packed { - uint64_t InitParam; ///< : ROM/UserBytes/ - uint8_t Resolution; ///< - HAL_StatusTypeDef (*init_func)(); ///< + uint64_t InitParam; ///< Параметр для инициализации: ROM/UserBytes/Индекс + uint8_t Resolution; ///< Разрешение датчика + HAL_StatusTypeDef (*init_func)(); ///< Функция инициализации } DALLAS_InitStructTypeDef; -/** @brief C DALLAS */ +/** @brief Cтруктура обработчика DALLAS для общения с датчиком*/ typedef struct { OneWire_t *onewire; @@ -86,59 +86,59 @@ typedef struct }DALLAS_HandleTypeDef; extern DALLAS_HandleTypeDef hdallas1; -/** @brief DALLAS */ +/** @brief Основная структура обработчика датчика DALLAS */ typedef struct { - unsigned isConnected:1; ///< - unsigned isInitialized:1; ///< - unsigned isLost:1; ///< + unsigned isConnected:1; ///< Флаг соединения + unsigned isInitialized:1; ///< Флаг инициализации + unsigned isLost:1; ///< Флаг потери связи DALLAS_HandleTypeDef *hdallas; - uint64_t sensROM; ///< ROM- + uint64_t sensROM; ///< ROM-код датчика - float temperature; ///< + float temperature; ///< Текущая температура - DALLAS_InitStructTypeDef Init; ///< - DALLAS_FlagsTypeDef f; ///< + DALLAS_InitStructTypeDef Init; ///< Структура инициализации + DALLAS_FlagsTypeDef f; ///< Флаги } DALLAS_SensorHandleTypeDef; -/** @brief */ +/** @brief Варианты ожидания окончания конверсии */ typedef enum { - DALLAS_WAIT_NONE = 0x00, ///< - DALLAS_WAIT_BUS = 0x01, ///< ( - ) - DALLAS_WAIT_DELAY = 0x02, ///< ( ) + DALLAS_WAIT_NONE = 0x00, ///< Без ожидания окончания конверсии + DALLAS_WAIT_BUS = 0x01, ///< Ожидание окончания конверсии по шине (опрос датчиков - чтение бита) + DALLAS_WAIT_DELAY = 0x02, ///< Без ожидания окончания через задержку (максимальная задержка для заданной разрядности) } DALLAS_WaitConvertionTypeDef; /* Functions ---------------------------------------------------------------*/ -/* */ +/* Функция для нахождения нового датчика на место потерянного */ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor); -/* */ +/* Функция для иниицализации нового датчика в структуре */ HAL_StatusTypeDef Dallas_AddNewSensors(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor); -/* ROM */ +/* Инициализирует структуру датчика по ROM */ HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor); -/* */ +/* Инициализирует структуру датчика по пользовательским байтам */ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor); -/* */ +/* Инициализирует структуру датчика по порядковому номеру */ HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor); -/* */ +/* Инициализирует датчик для работы */ HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]); -/* */ +/* Деинициализирует структуру датчика */ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor); -/* */ +/* Запускает измерение температуры на всех датчиках */ HAL_StatusTypeDef Dallas_StartConvertTAll(DALLAS_HandleTypeDef *hdallas, DALLAS_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms); -/* */ +/* Измеряет температуру на датчике */ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition); -/* */ +/* Читает измеренную датчиком температуру */ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor); -/* ( scratchpad) */ +/* Проверяет подключен ли датчик (чтение scratchpad) */ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor); -/* */ +/* Записывает пользовательские байты */ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask); diff --git a/Core/Dallas/onewire.h b/Core/Dallas/onewire.h index 18151e2..e687a99 100644 --- a/Core/Dallas/onewire.h +++ b/Core/Dallas/onewire.h @@ -19,16 +19,16 @@ //#define LL_Driver #define CMSIS_Driver /* OneWire Timings -----------------------------------------------------------*/ -#define ONEWIRE_RESET_PULSE_US 480 // -#define ONEWIRE_PRESENCE_WAIT_US 70 // -#define ONEWIRE_PRESENCE_DURATION_US 410 // +#define ONEWIRE_RESET_PULSE_US 480 // Длительность импульса сброса +#define ONEWIRE_PRESENCE_WAIT_US 70 // Ожидание ответа от датчика +#define ONEWIRE_PRESENCE_DURATION_US 410 // Длительность сигнала присутствия -#define ONEWIRE_WRITE_1_US 8 // "1" -#define ONEWIRE_WRITE_0_US 57 // "0" -#define ONEWIRE_READ_CMD_US 2 // -#define ONEWIRE_READ_DELAY_US 6 // -#define ONEWIRE_COMMAND_SLOT_US 58 // OneWire -#define ONEWIRE_RECOVERY_TIME_US 1 // +#define ONEWIRE_WRITE_1_US 8 // Длительность записи "1" +#define ONEWIRE_WRITE_0_US 57 // Длительность записи "0" +#define ONEWIRE_READ_CMD_US 2 // Время комманды чтения бита +#define ONEWIRE_READ_DELAY_US 6 // Задержка перед считыванием бита +#define ONEWIRE_COMMAND_SLOT_US 58 // Общее время комманды OneWire +#define ONEWIRE_RECOVERY_TIME_US 1 // Восстановление перед следующим слотом /* Common Register -----------------------------------------------------------*/ #define ONEWIRE_CMD_SEARCHROM 0xF0 #define ONEWIRE_CMD_READROM 0x33 diff --git a/Core/Dallas/pch_sensors.c b/Core/Dallas/pch_sensors.c index 9337152..f47d36e 100644 --- a/Core/Dallas/pch_sensors.c +++ b/Core/Dallas/pch_sensors.c @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file pch_sensors.c -* @brief DS18B20 +* @brief Работа с датчиками температуры DS18B20 в ПЧ *****************************************************************************/ @@ -192,7 +192,7 @@ HAL_StatusTypeDef PCHSens_FindUnknownSensors(PCHSens_DallasBusHandle *hbus) PCHSens_LocationTypeDef *param = (PCHSens_LocationTypeDef *)&hbus->hdallas->scratchpad.tHighRegister; for(int i = 0; i < hbus->hdallas->onewire->RomCnt; i++) { - /* */ + /* Проверка присутствует ли выбранный датчик на линии */ result = DS18B20_ReadScratchpad(hbus->hdallas->onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&hbus->hdallas->scratchpad); if(result != HAL_OK) __NOP(); diff --git a/Core/Dallas/pch_sensors.h b/Core/Dallas/pch_sensors.h index e639a93..419c9d5 100644 --- a/Core/Dallas/pch_sensors.h +++ b/Core/Dallas/pch_sensors.h @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file pch_sensors.h -* @brief DS18B20 +* @brief Работа с датчиками температуры DS18B20 в ПЧ ****************************************************************************** *****************************************************************************/ @@ -16,33 +16,33 @@ /* Declarations and definitions ---------------------------------------------*/ #define USED_USER_BYTES DALLAS_USER_BYTE_12 -/* UserBytes */ -#define REG_SENS_LOCATION_Pos (0) /*!< @brief " " */ +/* Позиции параметров в UserBytes */ +#define REG_SENS_LOCATION_Pos (0) /*!< @brief Позиция параметра "Локация внутри модуля" */ -#define REG_PCH_LOCATION_Pos (8) /*!< @brief " " */ -#define REG_PCH_DIOD_PHASE_Pos (10) /*!< @brief " " @ref REG_PCH_LOCATION_Pos */ -#define REG_PCH_MODULE_NUMB_Pos (8) /*!< @brief " / " @ref REG_PCH_LOCATION_Pos */ +#define REG_PCH_LOCATION_Pos (8) /*!< @brief Позиция параметра "Расположение в ПЧ" */ +#define REG_PCH_DIOD_PHASE_Pos (10) /*!< @brief Позиция параметра "Диодный или фазный модуль" @ref REG_PCH_LOCATION_Pos */ +#define REG_PCH_MODULE_NUMB_Pos (8) /*!< @brief Позиция параметра "Порядковый номер диодного/фазного модуля" @ref REG_PCH_LOCATION_Pos */ -#define REG_PCH_NUMB_Pos (11) /*!< @brief " " */ -#define REG_PCH_NUMB_DIGIT_1_Pos (13) /*!< @brief " " @ref REG_PCH_NUMB_Pos */ -#define REG_PCH_NUMB_DIGIT_2_Pos (11) /*!< @brief " " @ref REG_PCH_NUMB_Pos */ +#define REG_PCH_NUMB_Pos (11) /*!< @brief Позиция параметра "Преобразователь частоты" */ +#define REG_PCH_NUMB_DIGIT_1_Pos (13) /*!< @brief Позиция параметра "Первая цифра номера преобразователя частоты" @ref REG_PCH_NUMB_Pos */ +#define REG_PCH_NUMB_DIGIT_2_Pos (11) /*!< @brief Позиция параметра "Вторая цифра номера преобразователя частоты" @ref REG_PCH_NUMB_Pos */ -#define REG_ZIP_Pos (15) /*!< @brief "/ " */ +#define REG_ZIP_Pos (15) /*!< @brief Позиция параметра "ЗИП/не ЗИП" */ -/* UserBytes */ -#define REG_SENS_LOCATION_Mask ((uint16_t)0x3 << REG_SENS_LOCATION_Pos) /*!< @brief " " */ +/* Маски параметров в UserBytes */ +#define REG_SENS_LOCATION_Mask ((uint16_t)0x3 << REG_SENS_LOCATION_Pos) /*!< @brief Маска параметра "Локация внутри модуля" */ -#define REG_PCH_LOCATION_Mask ((uint16_t)0x7 << REG_PCH_LOCATION_Pos) /*!< @brief " " */ -#define REG_PCH_DIOD_PHASE_Mask ((uint16_t)0x1 << REG_PCH_DIOD_PHASE_Pos) /*!< @brief " " */ -#define REG_PCH_MODULE_NUMB_Mask ((uint16_t)0x3 << REG_PCH_MODULE_NUMB_Pos) /*!< @brief " / " */ +#define REG_PCH_LOCATION_Mask ((uint16_t)0x7 << REG_PCH_LOCATION_Pos) /*!< @brief Маска параметра "Расположение в ПЧ" */ +#define REG_PCH_DIOD_PHASE_Mask ((uint16_t)0x1 << REG_PCH_DIOD_PHASE_Pos) /*!< @brief Маска параметра "Диодный или фазный модуль" */ +#define REG_PCH_MODULE_NUMB_Mask ((uint16_t)0x3 << REG_PCH_MODULE_NUMB_Pos) /*!< @brief Маска параметра "Порядковый номер диодного/фазного модуля" */ -#define REG_PCH_NUMB_Mask ((uint16_t)0xF << REG_PCH_NUMB_Pos) /*!< @brief " " */ -#define REG_PCH_NUMB_DIGIT_1_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_1_Pos) /*!< @brief " " */ -#define REG_PCH_NUMB_DIGIT_2_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_2_Pos) /*!< @brief " " */ +#define REG_PCH_NUMB_Mask ((uint16_t)0xF << REG_PCH_NUMB_Pos) /*!< @brief Маска параметра "Преобразователь частоты" */ +#define REG_PCH_NUMB_DIGIT_1_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_1_Pos) /*!< @brief Маска параметра "Первая цифра номера преобразователя частоты" */ +#define REG_PCH_NUMB_DIGIT_2_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_2_Pos) /*!< @brief Маска параметра "Вторая цифра номера преобразователя частоты" */ -#define REG_ZIP_Mask ((uint16_t)0x1 << REG_ZIP_Pos) /*!< @brief "/ " */ +#define REG_ZIP_Mask ((uint16_t)0x1 << REG_ZIP_Pos) /*!< @brief Маска параметра "ЗИП/не ЗИП" */ -/* UserBytes */ +/* Варианты параметров в UserBytes */ #define REG_PCH_NUMB_11 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (1 << REG_PCH_NUMB_DIGIT_2_Pos)) #define REG_PCH_NUMB_12 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (2 << REG_PCH_NUMB_DIGIT_2_Pos)) #define REG_PCH_NUMB_13 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (3 << REG_PCH_NUMB_DIGIT_2_Pos)) @@ -57,20 +57,20 @@ #define REG_PCH_PHASE_NUMB_2 ((1 << REG_PCH_DIOD_PHASE_Pos) | (2 << REG_PCH_MODULE_NUMB_Pos)) #define REG_PCH_PHASE_NUMB_3 ((1 << REG_PCH_DIOD_PHASE_Pos) | (3 << REG_PCH_MODULE_NUMB_Pos)) -/* UserBytes */ -#define GET_REG_SENS_LOCATION(_REG_) ((_REG_) & REG_SENS_LOCATION_Mask) /*!< @brief " " */ +/* Получить параметр из UserBytes */ +#define GET_REG_SENS_LOCATION(_REG_) ((_REG_) & REG_SENS_LOCATION_Mask) /*!< @brief Получить параметр "Локация внутри модуля" */ -#define GET_REG_PCH_LOCATION(_REG_) ((_REG_) & REG_PCH_LOCATION_Mask) /*!< @brief " " */ -#define GET_REG_PCH_DIOD_PHASE(_REG_) ((_REG_) & REG_PCH_DIOD_PHASE_Mask) /*!< @brief " " */ -#define GET_REG_PCH_MODULE_NUMB(_REG_) ((_REG_) & REG_PCH_MODULE_NUMB_Mask) /*!< @brief " / " */ +#define GET_REG_PCH_LOCATION(_REG_) ((_REG_) & REG_PCH_LOCATION_Mask) /*!< @brief Получить параметр "Расположение в ПЧ" */ +#define GET_REG_PCH_DIOD_PHASE(_REG_) ((_REG_) & REG_PCH_DIOD_PHASE_Mask) /*!< @brief Получить параметр "Диодный или фазный модуль" */ +#define GET_REG_PCH_MODULE_NUMB(_REG_) ((_REG_) & REG_PCH_MODULE_NUMB_Mask) /*!< @brief Получить параметр "Порядковый номер диодного/фазного модуля" */ -#define GET_REG_PCH_NUMB(_REG_) ((_REG_) & REG_PCH_NUMB_Mask) /*!< @brief " " */ -#define GET_REG_PCH_NUMB_DIGIT_1(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_1_Mask) /*!< @brief " " */ -#define GET_REG_PCH_NUMB_DIGIT_2(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_2_Mask) /*!< @brief " " */ +#define GET_REG_PCH_NUMB(_REG_) ((_REG_) & REG_PCH_NUMB_Mask) /*!< @brief Получить параметр "Преобразователь частоты" */ +#define GET_REG_PCH_NUMB_DIGIT_1(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_1_Mask) /*!< @brief Получить параметр "Первая цифра номера преобразователя частоты" */ +#define GET_REG_PCH_NUMB_DIGIT_2(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_2_Mask) /*!< @brief Получить параметр "Вторая цифра номера преобразователя частоты" */ -#define GET_REG_ZIP(_REG_) ((_REG_) & REG_ZIP_Mask) /*!< @brief "/ " */ +#define GET_REG_ZIP(_REG_) ((_REG_) & REG_ZIP_Mask) /*!< @brief Получить параметр "ЗИП/не ЗИП" */ -/* UserBytes */ +/* Диапазоны параметров из UserBytes */ #define REG_SENS_LOCATION_MAX 3 #define REG_SENS_LOCATION_MIN 0 #define REG_PCH_DIOD_PHASE_MAX 1 @@ -83,23 +83,23 @@ #define REG_PCH_NUMB_DIGIT_2_MIN 1 -/** @brief " " */ +/** @brief Получить параметр "Локация внутри модуля" */ #define IS_REG_SENS_LOCATION(_REG_) (((_REG_)->param.Location <= REG_SENS_LOCATION_MAX) && ((_REG_)->param.Location >= REG_SENS_LOCATION_MIN)) -/*!< @brief " " */ +/*!< @brief Получить параметр "Расположение в ПЧ" */ #define IS_REG_PCH_LOCATION(_REG_) (IS_REG_PCH_DIOD_PHASE(_REG_) && IS_REG_PCH_MODULE_NUMB(_REG_)) -/*!< @brief " " */ +/*!< @brief Получить параметр "Диодный или фазный модуль" */ #define IS_REG_PCH_DIOD_PHASE(_REG_) (((_REG_)->param.DiodeOrPhase <= REG_PCH_DIOD_PHASE_MAX) && ((_REG_)->param.DiodeOrPhase >= REG_PCH_DIOD_PHASE_MIN)) -/*!< @brief " / " */ +/*!< @brief Получить параметр "Порядковый номер диодного/фазного модуля" */ #define IS_REG_PCH_MODULE_NUMB(_REG_) (((_REG_)->param.ModuleNumb <= REG_PCH_MODULE_NUMB_MAX) && ((_REG_)->param.ModuleNumb >= REG_PCH_MODULE_NUMB_MIN)) -/*!< @brief " " */ +/*!< @brief Получить параметр "Преобразователь частоты" */ #define IS_REG_PCH_NUMB(_REG_) (IS_REG_PCH_NUMB_DIGIT_1(_REG_) && IS_REG_PCH_NUMB_DIGIT_2(_REG_)) -/*!< @brief " " */ +/*!< @brief Получить параметр "Первая цифра номера преобразователя частоты" */ #define IS_REG_PCH_NUMB_DIGIT_1(_REG_) (((_REG_)->param.PCHdig1 <= REG_PCH_NUMB_DIGIT_1_MAX) && ((_REG_)->param.PCHdig1 >= REG_PCH_NUMB_DIGIT_1_MIN)) -/*!< @brief " " s*/ +/*!< @brief Получить параметр "Вторая цифра номера преобразователя частоты" s*/ #define IS_REG_PCH_NUMB_DIGIT_2(_REG_) (((_REG_)->param.PCHdig2 <= REG_PCH_NUMB_DIGIT_2_MAX) && ((_REG_)->param.PCHdig2 >= REG_PCH_NUMB_DIGIT_2_MIN)) -/*!< @brief "/ " */ +/*!< @brief Получить параметр "ЗИП/не ЗИП" */ #define IS_REG_ZIP(_REG_) (GET_REG_ZIP(_REG_)) typedef union diff --git a/Core/Src/tim.c b/Core/Src/tim.c index f0bccd8..d2ef654 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -30,34 +30,34 @@ TIM_HandleTypeDef htim14; /* TIM3 init function */ void MX_TIM1_Init(void) { - // TIM1 + // Включение тактирования TIM1 __HAL_RCC_TIM1_CLK_ENABLE(); - // (Prescaler) + // Установка предделителя (Prescaler) TIM1->PSC = 0; - // + // Установка режима счета вверх TIM1->CR1 &= ~TIM_CR1_DIR; - // (ARR - Auto-reload register) + // Установка периода (ARR - Auto-reload register) TIM1->ARR = 0xFFFFFFFF; - // (Clock Division) + // Установка делителя частоты (Clock Division) TIM1->CR1 &= ~TIM_CR1_CKD; - // + // Отключение режима предзагрузки TIM1->CR1 &= ~TIM_CR1_ARPE; - // + // Выбор внутреннего источника тактирования TIM1->SMCR &= ~TIM_SMCR_SMS; - // (TRGO) + // Настройка триггерного выхода (TRGO) TIM1->CR2 &= ~TIM_CR2_MMS; - // Master/Slave + // Отключение режима Master/Slave TIM1->SMCR &= ~TIM_SMCR_MSM; - // + // Включение таймера TIM1->CR1 |= TIM_CR1_CEN; // /* USER CODE BEGIN TIM3_Init 0 */