Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
_SayHello
574 / 328 / 108
Регистрация: 30.07.2015
Сообщений: 1,188
1

STM32f3discovery+RTC+Battery (тюнингуем)

16.03.2017, 10:08. Просмотров 1188. Ответов 2
Метки нет (Все метки)

Всем добрый день! При переходе от stm32f1 на stm32f3, используя отладочные платы stm32vldiscovery и stm32f3discovery, наткнулся на интересные вещи при работе с часами реального времени. Мб кому-нибудь будет полезно.
Поехали.
Уж не знаю, чем руководствовались производители отладочных плат от ST, но на F3discovery они зажали часовой кварц и обвес к нему, но надо отдать должное посадочные места они сделали и то хорошо. Печально. Заглянул в плату vldiscovery - там все есть, хотя никогда там и не использовал. Сразу возникла мысля, перепаять кварц с конденсаторами с одной платы на другую, кондеры конечно мелкие , но при наличие навыка перепаиваются обычным паяльником. Смотрим схему во вложении 1. SB14 и SB16 закоротил производитель, нам меньше работы. Кварц можно купить планарный в магазине, можно перепаять с vldiscovery(если есть). Я запаял обычный часовой выводной кварц на 32768 Гц на пады 1 и 4, благо они достаточно крупные. Конденсаторы взял с vldiscovery. резисторов R29 и R30 тоже нет, поэтому используем либо припой, либо нулевые резисторы ( у меня их нет ибо размер специфический, на глаз 0402. У меня только 0805)
C кварцем разобрались, едем дальше, еще один косяк - нет вывода под Vbat как на vldiscovery. Проблема. Смотрим вложение 2 и снова вооружаемся паяльником. Vbat запитан от Vdd, а мы хотим чтобы наши часики тикали от батарейки. Спасибо производителю, что оставил хотябы перемычку R34, хоть не дорожки рвать. Выпаиваем. Тут небольшое наблюдение: выпаял R34 соответственно Vbat висит в воздухе, запустил контроллер - работает. Я думал так не бывает и Vbat нужно обязательно подтягивать к питанию. Чудеса.
Дальше делаем небольшую схемку, я вынес отдельно на макетку, пипаяв провода к падам освободившимся от R34, требует аккуратности. Дальше делаем схемку как во вложении 3. D1 нужен для того, чтобы при отключении питания от батарейки не запитался весь контроллер - берем диод шоттки, у него падение напряжения меньше. D2 пусть будет.
Подготовительный этап завершен. Теперь кодить.
Хидер:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef __RTC_H_
#define __RTC_H_
 
#include "stm32f30x_conf.h"
#include "Modbus.h"
 
RTC_DateTypeDef RTC_DateStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_InitTypeDef RTC_InitStructure;
 
void RealTimeCCLK_Init();
void SetTimeFromMB();
void SetDateFromMB();
 
#endif


Source:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "RTC.h"
 
void RealTimeCCLK_Init()
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  PWR_BackupAccessCmd(ENABLE); // разрешаем доступ к Backup регистрам
 
  RCC_LSEConfig(RCC_LSE_ON);
  while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
  RCC_RTCCLKCmd(ENABLE); // Подцепляем внешний кварц к RTC
 
 
  RTC_WaitForSynchro(); // Ждем когда регистры даты и времени синхронизируются с шиной тактирования
  
  //предделители для кварца 32768/((127+1)*(255+1)) = 1 Гц
  RTC_InitStructure.RTC_AsynchPrediv = 127;
  RTC_InitStructure.RTC_SynchPrediv = 255;
  RTC_Init(&RTC_InitStructure);
}
 
//Установка времени 
void SetTimeFromMB()
{
  RTC_TimeStructure.RTC_H12     = RTC_H12_AM;
  RTC_TimeStructure.RTC_Hours   = MB_table.regs[1];;
  RTC_TimeStructure.RTC_Minutes = MB_table.regs[2];;
  RTC_TimeStructure.RTC_Seconds = MB_table.regs[3];;
  RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);
}
 
