- Лоботрясы

Поиск
Перейти к контенту

Главное меню:

Библиотеки для STM32

Читать в Яндекс.Подписках



     Библиотека часов реального времени DS1307 для микроконтроллеров STM32
Просмотров: 2655
     Данная библиотека для микросхемы часов реального времени (RTC) DS1307 выросла из моего проекта часов с шаговыми двигателями. Может, кто и скажет – зачем городить огород, если в STM32 и так присутствует встроенный блок RTC?! Возможно. Но чем мне нравятся отдельные микросхемы часов, так это автономностью работы – при работе только от батарейки на 3,3 Вольта, производитель гарантирует работу микросхемы в течение 5 лет!!! А при конструировании часов и прочей дребедени это есть немаловажный факт, т.к. пропажа напряжения в наших розетках – событие не такое уж невероятное! К тому же хотелось проверить работу простейшей программной реализации интерфейса I2C на высоких системных частотах тактирования микроконтроллера.
     Кратко о самой микросхеме: 
- RTC считает секунды, минуты, часы, день недели, месяц и год; 
- для связи с микросхемой применяется интерфейс I2C; 
- режим потребления от батареи составляет менее 0,5 мкА; 
- бесперебойная работа от батарейки 3,3 В в случае отсутствия основного питания; 
- диапазон напряжения питания 4,5…5,5 Вольт;  
- наличие 56 байт энергонезависимой памяти.
 
     И её схема подключения:
VCC – напряжение питания 5 Вольт;
OUT/SQW – вывод тактирования прямоугольной частоты;
SCL – вывод синхронизации (тактовый);
SDA – вывод данных;
X1…X2 – подключение «часового» кварца на 32768 Гц;
VBAT – вывод подключения источника на 3,3 Вольт;
GND – «земля», естественно, что же ещё?
 
     О регистрах DS1307, способах записи и чтения в неё всякой лабуды и прочая и прочая можно почитать в даташите:-) А можно и не читать, т.к. работа с ней организована в представленной ниже библиотеке. Т.к. я долгое время работал с AVR-ками и применял в своих проектах стандартную библиотеку на DS1307 от разработчика CodeVisionAVR, то и в библиотеке для STM32 я решил оставить те же самые пользовательские функции – привычка-с! Изменениям подверглись настройка портов и функции для работы с интерфейсом I2C, причём работа последних гарантируется на системных частотах микроконтроллера до 72 МГц.
 
     Основные функции для работы:
 
1. void rtc_init (unsigned char rs, unsigned char sqwe, unsigned char out);
Инициализация - самая первая функция, которая должна быть запущена! Параметр rs задаёт частоту сигнала (меандр!) на выводе SQW/OUT:
- 0 для 1Hz
- 1 для 4096Hz
- 2 для 8192Hz
- 3 для 32768Hz
Для разрешения появления частоты на этом выводе, нужно установить параметр sqwe в «1», а out задаёт уровень логического сигнала на выводе SQW/OUT, который будет на нём присутствовать при отсутствии частоты.
2. void rtc_get_time (unsigned char *hour, unsigned char *min, unsigned char *sec);
Прочитать текущее время.
3. void rtc_set_time (unsigned char hour, unsigned char min, unsigned char sec);
Установить нужное время.
4. void rtc_get_date (unsigned char *date, unsigned char *month, unsigned char *year);
Прочитать текущую дату.
5. void rtc_set_date (unsigned char date, unsigned char month, unsigned char year).
Установить нужную дату.
 
     Библиотека заточена под CooCox и проверена на микроконтроллерах STM32F050F4P6 (он же STM32F031F4P6 – Cortex-M0) м STM32F103C8T6 (Cortex-M3). Для работы библиотеки нужно дополнительно и ОБЯЗАТЕЛЬНО подключить библиотеку GPIO!
 
     Библиотека представлена одним файлом ds1307.h, и предлагает следующие настройки:
#define CORTEX_M            3  //0 для Cortex-M или 3 для Cortex-M3
 
// Назначение портов ds1307
#define I2C_PORT    GPIOA
#if (CORTEX_M == 0)
#define RCC_I2C_PORT       RCC_AHBPeriph_GPIOA // RCC_AHBPeriph_GPIOB, RCC_AHBPeriph_GPIOC...
#elif (CORTEX_M == 3)
#define RCC_I2C_PORT     RCC_APB2Periph_GPIOA //RCC_APB2Periph_GPIOB, RCC_APB2Periph_GPIOC...
#endif
#define SDA            ((unsigned int)1<<12)
#define SCL             ((unsigned int)1<<11)

     Скачать:

Опубликовано 24.09.2015
© Igoryosha, 2015
 
 
Назад к содержимому | Назад к главному меню