Skip to content

Commit

Permalink
[examples] Add RTC example on NUCLEO-G071RB/G474RE
Browse files Browse the repository at this point in the history
  • Loading branch information
salkinium committed Dec 23, 2024
1 parent f7851a7 commit 6e210da
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 2 deletions.
39 changes: 39 additions & 0 deletions examples/nucleo_g071rb/rtc/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// coding: utf-8
/*
* Copyright (c) 2023, Rasmus Kleist Hørlyck Sørensen
* Copyright (c) 2024, Niklas Hauser
*
* This file is part of the modm project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
// ----------------------------------------------------------------------------

#include <modm/board.hpp>

int
main()
{
Board::initialize();
MODM_LOG_INFO << "Initialize RTC" << modm::endl;
Rtc::initialize<Board::SystemClock>();

constexpr auto cdt = modm::DateTime::fromBuildTime();
MODM_LOG_INFO << "__TIMESTAMP__: " << __TIMESTAMP__ << modm::endl;
MODM_LOG_INFO << "Compile DateTime: " << cdt << modm::endl;
// MODM_LOG_INFO << "Compile Weekday: " << cdt.weekday().c_encoding() << modm::endl;

Rtc::setDateTime(cdt);

while (true)
{
const auto& dt = Rtc::dateTime();
MODM_LOG_INFO << dt << modm::endl;
// MODM_LOG_INFO << "Weekday: " << dt.weekday().c_encoding() << modm::endl;
modm::delay(1s);
}

return 0;
}
10 changes: 10 additions & 0 deletions examples/nucleo_g071rb/rtc/project.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<library>
<extends>modm:nucleo-g071rb</extends>
<options>
<option name="modm:build:build.path">../../../build/nucleo_g071rb/rtc</option>
</options>
<modules>
<module>modm:platform:rtc</module>
<module>modm:build:scons</module>
</modules>
</library>
32 changes: 32 additions & 0 deletions examples/nucleo_g474re/rtc/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// coding: utf-8
/*
* Copyright (c) 2023, Rasmus Kleist Hørlyck Sørensen
*
* This file is part of the modm project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
// ----------------------------------------------------------------------------

#include <modm/board.hpp>

int
main()
{
Board::initialize();
Rtc::initialize<Board::SystemClock>();

while (true)
{
const auto& dt = Rtc::read();
MODM_LOG_INFO << "Date: " << unsigned(dt.day()) << "-" << unsigned(dt.month()) << "-" << int(dt.year()) << modm::endl;
MODM_LOG_INFO << "Weekday: " << dt.weekday().c_encoding() << modm::endl;
MODM_LOG_INFO << "Time: " << dt.hour().count() << ":" << dt.minute().count() << ":" << dt.second().count() << modm::endl;
MODM_LOG_INFO << "Sub Second: " << dt.millisecond().count() << modm::endl;
modm::delay(1s);
}

return 0;
}
12 changes: 12 additions & 0 deletions examples/nucleo_g474re/rtc/project.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<library>
<extends>modm:nucleo-g474re</extends>
<options>
<option name="modm:build:build.path">../../../build/nucleo_g474re/rtc</option>
</options>
<modules>
<module>modm:debug</module>
<module>modm:platform:rtc</module>
<module>modm:processing:timer</module>
<module>modm:build:scons</module>
</modules>
</library>
6 changes: 5 additions & 1 deletion src/modm/board/nucleo_g071rb/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,20 @@ struct SystemClock
static constexpr uint32_t Spi2 = Apb;
static constexpr uint32_t Iwdg = Rcc::LsiFrequency;
static constexpr uint32_t Wwdg = Apb;
static constexpr uint32_t Rtc = Apb;
static constexpr uint32_t Timer14 = Apb;
static constexpr uint32_t Timer7 = Apb;
static constexpr uint32_t Timer6 = Apb;
static constexpr uint32_t Timer3 = Apb;
static constexpr uint32_t Timer2 = Apb;

static constexpr uint32_t Rtc = 32.768_kHz;

static bool inline
enable()
{
Rcc::enableLowSpeedExternalCrystal();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::LowSpeedExternalCrystal);

Rcc::enableInternalClock(); // 16MHz
// (internal clock / 1_M) * 8_N / 2_R = 128MHz / 2 = 64MHz
const Rcc::PllFactors pllFactors{
Expand Down
6 changes: 5 additions & 1 deletion src/modm/board/nucleo_g474re/board.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ struct SystemClock
static constexpr uint32_t I2c4 = I2c;
static constexpr uint32_t Lptim = Apb1;
static constexpr uint32_t Lpuart = Apb1;
static constexpr uint32_t Rtc = Apb1;
static constexpr uint32_t Spi2 = Apb1;
static constexpr uint32_t Spi3 = Apb1;
static constexpr uint32_t Uart4 = Apb1;
Expand Down Expand Up @@ -94,6 +93,8 @@ struct SystemClock
static constexpr uint32_t Timer20 = Apb2Timer;
static constexpr uint32_t Iwdg = Rcc::LsiFrequency;

static constexpr uint32_t Rtc = 32.768_kHz;

static bool inline
enable()
{
Expand All @@ -115,6 +116,9 @@ struct SystemClock
// update frequencies for busy-wait delay functions
Rcc::updateCoreFrequency<Frequency>();

Rcc::enableLowSpeedExternalCrystal();
Rcc::enableRealTimeClock(Rcc::RealTimeClockSource::LowSpeedExternalCrystal);

Rcc::setCanClockSource(Rcc::CanClockSource::Pclk);
return true;
}
Expand Down

0 comments on commit 6e210da

Please sign in to comment.