Вс май 20, 2018 18:43:31
static UARTConfig uart_cfg_1 = {
NULL,
NULL,
NULL,
NULL,
NULL,
9600,
0,
USART_CR2_LINEN,
0
};
uint8_t reset_onewire=0xF0;
while(1)
{
uartStart(&UARTD1, &uart_cfg_1);
uartStartSend(&UARTD1,1 , &reset_onewire);
chThdSleepMilliseconds(2000);
}
Вс май 20, 2018 19:19:28
void Usart_Cnf(uint32_t Rate) // Настройка USART.
{
USART_InitTypeDef Usart;
Usart.USART_BaudRate = Rate;
Usart.USART_WordLength = USART_WordLength_8b;
Usart.USART_StopBits = USART_StopBits_1;
Usart.USART_Parity = USART_Parity_No;
Usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
Usart.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(OW_USART, &Usart);
}
uint8_t OW_Reset(void) // Сброс 1-Wire.
{
uint8_t Res;
Usart_Cnf(9600);
uint8_t x=0xF0;
Res = OW_BitRW(&x);
if (Res == OW_OK)
{
if (x == 0xF0) Res = OW_NO_DEVICE;
else if ((x == 0x00) || (x == 0xFF)) Res = OW_ERROR;
}
Usart_Cnf(115200);
return Res;
}
Вс май 20, 2018 19:19:55
А причём тут ОС ?WaL97 писал(а):Есть чибиосоводы?
Устройству пофиг на эти миллисекунды после сброса.WaL97 писал(а):А это уже требует несколько миллисекунд, что очень долго.
Вс май 20, 2018 20:12:44
uint8_t reset_onewire=0xF0;
uint8_t readrom_cmd[72]=
{0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF, //0x33
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //чтение
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
while(1)
{
uartStart(&UARTD1, &uart_cfg_1);
chThdSleepMilliseconds(3);
uartStartSend(&UARTD1, 1, &reset_onewire);
chThdSleepMilliseconds(3);
uartStart(&UARTD1, &uart_cfg_2);
chThdSleepMilliseconds(3);
uartStartSend(&UARTD1, 72, &readrom_cmd[0]);
chThdSleepMilliseconds(2000);
}
00
30 30 31 33 38 37 20 00
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF
Вс май 20, 2018 21:23:32
Повторюсь. После ресета, устройство может ждать хоть 100 лет следующих команд. По этому, несколько миллисекунд - это не очень долго.WaL97 писал(а):А дальше не получается ничего.
Нужно перезапустить драйвер с другим конфигом, на скорости 115200. А это уже требует несколько миллисекунд, что очень долго.
Пн май 21, 2018 00:30:01
Вы вообще, о чём ? Какой терминал ? Что читает ? Куда читает ? ...
Повторюсь. После ресета, устройство может ждать хоть 100 лет следующих команд. По этому, несколько миллисекунд - это не очень долго.
Таймауты нужно выдерживать только в пределах тайм-слотов.
while(1)
{
uartStart(&UARTD1, &uart_cfg_1);
uartStartSend(&UARTD1, 1, &reset_onewire);
chThdSleepMilliseconds(3);
uartStart(&UARTD1, &uart_cfg_2);
uartStartSend(&UARTD1, 8, &readrom[0]);
for (int i=0;i<8; i++)
{
chThdSleepMilliseconds(1);
uartStartSend(&UARTD1, 8, &readrom_cmd[0]);
}
chThdSleepMilliseconds(2000);
}
Пн май 21, 2018 14:17:46