Техническое задание.

Считывание температуры от 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

4 года назад
zloykrot
Дмитрий 
44 года
16 лет в сервисе
Был
3 года назад

Заявки фрилансеров

Нет заявок фрилансеров