сурсы преобразованы в utf-8

This commit is contained in:
2025-03-04 09:41:49 +03:00
parent a5a14679f3
commit b5a26200f3
6 changed files with 185 additions and 185 deletions

View File

@@ -1,13 +1,13 @@
/** /**
****************************************************************************** ******************************************************************************
* @file dallas_tools.c * @file dallas_tools.c
* @brief Драйвер для работы с датчиками температуры DS18B20 * @brief Драйвер для работы с датчиками температуры DS18B20
* @author MicroTechnics (microtechnics.ru) * @author MicroTechnics (microtechnics.ru)
****************************************************************************** ******************************************************************************
@details @details
Этот файл содержит реализацию функций для работы с датчиком DS18B20 Этот файл содержит реализацию функций для работы с датчиком DS18B20
через интерфейс 1-Wire. Он предоставляет функции для чтения и записи через интерфейс 1-Wire. Он предоставляет функции для чтения и записи
конфигурации, выполнения измерений и обработки полученных данных. конфигурации, выполнения измерений и обработки полученных данных.
*****************************************************************************/ *****************************************************************************/
@@ -22,8 +22,8 @@ DALLAS_HandleTypeDef hdallas1;
/* Functions ---------------------------------------------------------------*/ /* Functions ---------------------------------------------------------------*/
/** /**
* @brief Функция для нахождения нового датчика на место потерянного * @brief Функция для нахождения нового датчика на место потерянного
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor) HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor)
@@ -48,15 +48,15 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor)
} }
else else
{ {
return HAL_BUSY; // датчик не потерян return HAL_BUSY; // датчик не потерян
} }
} }
/** /**
* @brief Функция для иниицализации нового датчика в структуре * @brief Функция для иниицализации нового датчика в структуре
* @param onewire Указатель на структуру OneWire * @param onewire Указатель на структуру OneWire
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_AddNewSensors(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) 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 * @brief Инициализирует структуру датчика по ROM
* @param onewire Указатель на структуру OneWire * @param onewire Указатель на структуру OneWire
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) 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) if(comparebytes == 0)
{ {
@@ -140,9 +140,9 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_S
/** /**
* @brief Инициализирует структуру датчика по пользовательским байтам * @brief Инициализирует структуру датчика по пользовательским байтам
* @param onewire Указатель на структуру OneWire * @param onewire Указатель на структуру OneWire
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) 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++) for(int i = 0; i < hdallas->onewire->RomCnt; i++)
{ {
/* Проверка присутствует ли выбранный датчик на линии */ /* Проверка присутствует ли выбранный датчик на линии */
result = DS18B20_ReadScratchpad(hdallas->onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&hdallas->scratchpad); result = DS18B20_ReadScratchpad(hdallas->onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&hdallas->scratchpad);
if (result != HAL_OK) if (result != HAL_OK)
return result; return result;
/* Сравнение UserByte1 и UserByte2, если они не равны нулю */ /* Сравнение UserByte1 и UserByte2, если они не равны нулю */
if((sensor->Init.InitParam & 0xFFFF) != NULL) if((sensor->Init.InitParam & 0xFFFF) != NULL)
{ {
if( (hdallas->scratchpad.tHighRegister == UserByte1) && if( (hdallas->scratchpad.tHighRegister == UserByte1) &&
@@ -176,12 +176,12 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA
{ {
UserByte12Cmp = 1; UserByte12Cmp = 1;
} }
}/* Если сравнение UserByte1 и UserByte2 не выбрано, то считаем что они совпадают */ }/* Если сравнение UserByte1 и UserByte2 не выбрано, то считаем что они совпадают */
else else
{ {
UserByte12Cmp = 1; UserByte12Cmp = 1;
} }
/* Сравнение UserByte3 и UserByte4, если они не равны нулю */ /* Сравнение UserByte3 и UserByte4, если они не равны нулю */
if((sensor->Init.InitParam & 0xFFFF0000) != NULL) if((sensor->Init.InitParam & 0xFFFF0000) != NULL)
{ {
if( (hdallas->scratchpad.UserByte3 == UserByte3) && if( (hdallas->scratchpad.UserByte3 == UserByte3) &&
@@ -189,12 +189,12 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA
{ {
UserByte34Cmp = 1; UserByte34Cmp = 1;
} }
}/* Если сравнение UserByte3 и UserByte4 не выбрано, то считаем что они одинаковые */ }/* Если сравнение UserByte3 и UserByte4 не выбрано, то считаем что они одинаковые */
else else
{ {
UserByte34Cmp = 1; UserByte34Cmp = 1;
} }
/* Если нашли нужный датчик - завершаем поиск */ /* Если нашли нужный датчик - завершаем поиск */
if(UserByte12Cmp && UserByte34Cmp) if(UserByte12Cmp && UserByte34Cmp)
{ {
// sensor->isInitialized = 1; // sensor->isInitialized = 1;
@@ -205,17 +205,17 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA
} }
sensor->sensROM = 0; sensor->sensROM = 0;
/* Возвращаем ошибку если не нашли */ /* Возвращаем ошибку если не нашли */
return HAL_ERROR; return HAL_ERROR;
} }
/** /**
* @brief Инициализирует структуру датчика по порядковому номеру * @brief Инициализирует структуру датчика по порядковому номеру
* @param onewire Указатель на структуру OneWire * @param onewire Указатель на структуру OneWire
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @retval HAL Status * @retval HAL Status
* @details Порядковый номер датчика в списке найденных. * @details Порядковый номер датчика в списке найденных.
* Т.е. каким по счету этот датчик был найден * Т.е. каким по счету этот датчик был найден
*/ */
HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor) HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor)
{ {
@@ -232,10 +232,10 @@ HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_S
} }
/** /**
* @brief Инициализирует датчик для работы * @brief Инициализирует датчик для работы
* @param onewire Указатель на структуру OneWire * @param onewire Указатель на структуру OneWire
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @param ROM ROM датчика, который надо инициализировать * @param ROM ROM датчика, который надо инициализировать
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]) 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++) // for(int i = 0; i < DALLAS_ROM_SIZE; i++)
// sensor->sensROM |= ((uint64_t)(*ROM)[i] << (56 - 8*i)); // sensor->sensROM |= ((uint64_t)(*ROM)[i] << (56 - 8*i));
/* Проверка присутствует ли выбранный датчик на линии */ /* Проверка присутствует ли выбранный датчик на линии */
result = DS18B20_ReadScratchpad(hdallas->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&hdallas->scratchpad); result = DS18B20_ReadScratchpad(hdallas->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&hdallas->scratchpad);
if (result == HAL_OK) if (result == HAL_OK)
{ {
/* Установка разрешения */ /* Установка разрешения */
result = DS18B20_SetResolution(hdallas->onewire, (uint8_t *)ROM, sensor->Init.Resolution); result = DS18B20_SetResolution(hdallas->onewire, (uint8_t *)ROM, sensor->Init.Resolution);
if (result == HAL_OK) if (result == HAL_OK)
{ {
@@ -278,10 +278,10 @@ HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_Sensor
} }
/** /**
* @brief Деинициализирует структуру датчика * @brief Деинициализирует структуру датчика
* @param onewire Указатель на структуру OneWire * @param onewire Указатель на структуру OneWire
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @param sens_ind Порядковый номер датчика в структуре * @param sens_ind Порядковый номер датчика в структуре
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor) HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor)
@@ -299,10 +299,10 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor)
} }
/** /**
* @brief Запускает измерение температуры на всех датчиках * @brief Запускает измерение температуры на всех датчиках
* @param onewire Указатель на структуру OneWire * @param onewire Указатель на структуру OneWire
* @param waitCondition Условие ожидания завершения преобразования * @param waitCondition Условие ожидания завершения преобразования
* @param dallas_delay_ms Время ожидания окончания конверсии * @param dallas_delay_ms Время ожидания окончания конверсии
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_StartConvertTAll(DALLAS_HandleTypeDef *hdallas, DALLAS_WaitConvertionTypeDef waitCondition, uint8_t dallas_delay_ms) 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) if(hdallas == NULL)
return HAL_ERROR; return HAL_ERROR;
// Отправка команды начала преобразования температуры // Отправка команды начала преобразования температуры
result = DS18B20_StartConvTAll(hdallas->onewire); result = DS18B20_StartConvTAll(hdallas->onewire);
if(result != HAL_OK) if(result != HAL_OK)
{ {
return result; return result;
} }
// // Проверка что преобразование началось // // Проверка что преобразование началось
// if(OneWire_ReadBit(onewire) == 1) // if(OneWire_ReadBit(onewire) == 1)
// return HAL_ERROR; // return HAL_ERROR;
// Ожидание завершения преобразования, путем проверки шины // Ожидание завершения преобразования, путем проверки шины
if (waitCondition == DALLAS_WAIT_BUS) if (waitCondition == DALLAS_WAIT_BUS)
{ {
result = DS18B20_WaitForEndConvertion(hdallas->onewire); result = DS18B20_WaitForEndConvertion(hdallas->onewire);
return result; return result;
} }
// Ожидание завершения преобразования, путем задержки // Ожидание завершения преобразования, путем задержки
if (waitCondition == DALLAS_WAIT_DELAY) if (waitCondition == DALLAS_WAIT_DELAY)
{ {
uint32_t delayValueMs = 0; uint32_t delayValueMs = 0;
@@ -364,9 +364,9 @@ HAL_StatusTypeDef Dallas_StartConvertTAll(DALLAS_HandleTypeDef *hdallas, DALLAS_
} }
/** /**
* @brief Измеряет температуру на датчике * @brief Измеряет температуру на датчике
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @param waitCondition Условие ожидания завершения преобразования * @param waitCondition Условие ожидания завершения преобразования
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition) 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) if(sensor->isInitialized == 0)
return HAL_ERROR; return HAL_ERROR;
/* Проверка присутствует ли выбранный датчик на линии */ /* Проверка присутствует ли выбранный датчик на линии */
result = Dallas_IsConnected(sensor); result = Dallas_IsConnected(sensor);
if (result != HAL_OK) if (result != HAL_OK)
return result; return result;
// Отправка команды начала преобразования температуры // Отправка команды начала преобразования температуры
result = DS18B20_StartConvT(sensor->hdallas->onewire, (uint8_t *)&sensor->sensROM); result = DS18B20_StartConvT(sensor->hdallas->onewire, (uint8_t *)&sensor->sensROM);
if(result != HAL_OK) if(result != HAL_OK)
{ {
return result; return result;
} }
// Ожидание завершения преобразования, путем проверки шины // Ожидание завершения преобразования, путем проверки шины
if (waitCondition == DALLAS_WAIT_BUS) if (waitCondition == DALLAS_WAIT_BUS)
{ {
result = DS18B20_WaitForEndConvertion(sensor->hdallas->onewire); result = DS18B20_WaitForEndConvertion(sensor->hdallas->onewire);
@@ -402,7 +402,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_Wai
return result; return result;
} }
// Ожидание завершения преобразования, путем задержки // Ожидание завершения преобразования, путем задержки
if (waitCondition == DALLAS_WAIT_DELAY) if (waitCondition == DALLAS_WAIT_DELAY)
{ {
uint32_t delayValueMs = 0; uint32_t delayValueMs = 0;
@@ -432,7 +432,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_Wai
HAL_Delay(delayValueMs); HAL_Delay(delayValueMs);
} }
/* Не считываем температуру, если не выбрано ожидание окончания преобразования */ /* Не считываем температуру, если не выбрано ожидание окончания преобразования */
if(waitCondition != DALLAS_WAIT_NONE) if(waitCondition != DALLAS_WAIT_NONE)
{ {
result = Dallas_ReadTemperature(sensor); result = Dallas_ReadTemperature(sensor);
@@ -443,8 +443,8 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_Wai
/** /**
* @brief Читает измеренную датчиком температуру * @brief Читает измеренную датчиком температуру
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor) HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor)
@@ -456,7 +456,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor)
if(sensor->isInitialized == 0) if(sensor->isInitialized == 0)
return HAL_ERROR; return HAL_ERROR;
/* Проверка присутствует ли выбранный датчик на линии */ /* Проверка присутствует ли выбранный датчик на линии */
result = Dallas_IsConnected(sensor); result = Dallas_IsConnected(sensor);
if (result != HAL_OK) if (result != HAL_OK)
{ {
@@ -476,8 +476,8 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor)
} }
/** /**
* @brief Проверяет подключен ли датчик (чтение scratchpad) * @brief Проверяет подключен ли датчик (чтение scratchpad)
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @retval HAL Status * @retval HAL Status
*/ */
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor) HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor)
@@ -506,18 +506,18 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor)
sensor->isConnected = 0; sensor->isConnected = 0;
// Dallas_ReplaceLostedSensor(sensor); // Dallas_ReplaceLostedSensor(sensor);
return HAL_BUSY; // использую busy, чтобы отличать ситуацию от HAL_ERROR return HAL_BUSY; // использую busy, чтобы отличать ситуацию от HAL_ERROR
} }
} }
/** /**
* @brief Записывает пользовательские байты * @brief Записывает пользовательские байты
* @param sensor Указатель на структуру датчика * @param sensor Указатель на структуру датчика
* @param UserBytes12 Пользовательские байты 1 и 2 * @param UserBytes12 Пользовательские байты 1 и 2
* @param UserBytes34 Пользовательские байты 3 и 4 * @param UserBytes34 Пользовательские байты 3 и 4
* @param UserBytesMask Маска, какие байты записывать, а какие нет * @param UserBytesMask Маска, какие байты записывать, а какие нет
* @retval HAL Status * @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) 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) if(sensor->isInitialized == 0)
return HAL_ERROR; return HAL_ERROR;
/* Проверка присутствует ли выбранный датчик на линии */ /* Проверка присутствует ли выбранный датчик на линии */
result = Dallas_IsConnected(sensor); result = Dallas_IsConnected(sensor);
if (result != HAL_OK) if (result != HAL_OK)
return result; return result;

