сделана инициализация всей периферии для OW в Dallas_BusFirstInit

можно выбрать дефолтную периферию, передав в фукнию NULL, а можно и свою кастомную, типа

  Dallas_BusFirstInit(&hdallas, GPIOA, GPIO_PIN_2);

надо теперь расписать все в ридми
This commit is contained in:
2025-06-30 19:00:42 +03:00
parent fad8b2551a
commit 5cc733f4d2
4 changed files with 43 additions and 23 deletions

View File

@@ -102,15 +102,29 @@ HAL_StatusTypeDef Dallas_BusFirstInit(DALLAS_HandleTypeDef *hdallas, UART_Handle
return HAL_ERROR; return HAL_ERROR;
#ifndef UART_Driver #ifndef UART_Driver
if(GPIOx == NULL)
return HAL_ERROR;
OW_TIM->CR1 |= TIM_CR1_CEN; OW_TIM->CR1 |= TIM_CR1_CEN;
if(GPIOx == NULL)
{
hdallas->onewire.DataPin = OW_Pin;
hdallas->onewire.DataPort = OW_GPIO_Port;
}
else
{
hdallas->onewire.DataPin = GPIO_Pin; hdallas->onewire.DataPin = GPIO_Pin;
hdallas->onewire.DataPort = GPIOx; hdallas->onewire.DataPort = GPIOx;
}
for (uint32_t i = 0; i < 16; i++)
{
if (hdallas->onewire.DataPin & (1 << i))
{
hdallas->onewire.DataPinNumb = i;
break;
}
}
#else #else
if(huart == NULL) if(huart == NULL)
return HAL_ERROR; hdallas->onewire.huart = &OW_UART_Handle;
else
hdallas->onewire.huart = huart; hdallas->onewire.huart = huart;
#endif #endif
/* Инициализация onewire и поиск датчиков*/ /* Инициализация onewire и поиск датчиков*/

View File

@@ -50,6 +50,7 @@ typedef struct
#if defined(UART_Driver) #if defined(UART_Driver)
UART_HandleTypeDef *huart; UART_HandleTypeDef *huart;
#else #else
uint16_t DataPinNumb;
uint16_t DataPin; uint16_t DataPin;
GPIO_TypeDef *DataPort; GPIO_TypeDef *DataPort;
#endif #endif

View File

@@ -7,7 +7,6 @@
#include "ow_port.h" #include "ow_port.h"
#include "onewire.h" #include "onewire.h"
#include "tim.h" #include "tim.h"
uint32_t pin_pos = (OW_Pin_Numb < 8) ? (OW_Pin_Numb * 4) : ((OW_Pin_Numb - 8) * 4);
/** /**
* @brief The internal function is used as gpio pin mode * @brief The internal function is used as gpio pin mode
@@ -18,7 +17,8 @@ void OneWire_Pin_Mode(OneWire_t* OW, PinMode Mode)
{ {
#if defined(UART_Driver) #if defined(UART_Driver)
#elif defined(CMSIS_Driver) #elif defined(CMSIS_Driver)
volatile uint32_t *config_reg = (OW_Pin_Numb < 8) ? &(OW->DataPort->CRL) : &(OW->DataPort->CRH); volatile uint32_t *config_reg = (OW->DataPinNumb < 8) ? &(OW->DataPort->CRL) : &(OW->DataPort->CRH);
uint32_t pin_pos = (OW->DataPinNumb < 8) ? (OW->DataPinNumb * 4) : ((OW->DataPinNumb - 8) * 4);
// —брос текущих 4 бит (CNF + MODE) // —брос текущих 4 бит (CNF + MODE)
*config_reg &= ~(0xF << pin_pos); *config_reg &= ~(0xF << pin_pos);
@@ -27,7 +27,7 @@ volatile uint32_t *config_reg = (OW_Pin_Numb < 8) ? &(OW->DataPort->CRL) : &(OW-
// ¬ход с подт¤жкой или без Ц например, CNF = 0b01, MODE = 0b00 // ¬ход с подт¤жкой или без Ц например, CNF = 0b01, MODE = 0b00
// «десь устанавливаем вход с подт¤жкой: // «десь устанавливаем вход с подт¤жкой:
*config_reg |= (0x8 << pin_pos); // CNF=10, MODE=00 (вход с подт¤жкой) *config_reg |= (0x8 << pin_pos); // CNF=10, MODE=00 (вход с подт¤жкой)
OW->DataPort->ODR |= (1 << OW_Pin_Numb); // ¬ключить подт¤жку вверх OW->DataPort->ODR |= (1 << OW->DataPinNumb); // ¬ключить подт¤жку вверх
} }
else else
{ {
@@ -118,3 +118,4 @@ void OneWire_Delay_us(uint32_t us)
prev = curr; prev = curr;
} }
} }

View File

@@ -13,49 +13,53 @@
#include "stm32f1xx_hal.h" #include "stm32f1xx_hal.h"
/* I/O Port ------------------------------------------------------------------*/ /* I/O Port ------------------------------------------------------------------*/
//#define UART_Driver ///< использовтаь UART (onewire_uart.c/.h) #define UART_Driver ///< использовтаь UART (onewire_uart.c/.h)
//#define LL_Driver ///< использовать CMSIS для управления ножкой //#define LL_Driver ///< использовать CMSIS для управления ножкой
#define CMSIS_Driver ///< использовать CMSIS для управления ножкой #define CMSIS_Driver ///< использовать CMSIS для управления ножкой
// если ничего не выбрано - используется HAL // если ничего не выбрано - используется HAL
/**
* @defgroup DEFAULT_SETTINGS Дефолтные параметры для OW
* @details Определены дефолтные параметры для OW, применятся если передать NULL в Dallas_BusFirstInit.
* @{
*/
/**
* @brief Порт вывода для шины 1-Wire.
* @details Указывает порт GPIO, к которому подключена линия данных 1-Wire (например, для DS18B20).
*/
#define OW_UART_Handle huart1
/** /**
* @def OW_GPIO_Port
* @brief Порт вывода для шины 1-Wire. * @brief Порт вывода для шины 1-Wire.
* @details Указывает порт GPIO, к которому подключена линия данных 1-Wire (например, для DS18B20). * @details Указывает порт GPIO, к которому подключена линия данных 1-Wire (например, для DS18B20).
*/ */
#define OW_GPIO_Port GPIOA #define OW_GPIO_Port GPIOA
/** /**
* @def OW_Pin_Numb
* @brief Номер пина в порту OW_GPIO_Port.
* @details Используется для формирования маски пина и настройки ввода/вывода.
*/
#define OW_Pin_Numb 9
/**
* @def OW_Pin
* @brief Маска пина, соответствующая номеру OW_Pin_Numb. * @brief Маска пина, соответствующая номеру OW_Pin_Numb.
* @details Используется при доступе к регистрам порта для управления состоянием линии 1-Wire. * @details Используется при доступе к регистрам порта для управления состоянием линии 1-Wire.
*/ */
#define OW_Pin (1<<OW_Pin_Numb) #define OW_Pin (GPIO_PIN_9)
/** /**
* @def OW_TIM
* @brief Аппаратный таймер для формирования временных интервалов протокола 1-Wire. * @brief Аппаратный таймер для формирования временных интервалов протокола 1-Wire.
* @details Применяется для создания точных задержек при обмене данными по шине 1-Wire. * @details Применяется для создания точных задержек при обмене данными по шине 1-Wire.
*/ */
#define OW_TIM TIM3 #define OW_TIM TIM3
/** /**
* @def OW_TIM_1US_PERIOD
* @brief Количество тактов таймера OW_TIM, соответствующее 1 микросекунде. * @brief Количество тактов таймера OW_TIM, соответствующее 1 микросекунде.
* @details Вычисляется на основе частоты таймера. Например, для таймера с частотой 24 МГц значение будет равно 24. * @details Вычисляется на основе частоты таймера. Например, для таймера с частотой 24 МГц значение будет равно 24.
*/ */
#define OW_TIM_1US_PERIOD 72 #define OW_TIM_1US_PERIOD 72
/** DEFAULT_SETTINGS
* @}
*/
/* OneWire Timings -----------------------------------------------------------*/ /* OneWire Timings -----------------------------------------------------------*/
void OneWire_Delay_us(uint32_t us); void OneWire_Delay_us(uint32_t us);
/* Common Register -----------------------------------------------------------*/ /* Common Register -----------------------------------------------------------*/