Compare commits
2
Commits
4f8260accc
...
69f409e893
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69f409e893 | ||
|
|
ea0a67e506 |
No files matched your search
@@ -202,7 +202,7 @@ CONFIG_RT_USING_MTD_NOR=y
|
||||
# CONFIG_RT_USING_PM is not set
|
||||
CONFIG_RT_USING_RTC=y
|
||||
# CONFIG_RT_USING_ALARM is not set
|
||||
# CONFIG_RT_USING_SOFT_RTC is not set
|
||||
CONFIG_RT_USING_SOFT_RTC=y
|
||||
CONFIG_RT_USING_SDIO=y
|
||||
CONFIG_RT_SDIO_STACK_SIZE=512
|
||||
CONFIG_RT_SDIO_THREAD_PRIORITY=15
|
||||
@@ -543,7 +543,7 @@ CONFIG_PKG_USING_LVGL=y
|
||||
CONFIG_PKG_LVGL_PATH="/packages/multimedia/LVGL/LVGL"
|
||||
CONFIG_PKG_LVGL_THREAD_PRIO=20
|
||||
CONFIG_PKG_LVGL_THREAD_STACK_SIZE=4096
|
||||
CONFIG_PKG_LVGL_DISP_REFR_PERIOD=5
|
||||
CONFIG_PKG_LVGL_DISP_REFR_PERIOD=30
|
||||
# CONFIG_PKG_USING_LVGL_SQUARELINE is not set
|
||||
# CONFIG_PKG_LVGL_USING_EXAMPLES is not set
|
||||
CONFIG_PKG_LVGL_USING_DEMOS=y
|
||||
@@ -1064,7 +1064,9 @@ CONFIG_PKG_FT5426_VER="latest"
|
||||
# CONFIG_PKG_USING_AS608 is not set
|
||||
# CONFIG_PKG_USING_RC522 is not set
|
||||
# CONFIG_PKG_USING_WS2812B is not set
|
||||
# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set
|
||||
CONFIG_PKG_USING_EXTERN_RTC_DRIVERS=y
|
||||
# CONFIG_PKG_USING_DS3231 is not set
|
||||
# CONFIG_PKG_USING_RX8900 is not set
|
||||
# CONFIG_PKG_USING_MULTI_RTIMER is not set
|
||||
# CONFIG_PKG_USING_MAX7219 is not set
|
||||
# CONFIG_PKG_USING_BEEP is not set
|
||||
|
||||
@@ -850,7 +850,7 @@
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
<sourceEntries>
|
||||
<entry excluding="drivers/drv_ltdc.c|//cubemx/Drivers|//cubemx/EWARM|//cubemx/Src/stm32h7xx_it.c|//cubemx/Src/system_stm32h7xx.c|//packages/LVGL-v8.3.11/env_support/rt-thread/squareline|//packages/LVGL-v8.3.11/examples|//packages/LVGL-v8.3.11/tests|//packages/ft5426-latest/examples|//packages/littlefs-v2.11.2/runners|//packages/sqlite-v3.19.3/rtthread_io_methods.c|//packages/sqlite-v3.19.3/rtthread_mutex.c|//packages/sqlite-v3.19.3/rtthread_vfs.c|//packages/sqlite-v3.19.3/shell.c|//rt-thread/components/dfs/dfs_v1/filesystems/cromfs|//rt-thread/components/dfs/dfs_v1/filesystems/mqueue|//rt-thread/components/dfs/dfs_v1/filesystems/nfs|//rt-thread/components/dfs/dfs_v1/filesystems/ramfs|//rt-thread/components/dfs/dfs_v1/filesystems/romfs|//rt-thread/components/dfs/dfs_v1/filesystems/skeleton|//rt-thread/components/dfs/dfs_v2|//rt-thread/components/drivers/audio|//rt-thread/components/drivers/can|//rt-thread/components/drivers/clk|//rt-thread/components/drivers/core/dm.c|//rt-thread/components/drivers/core/driver.c|//rt-thread/components/drivers/core/platform.c|//rt-thread/components/drivers/core/platform_ofw.c|//rt-thread/components/drivers/cputime|//rt-thread/components/drivers/fdt|//rt-thread/components/drivers/hwcrypto|//rt-thread/components/drivers/hwtimer|//rt-thread/components/drivers/i2c/i2c_bus.c|//rt-thread/components/drivers/i2c/i2c_dm.c|//rt-thread/components/drivers/i2c/soft_i2c.c|//rt-thread/components/drivers/ktime|//rt-thread/components/drivers/misc|//rt-thread/components/drivers/mtd/mtd_nand.c|//rt-thread/components/drivers/ofw|//rt-thread/components/drivers/phy|//rt-thread/components/drivers/pic|//rt-thread/components/drivers/pin/pin_dm.c|//rt-thread/components/drivers/pin/pin_ofw.c|//rt-thread/components/drivers/pinctrl|//rt-thread/components/drivers/pm|//rt-thread/components/drivers/rtc/alarm.c|//rt-thread/components/drivers/rtc/soft_rtc.c|//rt-thread/components/drivers/sensor|//rt-thread/components/drivers/serial/serial_dm.c|//rt-thread/components/drivers/serial/serial_tty.c|//rt-thread/components/drivers/serial/serial_v2.c|//rt-thread/components/drivers/spi/enc28j60.c|//rt-thread/components/drivers/spi/spi-bit-ops.c|//rt-thread/components/drivers/spi/spi_wifi_rw009.c|//rt-thread/components/drivers/usb|//rt-thread/components/drivers/virtio|//rt-thread/components/drivers/wlan|//rt-thread/components/fal/samples/porting/fal_flash_stm32f2_port.c|//rt-thread/components/legacy|//rt-thread/components/libc/compilers/armlibc|//rt-thread/components/libc/compilers/dlib|//rt-thread/components/libc/compilers/musl|//rt-thread/components/libc/compilers/picolibc|//rt-thread/components/libc/cplusplus|//rt-thread/components/libc/posix|//rt-thread/components/lwp|//rt-thread/components/mm|//rt-thread/components/mprotect|//rt-thread/components/net|//rt-thread/components/utilities|//rt-thread/components/vbus|//rt-thread/libcpu/aarch64|//rt-thread/libcpu/arc|//rt-thread/libcpu/arm/AT91SAM7S|//rt-thread/libcpu/arm/AT91SAM7X|//rt-thread/libcpu/arm/am335x|//rt-thread/libcpu/arm/arm926|//rt-thread/libcpu/arm/armv6|//rt-thread/libcpu/arm/common/atomic_arm.c|//rt-thread/libcpu/arm/common/divsi3.S|//rt-thread/libcpu/arm/cortex-a|//rt-thread/libcpu/arm/cortex-m0|//rt-thread/libcpu/arm/cortex-m23|//rt-thread/libcpu/arm/cortex-m3|//rt-thread/libcpu/arm/cortex-m33|//rt-thread/libcpu/arm/cortex-m4|//rt-thread/libcpu/arm/cortex-m7/context_iar.S|//rt-thread/libcpu/arm/cortex-m7/context_rvds.S|//rt-thread/libcpu/arm/cortex-m7/mpu.c|//rt-thread/libcpu/arm/cortex-m85|//rt-thread/libcpu/arm/cortex-r4|//rt-thread/libcpu/arm/cortex-r52|//rt-thread/libcpu/arm/dm36x|//rt-thread/libcpu/arm/lpc214x|//rt-thread/libcpu/arm/lpc24xx|//rt-thread/libcpu/arm/realview-a8-vmm|//rt-thread/libcpu/arm/s3c24x0|//rt-thread/libcpu/arm/s3c44b0|//rt-thread/libcpu/arm/sep4020|//rt-thread/libcpu/arm/zynqmp-r5|//rt-thread/libcpu/avr32|//rt-thread/libcpu/blackfin|//rt-thread/libcpu/c-sky|//rt-thread/libcpu/ia32|//rt-thread/libcpu/m16c|//rt-thread/libcpu/mips|//rt-thread/libcpu/nios|//rt-thread/libcpu/ppc|//rt-thread/libcpu/risc-v|//rt-thread/libcpu/rx|//rt-thread/libcpu/sim|//rt-thread/libcpu/sparc-v8|//rt-thread/libcpu/ti-dsp|//rt-thread/libcpu/unicore32|//rt-thread/libcpu/v850|//rt-thread/libcpu/xilinx|//rt-thread/src/cpu.c|//rt-thread/src/mem.c|//rt-thread/src/scheduler_mp.c|//rt-thread/src/slab.c|//rt-thread/tools" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="" />
|
||||
<entry excluding="drivers/drv_ltdc.c|//cubemx/Drivers|//cubemx/EWARM|//cubemx/Src/stm32h7xx_it.c|//cubemx/Src/system_stm32h7xx.c|//packages/LVGL-v8.3.11/env_support/rt-thread/squareline|//packages/LVGL-v8.3.11/examples|//packages/LVGL-v8.3.11/tests|//packages/ft5426-latest/examples|//packages/littlefs-v2.11.2/runners|//packages/sqlite-v3.19.3/rtthread_io_methods.c|//packages/sqlite-v3.19.3/rtthread_mutex.c|//packages/sqlite-v3.19.3/rtthread_vfs.c|//packages/sqlite-v3.19.3/shell.c|//rt-thread/components/dfs/dfs_v1/filesystems/cromfs|//rt-thread/components/dfs/dfs_v1/filesystems/mqueue|//rt-thread/components/dfs/dfs_v1/filesystems/nfs|//rt-thread/components/dfs/dfs_v1/filesystems/ramfs|//rt-thread/components/dfs/dfs_v1/filesystems/romfs|//rt-thread/components/dfs/dfs_v1/filesystems/skeleton|//rt-thread/components/dfs/dfs_v2|//rt-thread/components/drivers/audio|//rt-thread/components/drivers/can|//rt-thread/components/drivers/clk|//rt-thread/components/drivers/core/dm.c|//rt-thread/components/drivers/core/driver.c|//rt-thread/components/drivers/core/platform.c|//rt-thread/components/drivers/core/platform_ofw.c|//rt-thread/components/drivers/cputime|//rt-thread/components/drivers/fdt|//rt-thread/components/drivers/hwcrypto|//rt-thread/components/drivers/hwtimer|//rt-thread/components/drivers/i2c/i2c_bus.c|//rt-thread/components/drivers/i2c/i2c_dm.c|//rt-thread/components/drivers/i2c/soft_i2c.c|//rt-thread/components/drivers/ktime|//rt-thread/components/drivers/misc|//rt-thread/components/drivers/mtd/mtd_nand.c|//rt-thread/components/drivers/ofw|//rt-thread/components/drivers/phy|//rt-thread/components/drivers/pic|//rt-thread/components/drivers/pin/pin_dm.c|//rt-thread/components/drivers/pin/pin_ofw.c|//rt-thread/components/drivers/pinctrl|//rt-thread/components/drivers/pm|//rt-thread/components/drivers/rtc/alarm.c|//rt-thread/components/drivers/sensor|//rt-thread/components/drivers/serial/serial_dm.c|//rt-thread/components/drivers/serial/serial_tty.c|//rt-thread/components/drivers/serial/serial_v2.c|//rt-thread/components/drivers/spi/enc28j60.c|//rt-thread/components/drivers/spi/spi-bit-ops.c|//rt-thread/components/drivers/spi/spi_wifi_rw009.c|//rt-thread/components/drivers/usb|//rt-thread/components/drivers/virtio|//rt-thread/components/drivers/wlan|//rt-thread/components/fal/samples/porting/fal_flash_stm32f2_port.c|//rt-thread/components/legacy|//rt-thread/components/libc/compilers/armlibc|//rt-thread/components/libc/compilers/dlib|//rt-thread/components/libc/compilers/musl|//rt-thread/components/libc/compilers/picolibc|//rt-thread/components/libc/cplusplus|//rt-thread/components/libc/posix|//rt-thread/components/lwp|//rt-thread/components/mm|//rt-thread/components/mprotect|//rt-thread/components/net|//rt-thread/components/utilities|//rt-thread/components/vbus|//rt-thread/libcpu/aarch64|//rt-thread/libcpu/arc|//rt-thread/libcpu/arm/AT91SAM7S|//rt-thread/libcpu/arm/AT91SAM7X|//rt-thread/libcpu/arm/am335x|//rt-thread/libcpu/arm/arm926|//rt-thread/libcpu/arm/armv6|//rt-thread/libcpu/arm/common/atomic_arm.c|//rt-thread/libcpu/arm/common/divsi3.S|//rt-thread/libcpu/arm/cortex-a|//rt-thread/libcpu/arm/cortex-m0|//rt-thread/libcpu/arm/cortex-m23|//rt-thread/libcpu/arm/cortex-m3|//rt-thread/libcpu/arm/cortex-m33|//rt-thread/libcpu/arm/cortex-m4|//rt-thread/libcpu/arm/cortex-m7/context_iar.S|//rt-thread/libcpu/arm/cortex-m7/context_rvds.S|//rt-thread/libcpu/arm/cortex-m7/mpu.c|//rt-thread/libcpu/arm/cortex-m85|//rt-thread/libcpu/arm/cortex-r4|//rt-thread/libcpu/arm/cortex-r52|//rt-thread/libcpu/arm/dm36x|//rt-thread/libcpu/arm/lpc214x|//rt-thread/libcpu/arm/lpc24xx|//rt-thread/libcpu/arm/realview-a8-vmm|//rt-thread/libcpu/arm/s3c24x0|//rt-thread/libcpu/arm/s3c44b0|//rt-thread/libcpu/arm/sep4020|//rt-thread/libcpu/arm/zynqmp-r5|//rt-thread/libcpu/avr32|//rt-thread/libcpu/blackfin|//rt-thread/libcpu/c-sky|//rt-thread/libcpu/ia32|//rt-thread/libcpu/m16c|//rt-thread/libcpu/mips|//rt-thread/libcpu/nios|//rt-thread/libcpu/ppc|//rt-thread/libcpu/risc-v|//rt-thread/libcpu/rx|//rt-thread/libcpu/sim|//rt-thread/libcpu/sparc-v8|//rt-thread/libcpu/ti-dsp|//rt-thread/libcpu/unicore32|//rt-thread/libcpu/v850|//rt-thread/libcpu/xilinx|//rt-thread/src/cpu.c|//rt-thread/src/mem.c|//rt-thread/src/scheduler_mp.c|//rt-thread/src/slab.c|//rt-thread/tools" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="" />
|
||||
</sourceEntries>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
@@ -870,7 +870,7 @@
|
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders" />
|
||||
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||
<configuration configurationName="Debug">
|
||||
<resource resourceType="PROJECT" workspacePath="/828F" />
|
||||
<resource resourceType="PROJECT" workspacePath="/project" />
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets" />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>828F</name>
|
||||
<name>project</name>
|
||||
<comment />
|
||||
<projects>
|
||||
</projects>
|
||||
|
||||
@@ -20,56 +20,7 @@
|
||||
#define LCD_BL_PIN GET_PIN(D,12)
|
||||
#define LCD_RST_PIN GET_PIN(D,11)
|
||||
|
||||
static void btn_led_on_evt_handler(lv_event_t *e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
|
||||
if (code == LV_EVENT_CLICKED)
|
||||
{
|
||||
rt_kprintf("LED ON\n");
|
||||
//led_on();
|
||||
}
|
||||
}
|
||||
|
||||
static void btn_led_off_evt_handler(lv_event_t *e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
|
||||
if (code == LV_EVENT_CLICKED)
|
||||
{
|
||||
rt_kprintf("LED OFF\n");
|
||||
// led_off();
|
||||
}
|
||||
}
|
||||
|
||||
void lv_user_gui_init(void)
|
||||
{
|
||||
lv_demo_widgets();
|
||||
/* lv_obj_t *scr = lv_scr_act();
|
||||
|
||||
// 创建“按钮” —— 实际是一个可点击的普通对象
|
||||
lv_obj_t *btn_on = lv_obj_create(scr);
|
||||
lv_obj_set_size(btn_on, 100, 50);
|
||||
lv_obj_align(btn_on, LV_ALIGN_CENTER, -60, 0);
|
||||
lv_obj_add_flag(btn_on, LV_OBJ_FLAG_CLICKABLE); // 启用点击
|
||||
lv_obj_clear_flag(btn_on, LV_OBJ_FLAG_SCROLLABLE);
|
||||
|
||||
lv_obj_t *label_on = lv_label_create(btn_on);
|
||||
lv_label_set_text(label_on, "LED ON");
|
||||
lv_obj_center(label_on);
|
||||
|
||||
lv_obj_add_event_cb(btn_on, btn_led_on_evt_handler, LV_EVENT_CLICKED, NULL);
|
||||
|
||||
// 第二个按钮
|
||||
lv_obj_t *btn_off = lv_obj_create(scr);
|
||||
lv_obj_set_size(btn_off, 100, 50);
|
||||
lv_obj_align(btn_off, LV_ALIGN_CENTER, 60, 0);
|
||||
lv_obj_add_flag(btn_off, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_clear_flag(btn_off, LV_OBJ_FLAG_SCROLLABLE);
|
||||
|
||||
lv_obj_t *label_off = lv_label_create(btn_off);
|
||||
lv_label_set_text(label_off, "LED OFF");
|
||||
lv_obj_center(label_off);
|
||||
|
||||
lv_obj_add_event_cb(btn_off, btn_led_off_evt_handler, LV_EVENT_CLICKED, NULL);*/
|
||||
}
|
||||
+4
-4
@@ -133,11 +133,11 @@ extern "C"
|
||||
#endif
|
||||
|
||||
/*#define BSP_USING_I2C2*/
|
||||
//#define BSP_USING_I2C2
|
||||
#define BSP_USING_I2C2
|
||||
|
||||
#ifdef BSP_USING_I2C2
|
||||
#define BSP_I2C2_SCL_PIN GET_PIN(port, pin)
|
||||
#define BSP_I2C2_SDA_PIN GET_PIN(port, pin)
|
||||
#define BSP_I2C2_SCL_PIN GET_PIN(B, 7)
|
||||
#define BSP_I2C2_SDA_PIN GET_PIN(B, 8)
|
||||
#endif
|
||||
|
||||
/*-------------------------- I2C CONFIG END --------------------------*/
|
||||
@@ -286,7 +286,7 @@ extern "C"
|
||||
*
|
||||
*/
|
||||
/*#define BSP_USING_ONCHIP_RTC*/
|
||||
#define BSP_USING_ONCHIP_RTC
|
||||
//#define BSP_USING_ONCHIP_RTC
|
||||
|
||||
/*-------------------------- RTC CONFIG END --------------------------*/
|
||||
|
||||
|
||||
@@ -0,0 +1,362 @@
|
||||
/**
|
||||
* @file drv_rtc_ds1307.c
|
||||
* @brief DS1307 RTC driver for RT-Thread
|
||||
* @author jiache (wanghuan3037@fiberhome.com)
|
||||
* @version 1.1
|
||||
* @date 2025-12-13
|
||||
*
|
||||
* Notes:
|
||||
* - DS1307 requires 5V for reliable operation (not just 3.3V or backup battery).
|
||||
* - Ensure I2C pull-up resistors are present.
|
||||
*
|
||||
* Kconfig usage (add to board/Kconfig):
|
||||
* config BRD_RTC_DS1307
|
||||
* bool "Enable rtc ds1307"
|
||||
* default n
|
||||
* if BRD_RTC_DS1307
|
||||
* config DS1307_IIC_BUS
|
||||
* string "Select I2C bus"
|
||||
* default "i2c2"
|
||||
* config BRD_RTC_DS1307_DEBUG
|
||||
* bool "Enable DS1307 debug log"
|
||||
* default n
|
||||
* endif
|
||||
*/
|
||||
|
||||
#include "board.h"
|
||||
#include <rtdevice.h>
|
||||
#include <rtthread.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
|
||||
#define DBG_TAG "DS1307"
|
||||
#ifdef BRD_RTC_DS1307_DEBUG
|
||||
#define DBG_LVL DBG_LOG
|
||||
#else
|
||||
#define DBG_LVL DBG_INFO
|
||||
#endif
|
||||
#include <rtdbg.h>
|
||||
|
||||
/* DS1307 I2C 7-bit address */
|
||||
#define DS1307_ADDR 0x68
|
||||
|
||||
/* Driver structure */
|
||||
typedef struct drv_rtc_ds1307
|
||||
{
|
||||
struct rt_i2c_bus_device *i2c_bus;
|
||||
char *iic_name;
|
||||
struct tm datetime;
|
||||
struct timeval tick;
|
||||
rt_thread_t thd_soft_update_sec;
|
||||
} drv_rtc_ds1307_t;
|
||||
|
||||
/* Default I2C bus name from Kconfig or hardcoded */
|
||||
#ifndef DS1307_IIC_BUS
|
||||
#define DS1307_IIC_BUS "i2c2"
|
||||
#endif
|
||||
|
||||
static drv_rtc_ds1307_t ds1307 = {
|
||||
.iic_name = DS1307_IIC_BUS,
|
||||
};
|
||||
|
||||
/* Write multiple registers starting at reg */
|
||||
static rt_err_t write_reg(struct rt_i2c_bus_device *bus, rt_uint8_t reg, const rt_uint8_t *data, rt_size_t len)
|
||||
{
|
||||
rt_uint8_t buf[16];
|
||||
if (len + 1 > sizeof(buf)) return -RT_EINVAL;
|
||||
|
||||
buf[0] = reg;
|
||||
rt_memcpy(&buf[1], data, len);
|
||||
|
||||
struct rt_i2c_msg msg;
|
||||
msg.addr = DS1307_ADDR;
|
||||
msg.flags = RT_I2C_WR;
|
||||
msg.buf = buf;
|
||||
msg.len = len + 1;
|
||||
|
||||
return (rt_i2c_transfer(bus, &msg, 1) == 1) ? RT_EOK : -RT_ERROR;
|
||||
}
|
||||
|
||||
/* Read multiple registers starting at reg */
|
||||
static rt_err_t read_regs(struct rt_i2c_bus_device *bus, rt_uint8_t reg, rt_uint8_t len, rt_uint8_t *buf)
|
||||
{
|
||||
struct rt_i2c_msg msgs[2];
|
||||
msgs[0].addr = DS1307_ADDR;
|
||||
msgs[0].flags = RT_I2C_WR;
|
||||
msgs[0].buf = ®
|
||||
msgs[0].len = 1;
|
||||
|
||||
msgs[1].addr = DS1307_ADDR;
|
||||
msgs[1].flags = RT_I2C_RD;
|
||||
msgs[1].buf = buf;
|
||||
msgs[1].len = len;
|
||||
|
||||
return (rt_i2c_transfer(bus, msgs, 2) == 2) ? RT_EOK : -RT_ERROR;
|
||||
}
|
||||
|
||||
/* Read current time from DS1307 */
|
||||
static void ds1307_read_time(void)
|
||||
{
|
||||
uint8_t buff[7];
|
||||
RT_ASSERT(ds1307.i2c_bus);
|
||||
|
||||
if (read_regs(ds1307.i2c_bus, 0x00, 7, buff) != RT_EOK)
|
||||
{
|
||||
LOG_E("Failed to read DS1307 registers");
|
||||
return;
|
||||
}
|
||||
|
||||
// BCD to decimal
|
||||
ds1307.datetime.tm_sec = (buff[0] & 0x7F); // mask CH bit
|
||||
ds1307.datetime.tm_sec = (ds1307.datetime.tm_sec >> 4) * 10 + (ds1307.datetime.tm_sec & 0x0F);
|
||||
|
||||
ds1307.datetime.tm_min = (buff[1] >> 4) * 10 + (buff[1] & 0x0F);
|
||||
ds1307.datetime.tm_hour = (buff[2] >> 4) * 10 + (buff[2] & 0x0F);
|
||||
ds1307.datetime.tm_wday = (buff[3] & 0x07) - 1; // DS1307: 1=Sun → tm_wday: 0=Sun
|
||||
ds1307.datetime.tm_mday = (buff[4] >> 4) * 10 + (buff[4] & 0x0F);
|
||||
ds1307.datetime.tm_mon = (buff[5] >> 4) * 10 + (buff[5] & 0x0F) - 1; // 0-based
|
||||
ds1307.datetime.tm_year = (buff[6] >> 4) * 10 + (buff[6] & 0x0F) + 100; // years since 1900
|
||||
|
||||
// Optional: update tick if libc is available
|
||||
#ifdef RT_USING_LIBC
|
||||
ds1307.tick.tv_sec = mktime(&ds1307.datetime);
|
||||
ds1307.tick.tv_usec = 0;
|
||||
#endif
|
||||
|
||||
LOG_I("RTC: %d-%02d-%02d %02d:%02d:%02d",
|
||||
ds1307.datetime.tm_year + 1900,
|
||||
ds1307.datetime.tm_mon + 1,
|
||||
ds1307.datetime.tm_mday,
|
||||
ds1307.datetime.tm_hour,
|
||||
ds1307.datetime.tm_min,
|
||||
ds1307.datetime.tm_sec);
|
||||
|
||||
/* 设置日期为年月号 */
|
||||
set_date(ds1307.datetime.tm_year + 1900, ds1307.datetime.tm_mon + 1, ds1307.datetime.tm_mday);
|
||||
/* 设置时间为点分秒 */
|
||||
set_time(ds1307.datetime.tm_hour, ds1307.datetime.tm_min, ds1307.datetime.tm_sec);
|
||||
/* 获取时间 */
|
||||
time_t now = time(RT_NULL);
|
||||
/* 打印输出时间信息 */
|
||||
rt_kprintf("DATE: %s", ctime(&now));
|
||||
}
|
||||
|
||||
/* Software thread to maintain local time estimation */
|
||||
static void auto_update_current_datatime(void *parameter)
|
||||
{
|
||||
uint32_t count = 0;
|
||||
while (1)
|
||||
{
|
||||
rt_thread_delay(RT_TICK_PER_SECOND);
|
||||
ds1307.datetime.tm_sec++;
|
||||
if (ds1307.datetime.tm_sec >= 60)
|
||||
{
|
||||
ds1307.datetime.tm_sec = 0;
|
||||
ds1307.datetime.tm_min++;
|
||||
if (ds1307.datetime.tm_min >= 60)
|
||||
{
|
||||
ds1307.datetime.tm_min = 0;
|
||||
ds1307.datetime.tm_hour++;
|
||||
if (ds1307.datetime.tm_hour >= 24)
|
||||
{
|
||||
ds1307.datetime.tm_hour = 0;
|
||||
// Note: day/month/year rollover not handled in soft update
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sync with hardware every 10 minutes
|
||||
if (++count >= 600) // 600 seconds
|
||||
{
|
||||
ds1307_read_time();
|
||||
count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Directly write struct tm to DS1307 (no time_t dependency) */
|
||||
static rt_err_t ds1307_write_tm(struct tm *tm)
|
||||
{
|
||||
uint8_t buff[7];
|
||||
|
||||
// Seconds (bit7 = CH must be 0 to enable oscillator)
|
||||
buff[0] = ((tm->tm_sec / 10) << 4) | (tm->tm_sec % 10);
|
||||
|
||||
// Minutes
|
||||
buff[1] = ((tm->tm_min / 10) << 4) | (tm->tm_min % 10);
|
||||
|
||||
// Hours (24-hour mode, bit6=0)
|
||||
buff[2] = ((tm->tm_hour / 10) << 4) | (tm->tm_hour % 10);
|
||||
|
||||
// Day of week: DS1307 uses 1=Sun, 2=Mon ... 7=Sat
|
||||
// tm_wday: 0=Sun, 1=Mon ... 6=Sat → so +1
|
||||
buff[3] = tm->tm_wday + 1;
|
||||
|
||||
// Date
|
||||
buff[4] = ((tm->tm_mday / 10) << 4) | (tm->tm_mday % 10);
|
||||
|
||||
// Month
|
||||
int month = tm->tm_mon + 1; // convert to 1-based
|
||||
buff[5] = ((month / 10) << 4) | (month % 10);
|
||||
|
||||
// Year (last two digits only)
|
||||
int year = tm->tm_year + 1900; // full year
|
||||
buff[6] = (((year % 100) / 10) << 4) | (year % 10);
|
||||
|
||||
rt_err_t err = write_reg(ds1307.i2c_bus, 0x00, buff, 7);
|
||||
if (err == RT_EOK)
|
||||
{
|
||||
ds1307.datetime = *tm;
|
||||
#ifdef RT_USING_LIBC
|
||||
ds1307.tick.tv_sec = mktime(tm);
|
||||
ds1307.tick.tv_usec = 0;
|
||||
#endif
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
/* RTC ops */
|
||||
static rt_err_t ds1307_rtc_init(void)
|
||||
{
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t ds1307_rtc_get_secs(time_t *sec)
|
||||
{
|
||||
ds1307_read_time();
|
||||
#ifdef RT_USING_LIBC
|
||||
*sec = ds1307.tick.tv_sec;
|
||||
#else
|
||||
*sec = 0; // fallback
|
||||
#endif
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t ds1307_rtc_set_secs(time_t *sec)
|
||||
{
|
||||
#ifdef RT_USING_LIBC
|
||||
struct tm tm_time;
|
||||
localtime_r(sec, &tm_time);
|
||||
return ds1307_write_tm(&tm_time);
|
||||
#else
|
||||
LOG_E("Set by timestamp requires RT_USING_LIBC");
|
||||
return -RT_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
static rt_err_t ds1307_rtc_get_timeval(struct timeval *tv)
|
||||
{
|
||||
ds1307_read_time();
|
||||
*tv = ds1307.tick;
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t ds1307_rtc_set_timeval(struct timeval *tv)
|
||||
{
|
||||
#ifdef RT_USING_LIBC
|
||||
struct tm tm_time;
|
||||
localtime_r(&tv->tv_sec, &tm_time);
|
||||
return ds1307_write_tm(&tm_time);
|
||||
#else
|
||||
LOG_E("Set by timeval requires RT_USING_LIBC");
|
||||
return -RT_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
static const struct rt_rtc_ops ds1307_rtc_ops =
|
||||
{
|
||||
ds1307_rtc_init,
|
||||
ds1307_rtc_get_secs,
|
||||
ds1307_rtc_set_secs,
|
||||
RT_NULL,
|
||||
RT_NULL,
|
||||
ds1307_rtc_get_timeval,
|
||||
ds1307_rtc_set_timeval,
|
||||
};
|
||||
|
||||
static rt_rtc_dev_t ds1307_rtc_dev;
|
||||
|
||||
/* Initialization and registration */
|
||||
static int rt_hw_ds1307_rtc_init(void)
|
||||
{
|
||||
ds1307.i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(ds1307.iic_name);
|
||||
if (!ds1307.i2c_bus)
|
||||
{
|
||||
LOG_E("I2C bus '%s' not found", ds1307.iic_name);
|
||||
return -RT_ERROR;
|
||||
}
|
||||
|
||||
ds1307_read_time();
|
||||
|
||||
ds1307.thd_soft_update_sec = rt_thread_create("ds1307",
|
||||
auto_update_current_datatime,
|
||||
RT_NULL,
|
||||
512, 10, 5);
|
||||
if (ds1307.thd_soft_update_sec)
|
||||
{
|
||||
rt_thread_startup(ds1307.thd_soft_update_sec);
|
||||
}
|
||||
|
||||
rt_err_t result = rt_hw_rtc_register(&ds1307_rtc_dev, "ds1307", RT_DEVICE_FLAG_RDWR, &ds1307);
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
LOG_E("RTC register failed: %d", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
LOG_I("DS1307 RTC initialized successfully on %s", ds1307.iic_name);
|
||||
return RT_EOK;
|
||||
}
|
||||
INIT_COMPONENT_EXPORT(rt_hw_ds1307_rtc_init);
|
||||
|
||||
/* MSH Commands */
|
||||
#include <stdlib.h>
|
||||
|
||||
int date_drv_set(int argc, char *argv[])
|
||||
{
|
||||
if (argc != 7)
|
||||
{
|
||||
rt_kprintf("Usage: ds1307_set_time YYYY MM DD HH MM SS\n");
|
||||
rt_kprintf("Example: ds1307_set_time 2025 12 25 10 30 00\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct tm tm_time = {0};
|
||||
tm_time.tm_year = atoi(argv[1]) - 1900;
|
||||
tm_time.tm_mon = atoi(argv[2]) - 1;
|
||||
tm_time.tm_mday = atoi(argv[3]);
|
||||
tm_time.tm_hour = atoi(argv[4]);
|
||||
tm_time.tm_min = atoi(argv[5]);
|
||||
tm_time.tm_sec = atoi(argv[6]);
|
||||
|
||||
// Basic validation
|
||||
if (tm_time.tm_year < 100 || tm_time.tm_year > 200 ||
|
||||
tm_time.tm_mon < 0 || tm_time.tm_mon > 11 ||
|
||||
tm_time.tm_mday < 1 || tm_time.tm_mday > 31 ||
|
||||
tm_time.tm_hour < 0 || tm_time.tm_hour > 23 ||
|
||||
tm_time.tm_min < 0 || tm_time.tm_min > 59 ||
|
||||
tm_time.tm_sec < 0 || tm_time.tm_sec > 59)
|
||||
{
|
||||
rt_kprintf("Error: Invalid date/time range!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rt_err_t err = ds1307_write_tm(&tm_time);
|
||||
if (err != RT_EOK)
|
||||
{
|
||||
rt_kprintf("Error: Failed to write DS1307!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rt_kprintf("Success: DS1307 time set.\n");
|
||||
return 0;
|
||||
}
|
||||
MSH_CMD_EXPORT(date_drv_set, Set DS1307 RTC time: YYYY MM DD HH MM SS);
|
||||
|
||||
void date_drv(void)
|
||||
{
|
||||
ds1307_read_time();
|
||||
}
|
||||
MSH_CMD_EXPORT(date_drv, Read DS1307 RTC time);
|
||||
|
||||
/* BRD_RTC_DS1307 */
|
||||
@@ -160,7 +160,7 @@ static const struct rt_i2c_bit_ops stm32_bit_ops_default =
|
||||
.get_sda = stm32_get_sda,
|
||||
.get_scl = stm32_get_scl,
|
||||
.udelay = stm32_udelay,
|
||||
.delay_us = 1,
|
||||
.delay_us = 5,
|
||||
.timeout = 100
|
||||
};
|
||||
|
||||
|
||||
+3
-3
@@ -456,9 +456,9 @@ int ltdc_init(void)
|
||||
else if (lcdid == 0X7016)
|
||||
{
|
||||
lcdltdc.pwidth = 1024; lcdltdc.pheight = 600;
|
||||
lcdltdc.hsw = 70; lcdltdc.hbp = 160; lcdltdc.hfp = 160;
|
||||
lcdltdc.vsw = 10; lcdltdc.vbp = 23; lcdltdc.vfp = 12;
|
||||
ltdc_clk_set(128, 32, 5);
|
||||
lcdltdc.hsw = 20; lcdltdc.hbp = 160; lcdltdc.hfp = 160;
|
||||
lcdltdc.vsw = 3; lcdltdc.vbp = 23; lcdltdc.vfp = 12;
|
||||
ltdc_clk_set(128, 40, 5);
|
||||
}
|
||||
else if (lcdid == 0X7018)
|
||||
{
|
||||
|
||||
+3
-1
@@ -131,6 +131,7 @@
|
||||
#define RT_USING_I2C_BITOPS
|
||||
#define RT_USING_MTD_NOR
|
||||
#define RT_USING_RTC
|
||||
#define RT_USING_SOFT_RTC
|
||||
#define RT_USING_SDIO
|
||||
#define RT_SDIO_STACK_SIZE 512
|
||||
#define RT_SDIO_THREAD_PRIORITY 15
|
||||
@@ -260,7 +261,7 @@
|
||||
#define PKG_USING_LVGL
|
||||
#define PKG_LVGL_THREAD_PRIO 20
|
||||
#define PKG_LVGL_THREAD_STACK_SIZE 4096
|
||||
#define PKG_LVGL_DISP_REFR_PERIOD 5
|
||||
#define PKG_LVGL_DISP_REFR_PERIOD 30
|
||||
#define PKG_LVGL_USING_DEMOS
|
||||
#define PKG_LVGL_USING_V080311
|
||||
#define PKG_LVGL_VER_NUM 0x080311
|
||||
@@ -362,6 +363,7 @@
|
||||
#define PKG_USING_FT5426
|
||||
#define PKG_USING_FT5426_LATEST_VERSION
|
||||
/* end of touch drivers */
|
||||
#define PKG_USING_EXTERN_RTC_DRIVERS
|
||||
#define PKG_USING_RS485
|
||||
#define RS485_USING_DEV
|
||||
#define RS485_SW_DLY_US 0
|
||||
|
||||
Reference in new issue
Block a user