//Установка даты
void SetDateFromMB()
{
  RTC_DateStructure.RTC_Year = MB_table.regs[4];
  RTC_DateStructure.RTC_Month = MB_table.regs[5];
  RTC_DateStructure.RTC_Date = MB_table.regs[6];
  RTC_DateStructure.RTC_WeekDay = MB_table.regs[7];
  RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure);
}


Где-нибудь в main инициализируем RTC. И выводим куда-нибудь. У меня на OLED, и дублируется в регистры Modbus на ПК раз в секунду.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void vDisplayDateAndTime(void* pvParameters)
{
    portTickType xLastWakenTime;
    xLastWakenTime = xTaskGetTickCount();
    while(1)
    {
        RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
        MB_table.regs[8] = RTC_TimeStructure.RTC_Hours;
        MB_table.regs[9] = RTC_TimeStructure.RTC_Minutes;
        MB_table.regs[10] = RTC_TimeStructure.RTC_Seconds;
        RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
        MB_table.regs[11] = 2000 + RTC_DateStructure.RTC_Year;
        MB_table.regs[12] = RTC_DateStructure.RTC_Month;
        MB_table.regs[13] = RTC_DateStructure.RTC_Date;
        MB_table.regs[14] = RTC_DateStructure.RTC_WeekDay;
        SetCursor(2,0);
        LCDShowCurTime();
        SetCursor(3,0);
        LCDShowCurDate();
        vTaskDelayUntil(&xLastWakenTime, 1000);
    }
}
Дату и время я устанавливаю с компа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void vReadWrite(void *pvParameters)
{
    while(1)
    {
        switch((int)MB_table.regs[0])
        {
        case 1:
            SetTimeFromMB();
            MB_table.regs[0] = 0;
            break;
        case 2:
            SetDateFromMB();
            MB_table.regs[0] = 0;
            break;
        default:
            MB_table.regs[0] = 0;
            break;
        }
        vTaskDelay(50);
    }
}
Все работает и шуршит, оставлял на ночь без питания с утра часики продолжили тикать.
0
Миниатюры
STM32f3discovery+RTC+Battery (тюнингуем)   STM32f3discovery+RTC+Battery (тюнингуем)   STM32f3discovery+RTC+Battery (тюнингуем)  

STM32f3discovery+RTC+Battery (тюнингуем)   STM32f3discovery+RTC+Battery (тюнингуем)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2017, 10:08
Ответы с готовыми решениями:

STM32F3Discovery RTC
Всем доброго времени суток. При использовании отладочной платы STM32F3Dyscovery...

STM32 battery backup ?
Только начал курить STM32 =) Как правильно заюзать резервную батарейку? К...

STM32F3Discovery и CAN
Добрый вечер! Начал бодаться с CAN на STM32F3Dyscovery. Конфиг: ...

stm32f3discovery и HC-06
Переделал программу отсюда http://sxim.net/mc/ms169.php под stm32f3discovery,...

Прошивка stm32f3discovery
Привет всем :D Не получается прошить stm32, работаю в iar последнем, до этого...

2
Radikal_78
42 / 42 / 2
Регистрация: 20.11.2016
Сообщений: 96
25.03.2017, 17:24 2
MB_table что за структура? И где взять этот файл Modbus.h? Он был написан вами?
0
_SayHello
574 / 328 / 108
Регистрация: 30.07.2015
Сообщений: 1,188
25.03.2017, 22:13  [ТС] 3
Radikal_78, это библиотека для протокола модбас если это можно так назвать. Поддерживает функции запись и чтение регистров. Mb_table структура адресного пространства, моя библиотека
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2017, 22:13

STM32F3DISCOVERY + CooCox
Доброго всем времени! Подскажите как эту платку запустить под CooCox. Спасибо.

STM32F3Discovery Vbat
Всем доброго вемени суток. Подскажите, пожалуйста, есть ли на STM32F3Dyscovery...

stm32f3discovery + ir приемник
Доброго времени суток, форумчане!!! В попытках дальнейшего освоения stm...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru