Вівторок, 12.12.2017, 05:24
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Грудень 2017  »
ПнВтСрЧтПтСбНд
    123
45678910
11121314151617
18192021222324
25262728293031

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)
        {
         uint16_t sunits=0, units=0, tens=0, hundreds=0, thousands=0, misc=0;

          sunits = (((((number)%100000)%10000)%1000)%100)%10;
          units = (((((number-sunits)/10)%10000)%1000)%100)%10;
          tens = ((((number-units-sunits)/100)%1000)%100)%10;
          hundreds = (((number-tens-units-sunits)/1000))%100%10;
          thousands = ((number-hundreds-tens-units-sunits)/10000)%10;
          misc = ((number-thousands-hundreds-tens-units-sunits)/100000);


         *(p_tab+5) = sunits + 0x30;
         *(p_tab+4) = units + 0x30;
         *(p_tab+3) = tens + 0x30;
         *(p_tab+2) = hundreds + 0x30;
         *(p_tab+1) = thousands + 0x30;
         *(p_tab) = misc + 0x30;
        }

Еще две функции Touch_setting_time , Touch_setting_date переделаны с примера отсюда we.easyelectronics.ru .В них обрабатывается настройка времени и даты сенсорными кнопками.

Вообще то конечно не самое лутшее решение применять сенсора, кнопки "поярче будут". Но хотелось использовать весь встроенный функционал STM32L .Хочу предупредить сообщество , данный пример чисто учебный .Сенсора реагируюют слабовато.Кроме того нужно нажимать и отпускать сенсор для увеличения цифры.

Часы.Здесь все нормально .При збросе сначала высвечиваются показания времени.Далее по кругу при нажатии кнопки "USER BUTTON" показания календря.

Следущее нажатие кнопки  настройка времени (точки между цифрами внизу) - используются сенсора .Два левых плюс часы,два правых сенсора плюс минуты.

И еще нажатие кнопки настройка даты.

Можно также установить время и дату можна программно.В программе эти строчки закоментированы.Например настройка времени 23:54:00 и даты 5.10.14

    /*Установим время*/
    time.RTC_H12 = RTC_HourFormat_24;
    time.RTC_Hours = 23;
    time.RTC_Minutes = 54;
    time.RTC_Seconds =00;
    /*записать*/
    RTC_SetTime(RTC_Format_BIN, &time);//RTC_SetTime
    
        /*Установим дату*/
    date.RTC_WeekDay = 5;
    date.RTC_Month = 10;
    date.RTC_Date = 10;
    date.RTC_Year = 14;
    /*записать*/
    RTC_SetDate(RTC_Format_BIN, &date);

Проект для Кeil uVision V5.11.0.0 - stm32l_discovery_clock_touch_lcd

Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0