为您的解决方案解锁精确的计时控制和同步功能,采用高性能实时时钟解决方案。
A
A
硬件概览
它是如何工作的?
RTC 9 Click 基于 STMicroelectronics 的 M41T82,这是一款极低功耗的实时时钟/日历 (RTC) 模块。由于其高度集成,这个模块提供了高时间精度,出厂校准至±5 ppm,即使经过两次回流焊接后,外部组件的数量也非常少。它具有完整的RTC功能,提供可编程计数器、报警和带有可选择事件报告源的中断引擎。操作参数存储在内部用户SRAM存储器中,该存储器由电池供电,因此在完全断电的情况下也能保持其持久性。M41T82 具有内置的32.768 kHz振荡器。
然而,为了达到最佳精度,RTC 9 Click 也配备了一个外部振荡器。寄存器映射中的八个字节用于时钟/日历功能,并以二进制编码十进制 (BCD) 格式配置。额外的17个字节的寄存器映射提供了两个报警的状态/控制、看门狗、8位计数器和方波功能。另有七个字节作为用户SRAM可用。M41T82 支持 I2C 通信接口,这也用于 RTC 9 Click 通过 mikroBUS 插座与主微控制器通信。用户可用的功能包括非易失性、时间钟/日历、两个报警中断、看门狗定时器、可编程8
位计数器和方波输出。八个时钟地址位置包含世纪、年、月、日、星期、小时、分钟、秒以及百分之一秒/千分之一秒,均以24小时BCD格式显示。对28天、29天(闰年)、30天和31天的月份自动进行修正。该 Click board™ 可以在3.3V或5V逻辑电压水平下工作,可通过VCC SEL跳线选择。这样,3.3V和5V的MCU都可以正确使用通信线路。此外,该 Click board™ 配备了一个包含易于使用的功能和示例代码的库,可以用于进一步开发。
功能概述
开发板
Clicker 2 for Kinetis 是一款紧凑型入门开发板,它将 Click 板™的灵活性带给您喜爱的微控制器,使其成为实现您想法的完美入门套件。它配备了一款板载 32 位 ARM Cortex-M4F 微控制器,NXP 半导体公司的 MK64FN1M0VDC12,两个 mikroBUS™ 插槽用于 Click 板™连接,一个 USB 连接器,LED 指示灯,按钮,一个 JTAG 程序员连接器以及两个 26 针头用于与外部电子设备的接口。其紧凑的设计和清晰、易识别的丝网标记让您能够迅速构建具有独特功能和特性
的小工具。Clicker 2 for Kinetis 开发套件的每个部分 都包含了使同一板块运行最高效的必要组件。除了可以选择 Clicker 2 for Kinetis 的编程方式,使用 USB HID mikroBootloader 或外部 mikroProg 连接器进行 Kinetis 编程外,Clicker 2 板还包括一个干净且调节过的开发套件电源供应模块。它提供了两种供电方式;通过 USB Micro-B 电缆,其中板载电压调节器为板上每个组件提供适当的电压水平,或使用锂聚合物 电池通过板载电池连接器供电。所有 mikroBUS™ 本
身支持的通信方法都在这块板上,包括已经建立良好的 mikroBUS™ 插槽、重置按钮和几个用户可配置的按钮及 LED 指示灯。Clicker 2 for Kinetis 是 Mikroe 生态系统的一个组成部分,允许您在几分钟内创建新的应用程序。它由 Mikroe 软件工具原生支持,得益于大量不同的 Click 板™(超过一千块板),其数量每天都在增长,它涵盖了原型制作的许多方面。
微控制器概述
MCU卡片 / MCU
建筑
ARM Cortex-M4
MCU 内存 (KB)
1024
硅供应商
NXP
引脚数
121
RAM (字节)
262144
使用的MCU引脚
mikroBUS™映射器
“仔细看看!”
Click board™ 原理图
一步一步来
项目组装
实时跟踪您的结果
通过调试模式的应用程序输出
1. 一旦代码示例加载完成,按下 "DEBUG" 按钮将启动构建过程,并将其编程到创建的设置上,然后进入调试模式。
2. 编程完成后,IDE 中将出现一个带有各种操作按钮的标题。点击绿色的 "PLAY" 按钮开始读取通过 Click board™ 获得的结果。获得的结果将在 "Application Output" 标签中显示。
软件支持
库描述
该库包含 RTC 9 Click 驱动程序的 API。
关键功能:
rtc9_set_time
- 设置新时间 - 24小时格式rtc9_get_time
- 获取新时间 - 24小时格式rtc9_get_date
- 获取新日期
开源
代码示例
这个示例可以在 NECTO Studio 中找到。欢迎下载代码,或者您也可以复制下面的代码。
/*!
* \file
* \brief Rtc9 Click example
*
* # Description
* This example demonstrates the use of RTC 9 click board.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes the driver, wakes up the module, and sets the time and date.
*
* ## Application Task
* Reads the current time and date and displays the results on the USB UART each second.
*
* \author MikroE Team
*
*/
// ------------------------------------------------------------------- INCLUDES
#include "board.h"
#include "log.h"
#include "rtc9.h"
// ------------------------------------------------------------------ VARIABLES
static rtc9_t rtc9;
static log_t logger;
static uint8_t seconds_old = 0;
// ------------------------------------------------------ APPLICATION FUNCTIONS
void application_init ( void )
{
log_cfg_t log_cfg;
rtc9_cfg_t cfg;
rtc9_set_data_t set_data;
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, "---- Application Init ----" );
// Click initialization.
rtc9_cfg_setup( &cfg );
RTC9_MAP_MIKROBUS( cfg, MIKROBUS_1 );
rtc9_init( &rtc9, &cfg );
Delay_ms( 500 );
rtc9_wakeup( &rtc9 );
rtc9_set_time( &rtc9, 23, 59, 50 );
set_data.day = 22;
set_data.day_of_week = RTC9_DAY_MONDAY;
set_data.month = RTC9_MONTH_MARCH;
set_data.year = 21;
rtc9_set_date ( &rtc9, &set_data );
rtc9_wakeup( &rtc9 );
}
void application_task ( void )
{
rtc9_get_time_t get_time;
rtc9_get_date_t get_date;
char *week_string;
char *month_string;
rtc9_get_time( &rtc9, &get_time );
rtc9_get_date( &rtc9, &get_date );
if ( get_time.sec != seconds_old )
{
seconds_old = get_time.sec;
log_printf( &logger, "- Time [ %.2u:%.2u:%.2u ] \r\n", ( uint16_t ) get_time.hour,
( uint16_t ) get_time.min,
( uint16_t ) get_time.sec );
week_string = rtc9_current_day_of_week( get_date.day_of_week );
month_string = rtc9_current_month( get_date.month );
log_printf( &logger, "- Date [ %s, %s %.2u, %u ] \r\n", week_string, month_string,
( uint16_t ) get_date.day,
( uint16_t ) get_date.year + 2000 );
log_printf( &logger, "---------------------------------------- \r\n" );
}
Delay_ms( 10 );
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END