View File

@@ -1,14 +1,14 @@
/** /**
****************************************************************************** ******************************************************************************
* @file dallas_tools.h * @file dallas_tools.h
* @brief Драйвер датчиков температуры DALLAS * @brief Драйвер датчиков температуры DALLAS
****************************************************************************** ******************************************************************************
* Этот файл предоставляет объявления и определения для работы с датчиками * Этот файл предоставляет объявления и определения для работы с датчиками
* температуры DS18B20. Он включает структуры данных, макросы и прототипы * температуры DS18B20. Он включает структуры данных, макросы и прототипы
* функций для инициализации, чтения температуры * функций для инициализации, чтения температуры
* и управления датчиками. * и управления датчиками.
* *
* Работа с датчиками ведётся через протокол OneWire. * Работа с датчиками ведётся через протокол OneWire.
*****************************************************************************/ *****************************************************************************/
#ifndef DALLAS_TOOLS_H #ifndef DALLAS_TOOLS_H
@@ -20,15 +20,15 @@
#include "ds18b20_driver.h" #include "ds18b20_driver.h"
#include "onewire.h" #include "onewire.h"
/* Определения пользовательских байтов для записи чтения */ /* Определения пользовательских байтов для записи чтения */
#define DALLAS_USER_BYTE_1 (1<<0) ///< Первый пользовательский байт #define DALLAS_USER_BYTE_1 (1<<0) ///< Первый пользовательский байт
#define DALLAS_USER_BYTE_2 (1<<1) ///< Второй пользовательский байт #define DALLAS_USER_BYTE_2 (1<<1) ///< Второй пользовательский байт
#define DALLAS_USER_BYTE_3 (1<<2) ///< Третий пользовательский байт #define DALLAS_USER_BYTE_3 (1<<2) ///< Третий пользовательский байт
#define DALLAS_USER_BYTE_4 (1<<3) ///< Четвёртый пользовательский байт #define DALLAS_USER_BYTE_4 (1<<3) ///< Четвёртый пользовательский байт
#define DALLAS_USER_BYTE_12 (DALLAS_USER_BYTE_1|DALLAS_USER_BYTE_2) ///< Первые два байта #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_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_ALL (DALLAS_USER_BYTE_12|DALLAS_USER_BYTE_34) ///< Все пользовательские байты
/* Declarations and definitions ---------------------------------------------*/ /* Declarations and definitions ---------------------------------------------*/
#define DALLAS_ROM_SIZE 8 #define DALLAS_ROM_SIZE 8
@@ -44,41 +44,41 @@
#define DALLAS_DELAY_MS_12_BITS 750 #define DALLAS_DELAY_MS_12_BITS 750
#define DALLAS_DELAY_MS_MAX DALLAS_DELAY_MS_12_BITS #define DALLAS_DELAY_MS_MAX DALLAS_DELAY_MS_12_BITS
/** @brief Структура Scratchpad датчика DALLAS */ /** @brief Структура Scratchpad датчика DALLAS */
typedef struct typedef struct
{ {
uint8_t TemperatureLSB; ///< Младший байт температуры uint8_t TemperatureLSB; ///< Младший байт температуры
uint8_t TemperatureMSB; ///< Старший байт температуры uint8_t TemperatureMSB; ///< Старший байт температуры
uint8_t tHighRegister; ///< Верхний температурный порог uint8_t tHighRegister; ///< Верхний температурный порог
uint8_t tLowRegister; ///< Нижний температурный порог uint8_t tLowRegister; ///< Нижний температурный порог
uint8_t ConfigRegister; ///< Конфигурационный регистр uint8_t ConfigRegister; ///< Конфигурационный регистр
uint8_t reserved; ///< Зарезервировано uint8_t reserved; ///< Зарезервировано
uint8_t UserByte3; ///< Пользовательский байт 3 uint8_t UserByte3; ///< Пользовательский байт 3
uint8_t UserByte4; ///< Пользовательский байт 4 uint8_t UserByte4; ///< Пользовательский байт 4
uint8_t ScratchpadCRC; ///< Контрольная сумма uint8_t ScratchpadCRC; ///< Контрольная сумма
}DALLAS_ScratchpadTypeDef; }DALLAS_ScratchpadTypeDef;
/** @brief Структура флагов ошибок датчиков DALLAS */ /** @brief Структура флагов ошибок датчиков DALLAS */
typedef struct typedef struct
{ {
uint8_t disconnect_cnt; ///< Счетчик отключений датчика uint8_t disconnect_cnt; ///< Счетчик отключений датчика
uint8_t read_temperature_err_cnt; ///< Счетчик ошибок чтения температуры uint8_t read_temperature_err_cnt; ///< Счетчик ошибок чтения температуры
uint8_t timeout_convertion_cnt; ///< Счетчик ошибок таймаута конвертации uint8_t timeout_convertion_cnt; ///< Счетчик ошибок таймаута конвертации
uint8_t write_err_cnt; ///< Счетчик других ошибок uint8_t write_err_cnt; ///< Счетчик других ошибок
}DALLAS_FlagsTypeDef; }DALLAS_FlagsTypeDef;
/** @brief Структура инициализации датчика DALLAS */ /** @brief Структура инициализации датчика DALLAS */
typedef struct __packed typedef struct __packed
{ {
uint64_t InitParam; ///< Параметр для инициализации: ROM/UserBytes/Индекс uint64_t InitParam; ///< Параметр для инициализации: ROM/UserBytes/Индекс
uint8_t Resolution; ///< Разрешение датчика uint8_t Resolution; ///< Разрешение датчика
HAL_StatusTypeDef (*init_func)(); ///< Функция инициализации HAL_StatusTypeDef (*init_func)(); ///< Функция инициализации
} DALLAS_InitStructTypeDef; } DALLAS_InitStructTypeDef;
/** @brief Cтруктура обработчика DALLAS для общения с датчиком*/ /** @brief Cтруктура обработчика DALLAS для общения с датчиком*/
typedef struct typedef struct
{ {
OneWire_t *onewire; OneWire_t *onewire;
@@ -86,59 +86,59 @@ typedef struct
}DALLAS_HandleTypeDef; }DALLAS_HandleTypeDef;
extern DALLAS_HandleTypeDef hdallas1; extern DALLAS_HandleTypeDef hdallas1;
/** @brief Основная структура обработчика датчика DALLAS */ /** @brief Основная структура обработчика датчика DALLAS */
typedef struct typedef struct
{ {
unsigned isConnected:1; ///< Флаг соединения unsigned isConnected:1; ///< Флаг соединения
unsigned isInitialized:1; ///< Флаг инициализации unsigned isInitialized:1; ///< Флаг инициализации
unsigned isLost:1; ///< Флаг потери связи unsigned isLost:1; ///< Флаг потери связи
DALLAS_HandleTypeDef *hdallas; DALLAS_HandleTypeDef *hdallas;
uint64_t sensROM; ///< ROM-код датчика uint64_t sensROM; ///< ROM-код датчика
float temperature; ///< Текущая температура float temperature; ///< Текущая температура
DALLAS_InitStructTypeDef Init; ///< Структура инициализации DALLAS_InitStructTypeDef Init; ///< Структура инициализации
DALLAS_FlagsTypeDef f; ///< Флаги DALLAS_FlagsTypeDef f; ///< Флаги
} DALLAS_SensorHandleTypeDef; } DALLAS_SensorHandleTypeDef;
/** @brief Варианты ожидания окончания конверсии */ /** @brief Варианты ожидания окончания конверсии */
typedef enum typedef enum
{ {
DALLAS_WAIT_NONE = 0x00, ///< Без ожидания окончания конверсии DALLAS_WAIT_NONE = 0x00, ///< Без ожидания окончания конверсии
DALLAS_WAIT_BUS = 0x01, ///< Ожидание окончания конверсии по шине (опрос датчиков - чтение бита) DALLAS_WAIT_BUS = 0x01, ///< Ожидание окончания конверсии по шине (опрос датчиков - чтение бита)
DALLAS_WAIT_DELAY = 0x02, ///< Без ожидания окончания через задержку (максимальная задержка для заданной разрядности) DALLAS_WAIT_DELAY = 0x02, ///< Без ожидания окончания через задержку (максимальная задержка для заданной разрядности)
} DALLAS_WaitConvertionTypeDef; } DALLAS_WaitConvertionTypeDef;
/* Functions ---------------------------------------------------------------*/ /* Functions ---------------------------------------------------------------*/
/* Функция для нахождения нового датчика на место потерянного */ /* Функция для нахождения нового датчика на место потерянного */
HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor); HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor);
/* Функция для иниицализации нового датчика в структуре */ /* Функция для иниицализации нового датчика в структуре */
HAL_StatusTypeDef Dallas_AddNewSensors(DALLAS_HandleTypeDef *hdallas, 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_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor);
/* Инициализирует структуру датчика по пользовательским байтам */ /* Инициализирует структуру датчика по пользовательским байтам */
HAL_StatusTypeDef Dallas_SensorInitByUserBytes(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_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_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_SensorHandleTypeDef *sensor, uint8_t (*ROM)[DALLAS_ROM_SIZE]);
/* Деинициализирует структуру датчика */ /* Деинициализирует структуру датчика */
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor); 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_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_ConvertT(DALLAS_SensorHandleTypeDef *sensor, DALLAS_WaitConvertionTypeDef waitCondition);
/* Читает измеренную датчиком температуру */ /* Читает измеренную датчиком температуру */
HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor); HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor);
/* Проверяет подключен ли датчик (чтение scratchpad) */ /* Проверяет подключен ли датчик (чтение scratchpad) */
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor); HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor);
/* Записывает пользовательские байты */ /* Записывает пользовательские байты */
HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask); HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask);

View File

@@ -19,16 +19,16 @@
//#define LL_Driver //#define LL_Driver
#define CMSIS_Driver #define CMSIS_Driver
/* OneWire Timings -----------------------------------------------------------*/ /* OneWire Timings -----------------------------------------------------------*/
#define ONEWIRE_RESET_PULSE_US 480 // Äëèòåëüíîñòü èìïóëüñà ñáðîñà #define ONEWIRE_RESET_PULSE_US 480 // Длительность импульса сброса
#define ONEWIRE_PRESENCE_WAIT_US 70 // Îæèäàíèå îòâåòà îò äàò÷èêà #define ONEWIRE_PRESENCE_WAIT_US 70 // Ожидание ответа от датчика
#define ONEWIRE_PRESENCE_DURATION_US 410 // Äëèòåëüíîñòü ñèãíàëà ïðèñóòñòâèÿ #define ONEWIRE_PRESENCE_DURATION_US 410 // Длительность сигнала присутствия
#define ONEWIRE_WRITE_1_US 8 // Äëèòåëüíîñòü çàïèñè "1" #define ONEWIRE_WRITE_1_US 8 // Длительность записи "1"
#define ONEWIRE_WRITE_0_US 57 // Äëèòåëüíîñòü çàïèñè "0" #define ONEWIRE_WRITE_0_US 57 // Длительность записи "0"
#define ONEWIRE_READ_CMD_US 2 // Âðåìÿ êîììàíäû ÷òåíèÿ áèòà #define ONEWIRE_READ_CMD_US 2 // Время комманды чтения бита
#define ONEWIRE_READ_DELAY_US 6 // Çàäåðæêà ïåðåä ñ÷èòûâàíèåì áèòà #define ONEWIRE_READ_DELAY_US 6 // Задержка перед считыванием бита
#define ONEWIRE_COMMAND_SLOT_US 58 // Îáùåå âðåìÿ êîììàíäû OneWire #define ONEWIRE_COMMAND_SLOT_US 58 // Общее время комманды OneWire
#define ONEWIRE_RECOVERY_TIME_US 1 // Âîññòàíîâëåíèå ïåðåä ñëåäóþùèì ñëîòîì #define ONEWIRE_RECOVERY_TIME_US 1 // Восстановление перед следующим слотом
/* Common Register -----------------------------------------------------------*/ /* Common Register -----------------------------------------------------------*/
#define ONEWIRE_CMD_SEARCHROM 0xF0 #define ONEWIRE_CMD_SEARCHROM 0xF0
#define ONEWIRE_CMD_READROM 0x33 #define ONEWIRE_CMD_READROM 0x33

