добавлена реализация onewire через uart и переделана структуруа шины OneWire и инциализация

Теперь при выборе UART, в функцию Dallas_BusFirstInit передается hdallas, huart, ow, ds

А при выборе GPIO ножки: hdallas, gpiox, gpio_pin, ow, ds

но надо как-то структуруизировать дальше
This commit is contained in:
2025-06-30 18:34:17 +03:00
parent 175bcd539f
commit fa32d653e8
14 changed files with 373 additions and 61 deletions

View File

@@ -86,30 +86,61 @@ DALLAS_HandleTypeDef hdallas;
/* Functions ---------------------------------------------------------------*/
/**
* @brief Функция для иниицализации шины OW для датчиков
* @brief Функция для иниицализации структуры dallas и шины OW для датчиков
* @param hdallas Указатель на хендл для общения с датчиками
* @param OW Указатель на структуру OneWire (если NULL — используется по умолчанию)
* @param DS Указатель на структуру драйвера DS18B20 (если NULL — используется по умолчанию)
* @retval HAL Status
*/
HAL_StatusTypeDef Dallas_BusFirstInit(TIM_HandleTypeDef *htim)
#ifndef UART_Driver
HAL_StatusTypeDef Dallas_BusFirstInit(DALLAS_HandleTypeDef *hdallas, GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin, OneWire_t *OW_Ptr, DS18B20_Drv_t *DS_Ptr)
#else
HAL_StatusTypeDef Dallas_BusFirstInit(DALLAS_HandleTypeDef *hdallas, UART_HandleTypeDef *huart, OneWire_t *OW_Ptr, DS18B20_Drv_t *DS_Ptr)
#endif
{
if(htim == NULL)
if(hdallas == NULL)
return HAL_ERROR;
HAL_StatusTypeDef result;
if(OW_Ptr == NULL)
hdallas->onewire = &OW;
HAL_TIM_Base_Start(htim);
if(DS_Ptr == NULL)
hdallas->ds_devices = &DS;
hdallas.onewire = &OW;
hdallas.ds_devices = &DS;
OW.DataPin = OW_Pin;
OW.DataPort = OW_GPIO_Port;
#ifndef UART_Driver
if(GPIOx == NULL)
return HAL_ERROR;
OW_TIM->CR1 |= TIM_CR1_CEN;
hdallas->onewire->DataPin = GPIO_Pin;
hdallas->onewire->DataPort = GPIOx;
#else
if(huart == NULL)
return HAL_ERROR;
hdallas->onewire->huart = huart;
#endif
/* Инициализация onewire и поиск датчиков*/
OneWire_Init(&OW);
OneWire_Init(hdallas->onewire);
return DS18B20_Search(&DS, &OW) != HAL_OK;
return Dallas_Search(hdallas);
}
/**
* @brief Поиск датчиков на шине onewire
* @param hdallas Указатель на хендл для общения с датчиками
* @retval HAL Status
*/
HAL_StatusTypeDef Dallas_Search(DALLAS_HandleTypeDef *hdallas)
{
if(hdallas == NULL)
return HAL_ERROR;
return DS18B20_Search(hdallas->ds_devices, hdallas->onewire) != HAL_OK;
}
/**
* @brief Функция для иниицализации нового датчика в структуре
@@ -153,7 +184,7 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor)
if(sensor->isLost)
{
if(DS18B20_Search(sensor->hdallas->ds_devices, sensor->hdallas->onewire) != HAL_OK)
if(Dallas_Search(sensor->hdallas) != HAL_OK)
return HAL_ERROR;
if(sensor->Init.init_func(sensor->hdallas, sensor) != HAL_OK)