Меню сайта
Календарь
|
STM32L-DISСOVERY.Часы реального времени RTC & touch-sensingПродолжаем наше обучение,следующим шагом станут подключения часов реального времени .Несомненым достоинством STM32 является то, что эта "фича" встроенна в сам контролер.И не надо ,как в случае с AVR,покупать отдельно блок с той же DS1307.К тому-же в часах,кроме календаря, имеется и будильник (который пока мы трогать небудем).Информацию будем выводить на "штатный" LCD STM32L-DISСOVERY.В качестве средства для установки времени будем использовать touch-sensing ( емкостной аналоговый датчик прикосновений в виде полосы, который так же можно использовать как 4 сенсорные кнопки ). Смотрим нужные нам регистры - Плата STM32L-DISСOVERY с обратной стороны имеет место для отсека батареки, но он к сожалению не подпаян, надо паять самому.Есть еще на плате место для подключения внешней батареи,но разъем надо паять ,опять-же самому. Функция инициализации.Для тактирования используем кварц 37кГц .сама функция имеет некоторые отличия от F- серии stm32. void initRTC() { RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* RTC Domain Access function *************************************************/ /* Allow access to the RTC */ PWR_RTCAccessCmd(ENABLE); /* Reset RTC Backup Domain */ RCC_RTCResetCmd(ENABLE); RCC_RTCResetCmd(DISABLE); /* LSE Enable */ RCC_LSEConfig(RCC_LSE_ON); /* Wait until LSE is ready */ while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); /* RTC Clock Source Selection */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); /* Enable the RTC */ RCC_RTCCLKCmd(ENABLE); rtc.RTC_HourFormat = RTC_HourFormat_24; rtc.RTC_SynchPrediv = 0x007F00FF;//предделитель clock RTC_Init(&rtc); } Поначалу писал проект в Em::Blocks 2.20.Применял стандартные библиотеки.Но так и не смог добится - отсутствия засветки соседних сегментов на LCD.Решил попробовать поменять компилятор, на этот раз Кeil uVision V5.11.0.0 .Как говорится все получилось. В качестве базы использовал STM32L_Discovery_Firmware_Pack_V1.0.2.Дописал несколько своих функций. Поскольку стандартная функия convert_into_char (файл discover_functions.с) изначально "заточена" под 5 цифр для вывода на экран LCD,дописана функция под 6 цифр: void convert_into_charS(uint32_t number, uint16_t *p_tab) sunits = (((((number)%100000)%10000)%1000)%100)%10;
Еще две функции Touch_setting_time , Touch_setting_date переделаны с примера отсюда we.easyelectronics.ru .В них обрабатывается настройка времени и даты сенсорными кнопками. Вообще то конечно не самое лутшее решение применять сенсора, кнопки "поярче будут". Но хотелось использовать весь встроенный функционал STM32L .Хочу предупредить сообщество , данный пример чисто учебный .Сенсора реагируюют слабовато.Кроме того нужно нажимать и отпускать сенсор для увеличения цифры. Часы.Здесь все нормально .При збросе сначала высвечиваются показания времени.Далее по кругу при нажатии кнопки "USER BUTTON" показания календря. Следущее нажатие кнопки настройка времени (точки между цифрами внизу) - используются сенсора .Два левых плюс часы,два правых сенсора плюс минуты. И еще нажатие кнопки настройка даты. Можно также установить время и дату можна программно.В программе эти строчки закоментированы.Например настройка времени 23:54:00 и даты 5.10.14 /*Установим время*/ Проект для Кeil uVision V5.11.0.0 - stm32l_discovery_clock_touch_lcd |
Архив записей
Друзья сайта
Статистика
Онлайн всього: 1 Гостей: 1 Користувачів: 0 |