View File

@@ -1,7 +1,7 @@
/** /**
****************************************************************************** ******************************************************************************
* @file pch_sensors.c * @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; PCHSens_LocationTypeDef *param = (PCHSens_LocationTypeDef *)&hbus->hdallas->scratchpad.tHighRegister;
for(int i = 0; i < hbus->hdallas->onewire->RomCnt; i++) 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); result = DS18B20_ReadScratchpad(hbus->hdallas->onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&hbus->hdallas->scratchpad);
if(result != HAL_OK) if(result != HAL_OK)
__NOP(); __NOP();

View File

@@ -1,7 +1,7 @@
/** /**
****************************************************************************** ******************************************************************************
* @file pch_sensors.h * @file pch_sensors.h
* @brief Работа с датчиками температуры DS18B20 в ПЧ * @brief Работа с датчиками температуры DS18B20 в ПЧ
****************************************************************************** ******************************************************************************
*****************************************************************************/ *****************************************************************************/
@@ -16,33 +16,33 @@
/* Declarations and definitions ---------------------------------------------*/ /* Declarations and definitions ---------------------------------------------*/
#define USED_USER_BYTES DALLAS_USER_BYTE_12 #define USED_USER_BYTES DALLAS_USER_BYTE_12
/* Позиции параметров в UserBytes */ /* Позиции параметров в UserBytes */
#define REG_SENS_LOCATION_Pos (0) /*!< @brief Позиция параметра "Локация внутри модуля" */ #define REG_SENS_LOCATION_Pos (0) /*!< @brief Позиция параметра "Локация внутри модуля" */
#define REG_PCH_LOCATION_Pos (8) /*!< @brief Позиция параметра "Расположение в ПЧ" */ #define REG_PCH_LOCATION_Pos (8) /*!< @brief Позиция параметра "Расположение в ПЧ" */
#define REG_PCH_DIOD_PHASE_Pos (10) /*!< @brief Позиция параметра "Диодный или фазный модуль" @ref REG_PCH_LOCATION_Pos */ #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_MODULE_NUMB_Pos (8) /*!< @brief Позиция параметра "Порядковый номер диодного/фазного модуля" @ref REG_PCH_LOCATION_Pos */
#define REG_PCH_NUMB_Pos (11) /*!< @brief Позиция параметра "Преобразователь частоты" */ #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_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_DIGIT_2_Pos (11) /*!< @brief Позиция параметра "Вторая цифра номера преобразователя частоты" @ref REG_PCH_NUMB_Pos */
#define REG_ZIP_Pos (15) /*!< @brief Позиция параметра "ЗИП/не ЗИП" */ #define REG_ZIP_Pos (15) /*!< @brief Позиция параметра "ЗИП/не ЗИП" */
/* Маски параметров в UserBytes */ /* Маски параметров в UserBytes */
#define REG_SENS_LOCATION_Mask ((uint16_t)0x3 << REG_SENS_LOCATION_Pos) /*!< @brief Маска параметра "Локация внутри модуля" */ #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_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_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_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_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_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_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_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_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)) #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_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)) #define REG_PCH_PHASE_NUMB_3 ((1 << REG_PCH_DIOD_PHASE_Pos) | (3 << REG_PCH_MODULE_NUMB_Pos))
/* Получить параметр из UserBytes */ /* Получить параметр из UserBytes */
#define GET_REG_SENS_LOCATION(_REG_) ((_REG_) & REG_SENS_LOCATION_Mask) /*!< @brief Получить параметр "Локация внутри модуля" */ #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_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_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_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(_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_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_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_MAX 3
#define REG_SENS_LOCATION_MIN 0 #define REG_SENS_LOCATION_MIN 0
#define REG_PCH_DIOD_PHASE_MAX 1 #define REG_PCH_DIOD_PHASE_MAX 1
@@ -83,23 +83,23 @@
#define REG_PCH_NUMB_DIGIT_2_MIN 1 #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)) #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_)) #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)) #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)) #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_)) #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)) #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)) #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_)) #define IS_REG_ZIP(_REG_) (GET_REG_ZIP(_REG_))
typedef union typedef union

