чуть структурирована, добавлено описение по подключению в шапке

добавлен пример для stm32
This commit is contained in:
2025-06-21 09:05:50 +03:00
parent c2dca42be6
commit 7ef076e289
928 changed files with 481793 additions and 461 deletions

View File

@@ -7,7 +7,7 @@
#include "ow_port.h"
#include "onewire.h"
#include "tim.h"
uint32_t pin_pos = (DS_Pin_Numb < 8) ? (DS_Pin_Numb * 4) : ((DS_Pin_Numb - 8) * 4);
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
@@ -17,20 +17,20 @@ uint32_t pin_pos = (DS_Pin_Numb < 8) ? (DS_Pin_Numb * 4) : ((DS_Pin_Numb - 8) *
void OneWire_Pin_Mode(OneWire_t* OW, PinMode Mode)
{
#ifdef CMSIS_Driver
volatile uint32_t *config_reg = (DS_Pin_Numb < 8) ? &(OW->DataPort->CRL) : &(OW->DataPort->CRH);
// Ñáðîñ òåêóùèõ 4 áèò (CNF + MODE)
volatile uint32_t *config_reg = (OW_Pin_Numb < 8) ? &(OW->DataPort->CRL) : &(OW->DataPort->CRH);
// —брос текущих 4 бит (CNF + MODE)
*config_reg &= ~(0xF << pin_pos);
if (Mode == Input)
{
// Âõîä ñ ïîäòÿæêîé èëè áåç íàïðèìåð, CNF = 0b01, MODE = 0b00
// Çäåñü óñòàíàâëèâàåì âõîä ñ ïîäòÿæêîé:
*config_reg |= (0x8 << pin_pos); // CNF=10, MODE=00 (âõîä ñ ïîäòÿæêîé)
OW->DataPort->ODR |= (1 << DS_Pin_Numb); // Âêëþ÷èòü ïîäòÿæêó ââåðõ
// ¬ход с подт¤жкой или без Ц например, CNF = 0b01, MODE = 0b00
// «десь устанавливаем вход с подт¤жкой:
*config_reg |= (0x8 << pin_pos); // CNF=10, MODE=00 (вход с подт¤жкой)
OW->DataPort->ODR |= (1 << OW_Pin_Numb); // ¬ключить подт¤жку вверх
}
else
{
// Âûõîä push-pull, 2 ÌÃö MODE = 0b10, CNF = 0b00
// ¬ыход push-pull, 2 ћ√ц Ц MODE = 0b10, CNF = 0b00
*config_reg |= (0x2 << pin_pos);
}
#else
@@ -105,7 +105,7 @@ uint8_t OneWire_Pin_Read(OneWire_t* OW)
}
uint32_t tim_1us_period = OW_TIM_1US_PERIOD;
void OneWire_Delay_uw(uint32_t us)
void OneWire_Delay_us(uint32_t us)
{
uint32_t ticks = us * tim_1us_period;
uint16_t start = OW_TIM->CNT;
@@ -115,7 +115,7 @@ void OneWire_Delay_uw(uint32_t us)
while (elapsed < ticks)
{
uint16_t curr = OW_TIM->CNT;
uint16_t delta = (uint16_t)(curr - prev); // ó÷¸ò ïåðåïîëíåíèÿ
uint16_t delta = (uint16_t)(curr - prev); // учЄт переполнени¤
elapsed += delta;
prev = curr;
}