сделана инициализация всей периферии для OW в Dallas_BusFirstInit
можно выбрать дефолтную периферию, передав в фукнию NULL, а можно и свою кастомную, типа Dallas_BusFirstInit(&hdallas, GPIOA, GPIO_PIN_2); надо теперь расписать все в ридми
This commit is contained in:
@@ -102,16 +102,30 @@ 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;
|
||||||
hdallas->onewire.DataPin = GPIO_Pin;
|
if(GPIOx == NULL)
|
||||||
hdallas->onewire.DataPort = GPIOx;
|
{
|
||||||
|
hdallas->onewire.DataPin = OW_Pin;
|
||||||
|
hdallas->onewire.DataPort = OW_GPIO_Port;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hdallas->onewire.DataPin = GPIO_Pin;
|
||||||
|
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;
|
||||||
hdallas->onewire.huart = huart;
|
else
|
||||||
|
hdallas->onewire.huart = huart;
|
||||||
#endif
|
#endif
|
||||||
/* Инициализация onewire и поиск датчиков*/
|
/* Инициализация onewire и поиск датчиков*/
|
||||||
OneWire_Init(&hdallas->onewire);
|
OneWire_Init(&hdallas->onewire);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 -----------------------------------------------------------*/
|
||||||
|
|||||||
Reference in New Issue
Block a user