View File

@@ -30,34 +30,34 @@ TIM_HandleTypeDef htim14;
/* TIM3 init function */ /* TIM3 init function */
void MX_TIM1_Init(void) void MX_TIM1_Init(void)
{ {
// Включение тактирования TIM1 // Включение тактирования TIM1
__HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM1_CLK_ENABLE();
// Установка предделителя (Prescaler) // Установка предделителя (Prescaler)
TIM1->PSC = 0; TIM1->PSC = 0;
// Установка режима счета вверх // Установка режима счета вверх
TIM1->CR1 &= ~TIM_CR1_DIR; TIM1->CR1 &= ~TIM_CR1_DIR;
// Установка периода (ARR - Auto-reload register) // Установка периода (ARR - Auto-reload register)
TIM1->ARR = 0xFFFFFFFF; TIM1->ARR = 0xFFFFFFFF;
// Установка делителя частоты (Clock Division) // Установка делителя частоты (Clock Division)
TIM1->CR1 &= ~TIM_CR1_CKD; TIM1->CR1 &= ~TIM_CR1_CKD;
// Отключение режима предзагрузки // Отключение режима предзагрузки
TIM1->CR1 &= ~TIM_CR1_ARPE; TIM1->CR1 &= ~TIM_CR1_ARPE;
// Выбор внутреннего источника тактирования // Выбор внутреннего источника тактирования
TIM1->SMCR &= ~TIM_SMCR_SMS; TIM1->SMCR &= ~TIM_SMCR_SMS;
// Настройка триггерного выхода (TRGO) // Настройка триггерного выхода (TRGO)
TIM1->CR2 &= ~TIM_CR2_MMS; TIM1->CR2 &= ~TIM_CR2_MMS;
// Отключение режима Master/Slave // Отключение режима Master/Slave
TIM1->SMCR &= ~TIM_SMCR_MSM; TIM1->SMCR &= ~TIM_SMCR_MSM;
// Включение таймера // Включение таймера
TIM1->CR1 |= TIM_CR1_CEN; TIM1->CR1 |= TIM_CR1_CEN;
// /* USER CODE BEGIN TIM3_Init 0 */ // /* USER CODE BEGIN TIM3_Init 0 */