STM32F4 - чтение температуры от DS18B20
Техническое задание.
Считывание температуры от DS18B20 без помощи usart.
Используемое ПО:
STM32CubeMX, Keil mVision.
Работающий проект на выходе — это обязательно
связка Cube+Keil, чтобы можно было добавлять периферию по мере
необходимости.
Контроллер: STM32F4
Таймер - TIM7
Цель:
Работа с датчиками DS18B20, все процедуры должны быть неблокирующими.
К портам PD0 и PD1 подключены 2 DS18B20. Обработчик построен так, что опрашивает единственный датчик
на каждом порту(инициализация с пропуском
ROM: байты-команды 0xcc,0x44 и байты-чтение 0xcc,0xbe через 750мкс.)
Режим работы — 12бит.
В коде объявляются переменные типа uint32_t для температур. Температура лежит в формате
целого числа*10, для исключения дробной
части.
Если CRC неверный, то измерение отбрасывается, выставляется флаг ошибки порта 1-wire.
Автомат (не блокирующий) для работы 1-wire должен располагаться в коде TIM7.
int main(void)
{
HAL_Init();
SystemClock_Config();
init_all_periph();
while(1)
{
{
//Мой код 1
}
{
//Мой код 2
}
{
//Мой код 3
}
}
}
Выполнение кода {//Мой код 1}{//Мой код 2}{//Мой код 3} занимает примерно 29мс, поэтому нельзя использовать основной цикл для
каких-либо действий с шиной 1-wire.
работа с пинами — только через регистры BSRR, как пример:
GPIOD->BSRR &=~(1
GPIOD->BSRR |=(1