Compare commits

...

36 Commits
main ... S

Author SHA1 Message Date
james 4bb161b8df git 撤回 2024-08-06 01:19:50 +08:00
james 7c71bb5be2 增加换页,取消font分区 2024-08-05 19:36:23 +08:00
james 48ce5126c8 把概率改到50% 2024-08-05 11:29:09 +08:00
james 5db946f9db 可以上传阿里云,概率随机动 2024-08-05 11:24:14 +08:00
james 65e7298351 len=max还是容易出错,算了 2024-08-05 10:41:46 +08:00
james 8d67a458e5 尝试使蛇能达到队列最大长度,防止蛇经过果子果子消失,调整main顺序,先运行mysnake 2024-08-05 10:19:34 +08:00
james 45e04c1b87 贪吃蛇图片 2024-08-04 23:15:43 +08:00
james a478cc074f 显示吃果个数 2024-08-04 23:13:09 +08:00
james 50cb05afa8 增加食物 2024-08-04 23:00:22 +08:00
james 5f0093f4e8 按键控制运动(方向) 2024-08-04 20:14:20 +08:00
james 59dccf3e4c 关了测试输出 2024-08-04 18:51:28 +08:00
james 4aac83a1bb 头尾显示消失时间 2024-08-04 18:49:15 +08:00
james 5943e3bd2b 处理了边界问题 2024-08-04 18:45:11 +08:00
james 6b1aae99a2 转移到init,my_func,小蛇随机动 2024-08-04 18:31:14 +08:00
james 6615870145 md(git back) for暴力涂色 2024-08-04 17:25:03 +08:00
james 1c7ba7dd86 turn the biggest to ccm 2024-08-04 17:19:11 +08:00
james 094b6bd526 Merge branch 'S' of tj20.top:james/rsoc into S 2024-08-04 17:16:08 +08:00
james 101ee9c933 使用ram2成功 2024-08-04 17:16:05 +08:00
james c7ea050705 back lds 2024-08-04 16:01:29 +08:00
james cc30b3f3d3 S 2024-08-04 15:57:12 +08:00
james e4ac1a31ca 改S文件 2024-08-04 14:44:37 +08:00
james c7b78edbf8 贪吃蛇但颜色位置有点问题 2024-08-04 14:43:38 +08:00
james f4b9e5d8bd 删掉lvgl+led,编译爆内存 2024-08-03 15:45:29 +08:00
james 03a8ff6ec6 圆角屏幕+netutils_pkg 2024-08-03 01:15:15 +08:00
james 938611ff84 + brightness 2024-08-01 17:46:50 +08:00
james 3865c1928d 尝试中文、自动连WiFi 2024-08-01 16:46:09 +08:00
james 59e7973d40 LCD 显示温湿度图片 2024-08-01 11:39:31 +08:00
james acc95af171 进度图 2024-08-01 11:36:35 +08:00
james f1e8e52a0d lcd显示温湿度美化格式 2024-08-01 11:19:15 +08:00
james f358a17211 加入soft rtc 2024-08-01 11:11:08 +08:00
james b846ef98a6 暂时不编译day5,lcd显示温度成功 2024-08-01 11:09:36 +08:00
james be09a1c768 暂时不编译day5的mqtt(会与今天的重叠) 2024-08-01 10:16:23 +08:00
james ec0a79cf30 关sd卡 2024-08-01 09:23:13 +08:00
james 9e50787861 Merge branch 'main' into lcd 2024-08-01 01:01:19 +08:00
james be68894973 menuconfig开了tf, 2024-08-01 00:27:00 +08:00
james 6d24975144 不必关WiFi 2024-07-31 21:28:58 +08:00
24 changed files with 1541 additions and 152 deletions

80
.config
View File

@ -209,7 +209,9 @@ CONFIG_RT_USING_PWM=y
# CONFIG_RT_USING_MTD_NOR is not set
# CONFIG_RT_USING_MTD_NAND is not set
# CONFIG_RT_USING_PM is not set
# CONFIG_RT_USING_RTC is not set
CONFIG_RT_USING_RTC=y
# CONFIG_RT_USING_ALARM 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
@ -432,7 +434,7 @@ CONFIG_RT_USING_ULOG=y
# CONFIG_ULOG_OUTPUT_LVL_I is not set
CONFIG_ULOG_OUTPUT_LVL_D=y
CONFIG_ULOG_OUTPUT_LVL=7
# CONFIG_ULOG_USING_ISR_LOG is not set
CONFIG_ULOG_USING_ISR_LOG=y
CONFIG_ULOG_ASSERT_ENABLE=y
CONFIG_ULOG_LINE_BUF_SIZE=128
# CONFIG_ULOG_USING_ASYNC_OUTPUT is not set
@ -553,7 +555,24 @@ CONFIG_RW007_RST_PIN=111
# CONFIG_PKG_USING_COAP is not set
# CONFIG_PKG_USING_NOPOLL is not set
# CONFIG_PKG_USING_NETUTILS is not set
CONFIG_PKG_USING_NETUTILS=y
CONFIG_PKG_NETUTILS_PATH="/packages/iot/netutils"
# CONFIG_PKG_NETUTILS_TFTP is not set
# CONFIG_PKG_NETUTILS_IPERF is not set
# CONFIG_PKG_NETUTILS_NETIO is not set
CONFIG_PKG_NETUTILS_NTP=y
CONFIG_NTP_USING_AUTO_SYNC=y
CONFIG_NTP_AUTO_SYNC_FIRST_DELAY=30
CONFIG_NTP_AUTO_SYNC_PERIOD=3600
CONFIG_NETUTILS_NTP_HOSTNAME="cn.ntp.org.cn"
CONFIG_NETUTILS_NTP_HOSTNAME2="ntp.rt-thread.org"
CONFIG_NETUTILS_NTP_HOSTNAME3="edu.ntp.org.cn"
# CONFIG_PKG_NETUTILS_TELNET is not set
# CONFIG_PKG_NETUTILS_TCPDUMP is not set
CONFIG_PKG_USING_NETUTILS_LATEST_VERSION=y
# CONFIG_PKG_USING_NETUTILS_V133 is not set
CONFIG_PKG_NETUTILS_VER="latest"
CONFIG_PKG_NETUTILS_VER_NUM=0x99999
# CONFIG_PKG_USING_CMUX is not set
# CONFIG_PKG_USING_PPP_DEVICE is not set
# CONFIG_PKG_USING_AT_DEVICE is not set
@ -757,7 +776,33 @@ CONFIG_PKG_CJSON_VER="v1.7.17"
#
# LVGL: powerful and easy-to-use embedded GUI library
#
# CONFIG_PKG_USING_LVGL is not set
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_USING_LVGL_SQUARELINE is not set
# CONFIG_PKG_LVGL_USING_EXAMPLES is not set
CONFIG_PKG_LVGL_USING_DEMOS=y
CONFIG_PKG_LVGL_USING_V080311=y
# CONFIG_PKG_LVGL_USING_V080310 is not set
# CONFIG_PKG_LVGL_USING_V08039 is not set
# CONFIG_PKG_LVGL_USING_V08038 is not set
# CONFIG_PKG_LVGL_USING_V08037 is not set
# CONFIG_PKG_LVGL_USING_V08036 is not set
# CONFIG_PKG_LVGL_USING_V08035 is not set
# CONFIG_PKG_LVGL_USING_V08034 is not set
# CONFIG_PKG_LVGL_USING_V08033 is not set
# CONFIG_PKG_LVGL_USING_V08032 is not set
# CONFIG_PKG_LVGL_USING_V08031 is not set
# CONFIG_PKG_LVGL_USING_V08030 is not set
# CONFIG_PKG_LVGL_USING_V08020 is not set
# CONFIG_PKG_LVGL_USING_V8_3_LATEST_VERSION is not set
# CONFIG_PKG_LVGL_USING_V09000 is not set
# CONFIG_PKG_LVGL_USING_V09010 is not set
# CONFIG_PKG_LVGL_USING_LATEST_VERSION is not set
CONFIG_PKG_LVGL_VER_NUM=0x080311
CONFIG_PKG_LVGL_VER="v8.3.11"
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
# end of LVGL: powerful and easy-to-use embedded GUI library
@ -1032,7 +1077,14 @@ CONFIG_PKG_USING_AHT10_LATEST_VERSION=y
# CONFIG_PKG_USING_AHT10_V300 is not set
# CONFIG_PKG_USING_AHT10_V210 is not set
CONFIG_PKG_AHT10_VER="latest"
# CONFIG_PKG_USING_AP3216C is not set
CONFIG_PKG_USING_AP3216C=y
CONFIG_PKG_AP3216C_PATH="/packages/peripherals/sensors/ap3216c"
# CONFIG_AP3216C_USING_SENSOR_DEVICE is not set
# CONFIG_AP3216C_USING_HW_INT is not set
CONFIG_PKG_USING_AP3216C_LATEST_VERSION=y
# CONFIG_PKG_USING_AP3216C_V200 is not set
# CONFIG_PKG_USING_AP3216C_V100 is not set
CONFIG_PKG_AP3216C_VER="latest"
# CONFIG_PKG_USING_TSL4531 is not set
# CONFIG_PKG_USING_DS18B20 is not set
# CONFIG_PKG_USING_DHT11 is not set
@ -1551,7 +1603,13 @@ CONFIG_SOC_SERIES_STM32F4=y
# CONFIG_BSP_USING_ARDUINO is not set
CONFIG_BSP_USING_USB_TO_USART=y
# CONFIG_BSP_USING_COM3 is not set
# CONFIG_BSP_USING_RS485 is not set
CONFIG_BSP_USING_RS485=y
#
# set rts pin number
#
CONFIG_BSP_RS485_RTS_PIN=104
CONFIG_RS485_UART_DEVICE_NAME="uart6"
CONFIG_BSP_USING_SRAM=y
CONFIG_BSP_USING_ONBOARD_LCD=y
CONFIG_BSP_USING_ONBOARD_LCD_PWM_BL=y
@ -1569,7 +1627,7 @@ CONFIG_BSP_USING_FAL=y
# CONFIG_BSP_USING_EASYFLASH is not set
CONFIG_BSP_USING_RW007_WLAN=y
CONFIG_BSP_USING_AHT21=y
# CONFIG_BSP_USING_AP3216C is not set
CONFIG_BSP_USING_AP3216C=y
CONFIG_BSP_USING_ICM20608=y
# CONFIG_BSP_USING_USB_MOUSE is not set
# CONFIG_BSP_USING_CAN is not set
@ -1588,12 +1646,16 @@ CONFIG_BSP_USING_UART1=y
# CONFIG_BSP_USING_UART3 is not set
# CONFIG_BSP_USING_UART4 is not set
# CONFIG_BSP_USING_UART5 is not set
# CONFIG_BSP_USING_UART6 is not set
CONFIG_BSP_USING_UART6=y
# CONFIG_BSP_UART6_RX_USING_DMA is not set
# CONFIG_BSP_UART6_TX_USING_DMA is not set
# CONFIG_BSP_USING_TIM is not set
CONFIG_BSP_USING_PWM=y
# CONFIG_BSP_USING_PWM1 is not set
# CONFIG_BSP_USING_PWM2 is not set
# CONFIG_BSP_USING_PWM3 is not set
CONFIG_BSP_USING_PWM3=y
CONFIG_BSP_USING_PWM3_CH2=y
# CONFIG_BSP_USING_PWM3_CH4 is not set
# CONFIG_BSP_USING_PWM4 is not set
CONFIG_BSP_USING_PWM14=y
CONFIG_BSP_USING_PWM14_CH1=y

View File

@ -31,6 +31,10 @@ git remote remove origin
git remote set-url --add origin git@github.com:*.git
git push -u origin master
# 退到/进到 指定commit的sha码(没得再返回了)
git reset --hard dde8c25694f34acf8971f0782b1a676f39bf0a46
```
## SConscript
加入这个文件可以使在当前文件夹里的也能被调用

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -4,32 +4,44 @@
#define LOG_TAG "pin.irq"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
#include <rtatomic.h>
#include "my_func.h"
#define KEY_UP GET_PIN(C, 5)
#define KEY_DOWN GET_PIN(C, 1)
#define KEY_LEFT GET_PIN(C, 0)
#define KEY_RIGHT GET_PIN(C, 4)
extern rt_atomic_t now_direction ;
extern rt_atomic_t snake_pressed ;
extern int snake_max;
void key_up_callback(void *args)
{
rt_atomic_store(&snake_pressed, snake_max+1);
if(rt_atomic_load(&now_direction) != 2) rt_atomic_store(&now_direction, 0);
int value = rt_pin_read(KEY_UP);
LOG_I("key up value: %d\n", value);
}
void key_down_callback(void *args)
{
rt_atomic_store(&snake_pressed, snake_max+1);
int value = rt_pin_read(KEY_DOWN);
if(rt_atomic_load(&now_direction) != 0) rt_atomic_store(&now_direction, 2);
LOG_I("key down value: %d\n", value);
}
void key_left_callback(void *args)
{
rt_atomic_store(&snake_pressed, snake_max+1);
if(rt_atomic_load(&now_direction) != 3) rt_atomic_store(&now_direction, 1);
int value = rt_pin_read(KEY_LEFT);
LOG_I("key left value: %d\n", value);
}
void key_right_callback(void *args)
{
rt_atomic_store(&snake_pressed, snake_max+1);
if(rt_atomic_load(&now_direction) != 1) rt_atomic_store(&now_direction, 3);
int value = rt_pin_read(KEY_RIGHT);
LOG_I("key right value: %d\n", value);
}

View File

@ -2,9 +2,7 @@ from building import *
import os
cwd = GetCurrentDir()
src = [
'mqtt.c',
]
src = [ ]
CPPPATH = [cwd]

View File

@ -23,7 +23,7 @@ void app_lcd_string(void){
/* show some string on lcd */
lcd_show_string(10, 69, 16, "Hello, RT-Thread!");
lcd_show_string(10, 69 + 16, 24, "RT-Thread");
lcd_show_string(10, 69 + 16 + 24, 32, "123");
lcd_show_string(10, 69 + 16 + 24, 32, "RT-Thread");
/* draw a line on lcd */
lcd_draw_line(0, 69 + 16 + 24 + 32, 240, 69 + 16 + 24 + 32);

View File

@ -3,6 +3,8 @@
#include <wlan_mgnt.h>
#include <wlan_cfg.h>
#include <wlan_prot.h>
#include <ap3216c.h>
#include "my_func.h"
static int board_init(void)
{
@ -48,6 +50,9 @@ INIT_APP_EXPORT(app_init);
int main_init(void)
{
char str[] = "wifi join Dong abcd07691234";
my_round(20);
system(str);
// rt_thread_mdelay(18000);
// char *argv[] = {"wifi", "join", "Dong", "abcd07691234"};
// wifi_join(4, argv);

View File

@ -1,85 +1,116 @@
// /*
// * Copyright (c) 2006-2021, RT-Thread Development Team
// *
// * SPDX-License-Identifier: Apache-2.0
// *
// * Change Logs:
// * Date Author Notes
// * 2023-5-10 ShiHao first version
// */
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023-5-10 ShiHao first version
*/
// #include <rtthread.h>
// #include <rtdevice.h>
// #include <board.h>
// #define DBG_TAG "main"
// #define DBG_LVL DBG_LOG
// #include <rtdbg.h>
// #include <drv_lcd.h>
// #include <rttlogo.h>
// /* 配置 LED 灯引脚 */
// #define PIN_LED_B GET_PIN(F, 11) // PF11 : LED_B --> LED
// #define PIN_LED_R GET_PIN(F, 12) // PF12 : LED_R --> LED
// int main(void)
// {
// // lcd_clear(WHITE);
// // /* show RT-Thread logo */
// // lcd_show_image(0, 0, 240, 69, image_rttlogo);
// // /* set the background color and foreground color */
// // lcd_set_color(WHITE, BLACK);
// // /* show some string on lcd */
// // lcd_show_string(10, 69, 16, "Hello, RT-Thread!");
// // lcd_show_string(10, 69 + 16, 24, "RT-Thread");
// // lcd_show_string(10, 69 + 16 + 24, 32, "RT-Thread");
// // /* draw a line on lcd */
// // lcd_draw_line(0, 69 + 16 + 24 + 32, 240, 69 + 16 + 24 + 32);
// // /* draw a concentric circles */
// // lcd_draw_point(120, 194);
// // for (int i = 0; i < 46; i += 4)
// // {
// // lcd_draw_circle(120, 194, i);
// // }
// return 0;
// }
#include <rtthread.h>
#include <board.h>
#include "init.h"
#include <drv_gpio.h>
#ifndef RT_USING_NANO
#include <rtdevice.h>
#endif // !RT_USING_NANO
#include <board.h>
#include "drv_common.h"
#include <ntp.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include "init.h"
#include <drv_lcd.h>
#include "my_func.h"
#include <drv_gpio.h>
/* 配置 LED 灯引脚 */
#define PIN_LED_B GET_PIN(F, 11) // PF11 : LED_B --> LED
#define PIN_LED_R GET_PIN(F, 12) // PF12 : LED_R --> LED
#define GPIO_LED_B GET_PIN(F,11)
#define GPIO_LED_R GET_PIN(F,12)
int main(void)
{
main_init();
// rt_pin_mode(GPIO_LED_B, PIN_MODE_OUTPUT);
// while(1)
rt_pin_mode(PIN_LED_B, PIN_MODE_OUTPUT);
rt_pin_write(PIN_LED_B, PIN_LOW);
system("snake game");
rt_wlan_config_autoreconnect(RT_TRUE);
rt_wlan_connect("Dong", "abcd07691234");
mytime();
/* init Wi-Fi auto connect feature */
// wlan_autoconnect_init();
/* enable auto reconnect on WLAN device */
// lcd_clear(WHITE);
// /* show RT-Thread logo */
// lcd_show_image(0, 0, 240, 69, image_rttlogo);
// /* set the background color and foreground color */
// lcd_set_color(WHITE, BLACK);
// /* show some string on lcd */
// lcd_show_string(10, 69, 16, "Hello, RT-Thread!");
// lcd_show_string(10, 69 + 16, 24, "RT-Thread");
// lcd_show_string(10, 69 + 16 + 24, 32, "RT-Thread");
// /* draw a line on lcd */
// lcd_draw_line(0, 69 + 16 + 24 + 32, 240, 69 + 16 + 24 + 32);
// /* draw a concentric circles */
// lcd_draw_point(120, 194);
// for (int i = 0; i < 46; i += 4)
// {
// rt_pin_write(GPIO_LED_B, PIN_HIGH);
// rt_thread_mdelay(500);
// rt_pin_write(GPIO_LED_B, PIN_LOW);
// rt_thread_mdelay(500);
// lcd_draw_circle(120, 194, i);
// }
return 0;
}
// #include <rtthread.h>
// #include <board.h>
// #include "init.h"
// #include <drv_gpio.h>
// #ifndef RT_USING_NANO
// #include <rtdevice.h>
// #endif // !RT_USING_NANO
// #define WIFI_CS GET_PIN(F,10)
// void WIFI_CS_PULL_DOWN(void)
// #define GPIO_LED_B GET_PIN(F,11)
// #define GPIO_LED_R GET_PIN(F,12)
// int main(void)
// {
// main_init();
// // rt_pin_mode(GPIO_LED_B, PIN_MODE_OUTPUT);
// // while(1)
// // {
// // rt_pin_write(GPIO_LED_B, PIN_HIGH);
// // rt_thread_mdelay(500);
// // rt_pin_write(GPIO_LED_B, PIN_LOW);
// // rt_thread_mdelay(500);
// // }
// return 0;
// }
// static int onboard_sdcard_mount(void)
// {
// if (dfs_mount("sd0", "/sdcard", "elm", 0, 0) == RT_EOK)
// {
// LOG_I("SD card mount to '/sdcard'");
// }
// else
// {
// LOG_E("SD card mount to '/sdcard' failed!");
// }
// return RT_EOK;
// }
// #define WIFI_CS GET_PIN(F, 10)
// void WIFI_CS_PULL_DOWM(void)
// {
// rt_pin_mode(WIFI_CS, PIN_MODE_OUTPUT);
// rt_pin_write(WIFI_CS, PIN_LOW);
// }
// INIT_BOARD_EXPORT(WIFI_CS_PULL_DOWN);
// INIT_BOARD_EXPORT(WIFI_CS_PULL_DOWM);

View File

@ -18,7 +18,7 @@ path += [cwd + '/CubeMX_Config/Inc']
startup_path_prefix = SDK_LIB
if rtconfig.PLATFORM in ['gcc', 'llvm-arm']:
src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.s']
src += [ cwd + '/startup_stm32f407xx.s']
elif rtconfig.PLATFORM in ['armcc', 'armclang']:
src += [startup_path_prefix + '/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f407xx.s']
elif rtconfig.PLATFORM in ['iccarm']:

View File

@ -7,10 +7,9 @@
/* Program Entry, set to mark it as "used" and avoid gc */
MEMORY
{
CODE (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */
RAM1 (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */
RAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 64k /* 64K sram */
MCUlcdgrambysram (rw) : ORIGIN = 0x68000000, LENGTH = 1024k
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB - 128kB flash */
RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64k /* 64K ccm sram */
}
ENTRY(Reset_Handler)
_system_stack_size = 0x400;
@ -43,12 +42,6 @@ SECTIONS
KEEP(*(VSymTab))
__vsymtab_end = .;
/* section information for utest */
. = ALIGN(4);
__rt_utest_tc_tab_start = .;
KEEP(*(UtestTcTab))
__rt_utest_tc_tab_end = .;
/* section information for initial. */
. = ALIGN(4);
__rt_init_start = .;
@ -62,12 +55,16 @@ SECTIONS
KEEP (*(.init_array))
PROVIDE(__ctors_end__ = .);
/* section information for utest */
. = ALIGN(4);
__rt_utest_tc_tab_start = .;
KEEP(*(UtestTcTab))
__rt_utest_tc_tab_end = .;
. = ALIGN(4);
KEEP(*(.eh_frame*))
. = ALIGN(4);
_etext = .;
} > CODE = 0
} > FLASH = 0
/* .ARM.exidx is sorted, so has to go in its own output section. */
__exidx_start = .;
@ -77,12 +74,13 @@ SECTIONS
/* This is used by the startup in order to initialize the .data secion */
_sidata = .;
} > CODE
} > FLASH
__exidx_end = .;
/* used by the startup to initialize data */
_sidata = LOADADDR(.data);
/* .data section which is used for initialized data */
.data : AT (_sidata)
.data :
{
. = ALIGN(4);
/* This is used by the startup in order to initialize the .data secion */
@ -100,7 +98,86 @@ SECTIONS
. = ALIGN(4);
/* This is used by the startup in order to initialize the .data secion */
_edata = . ;
} >RAM1
} >RAM AT> FLASH
_siccmdata = LOADADDR(.ccmdata); /* May be already present */
/* Initialized CCM-RAM section
*
* IMPORTANT NOTE!
* If initialized variables will be placed in this section,
* the startup code needs to be modified to copy the init-values.
*/
.ccmdata :
{
. = ALIGN(4);
_sccmdata = .; /* create a global symbol at data start */
*(.ccmdata) /* .data sections */
*(.ccmdata*) /* .data* sections */
/*
*data_reg.o(.data .data*)
*monitor*.o(.data .data*)
*sender*.o(.data .data*)
*kernel*.o(.data .data*)
*/
. = ALIGN(4);
_eccmdata = .; /* define a global symbol at data end */
} >CCMRAM AT> FLASH
/* _siccm_bss = LOADADDR(.ccm_bss); */
/* CCM-RAM section
*
* IMPORTANT NOTE!
* If initialized variables will be placed in this section,
* the startup code needs to be modified to copy the init-values.
*/
.ccm_bss :
{
. = ALIGN(4);
_sccm_bss = .; /* create a global symbol at ccmram start */
*(.ccm_bss)
*(.ccm_bss*)
/* build\\core\\*.o(.bss .bss*) */
build\\monitor\\**.o(.bss .bss*)
build\\sender\\**.o(.bss .bss*)
/* build\\mapping\\**.o(.bss .bss*) */
/* *board*.o(.bss .bss*) */
/* *autosave.o(.bss .bss*)*/
/* *application*autosave.o(.bss .bss*) */
/* *data_send.o(.bss .bss*) */
/* *isee_http.o(.bss .bss*) */
/* *config.o(.bss .bss*) */
/* *dio.o(.bss .bss*) */
/* *eth.o(.bss .bss*) */
/* *led.o(.bss .bss*) */
/* *packages*agile_telnet*.o(.bss .bss*) */
/* *packages*agile_console*.o(.bss .bss*) */
/* *packages*cJSON*.o(.bss .bss*) */
/* *packages*CmBacktrace*.o(.bss .bss*)*/
/* *packages*easyblink*.o(.bss .bss*) */
/* *packages*webclient*.o(.bss .bss*) */
/* *packages*netutils*.o(.bss .bss*) */
/* *packages*syswatch*.o(.bss .bss*) */
/* *packages*UrlEncode*.o(.bss .bss*) */
build\\kernel\\src\\*.o(.bss .bss*)
/* build\\kernel\\libcpu\\*.o(.bss .bss*) */
/* build\\kernel\\components\\libc\\*.o(.bss .bss*)
/* build\\kernel\\components\\drivers\\*.o(.bss .bss*) */
/* build\\kernel\\components\\dfs\\*.o(.bss .bss*) */
build\\kernel\\components\\net\\lwip\\lwip-2.0.3\\*.o(.bss .bss*)
/* build\\kernel\\components\\net\\lwip\\port\\**.o(.bss .bss*) */
/* build\\kernel\\components\\net\\sal\\*.o(.bss .bss*) */
/* build\\kernel\\components\\net\\netdev\\*.o(.bss .bss*) */
/* build\\kernel\\components\\net\\sal_socket\\*.o(.bss .bss*) */
. = ALIGN(4);
_eccm_bss = .; /* create a global symbol at ccmram end */
} >CCMRAM
.stack :
{
@ -109,7 +186,7 @@ SECTIONS
. = . + _system_stack_size;
. = ALIGN(4);
_estack = .;
} >RAM1
} >RAM
__bss_start = .;
.bss :
@ -127,18 +204,9 @@ SECTIONS
_ebss = . ;
*(.bss.init)
} > RAM1
} > RAM
__bss_end = .;
.MCUlcdgrambysram (NOLOAD) : ALIGN(4)
{
. = ALIGN(4);
*(.MCUlcdgrambysram)
*(.MCUlcdgrambysram.*)
. = ALIGN(4);
__MCUlcdgrambysram_free__ = .;
} > MCUlcdgrambysram
_end = .;
/* Stabs debugging sections. */

View File

@ -56,7 +56,7 @@ static int onboard_fal_mount(void)
fal_init();
/* 在 spi flash 中名为 "filesystem" 的分区上创建一个块设备 */
struct rt_device *flash_dev = fal_blk_device_create(FS_PARTITION_NAME);
fal_blk_device_create("font");
// fal_blk_device_create("font");
if (flash_dev == NULL)
{
LOG_E("Can't create a block device on '%s' partition.", FS_PARTITION_NAME);
@ -87,36 +87,36 @@ static int onboard_fal_mount(void)
int ret;
/* 创建目录 */
ret = mkdir("/fal/test", 0x777);
if (ret < 0)
{
/* 创建目录失败 */
rt_kprintf("dir error!\n");
}
else
{
/* 创建目录成功 */
rt_kprintf("mkdir ok!\n");
}
/* 挂载块设备"font"到 DFS 目录/fal/test中 */
if (dfs_mount("font", "/fal/test", "elm", 0, 0) == 0)
{
LOG_I("font initialized!");
}
else
{
dfs_mkfs("elm", "font");
if (dfs_mount("font", "/fal/test", "elm", 0, 0) == 0)
{
LOG_I("font initialized!");
}
else
{
LOG_E("Failed to initialize font!");
LOG_D("You should create a filesystem(font) on the block device first!");
}
}
// /* 创建目录 */
// ret = mkdir("/fal/test", 0x777);
// if (ret < 0)
// {
// /* 创建目录失败 */
// rt_kprintf("dir error!\n");
// }
// else
// {
// /* 创建目录成功 */
// rt_kprintf("mkdir ok!\n");
// }
// /* 挂载块设备"font"到 DFS 目录/fal/test中 */
// if (dfs_mount("font", "/fal/test", "elm", 0, 0) == 0)
// {
// LOG_I("font initialized!");
// }
// else
// {
// dfs_mkfs("elm", "font");
// if (dfs_mount("font", "/fal/test", "elm", 0, 0) == 0)
// {
// LOG_I("font initialized!");
// }
// else
// {
// LOG_E("Failed to initialize font!");
// LOG_D("You should create a filesystem(font) on the block device first!");
// }
// }
return RT_EOK;
}
#endif /*BSP_USING_FLASH_FATFS*/

535
board/startup_stm32f407xx.s Normal file
View File

@ -0,0 +1,535 @@
/**
******************************************************************************
* @file startup_stm32f407xx.s
* @author MCD Application Team
* @brief STM32F407xx Devices vector table for GCC based toolchains.
* This module performs:
* - Set the initial SP
* - Set the initial PC == Reset_Handler,
* - Set the vector table entries with the exceptions ISR address
* - Branches to main in the C library (which eventually
* calls main()).
* After Reset the Cortex-M4 processor is in Thread mode,
* priority is Privileged, and the Stack is set to Main.
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
.syntax unified
.cpu cortex-m4
.fpu softvfp
.thumb
.global g_pfnVectors
.global Default_Handler
/* start address for the initialization values of the .data section.
defined in linker script */
.word _sidata
/* start address for the .data section. defined in linker script */
.word _sdata
/* end address for the .data section. defined in linker script */
.word _edata
/* start address for the .bss section. defined in linker script */
.word _sbss
/* end address for the .bss section. defined in linker script */
.word _ebss
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
/**
* @brief This is the code that gets called when the processor first
* starts execution following a reset event. Only the absolutely
* necessary set is performed, after which the application
* supplied main() routine is called.
* @param None
* @retval : None
*/
.section .text.Reset_Handler
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
ldr sp, =_estack /* set stack pointer */
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
b LoopCopyDataInit
CopyDataInit:
ldr r3, =_sidata
ldr r3, [r3, r1]
str r3, [r0, r1]
adds r1, r1, #4
LoopCopyDataInit:
ldr r0, =_sdata
ldr r3, =_edata
adds r2, r0, r1
cmp r2, r3
bcc CopyDataInit
/* Copy from flash to CCMRAM */
ldr r0, =_sccmdata
ldr r1, =_eccmdata
ldr r2, =_siccmdata
movs r3, #0
b LoopCopyCcmInit
CopyCcmInit:
ldr r4, [r2, r3]
str r4, [r0, r3]
adds r3, r3, #4
LoopCopyCcmInit:
adds r4, r0, r3
cmp r4, r1
bcc CopyCcmInit
/* End of copy to CCMRAM */
ldr r2, =_sccm_bss
b LoopFillZeroCcm
/* Zero fill the ccm bss segment. */
FillZeroCcm:
movs r3, #0
str r3, [r2], #4
LoopFillZeroCcm:
ldr r3, = _eccm_bss
cmp r2, r3
bcc FillZeroCcm
/* End of zero fill to CCMRAM */
ldr r2, =_sbss
b LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
str r3, [r2], #4
LoopFillZerobss:
ldr r3, = _ebss
cmp r2, r3
bcc FillZerobss
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call static constructors */
/* bl __libc_init_array */
/* Call the application's entry point.*/
bl entry
bx lr
.size Reset_Handler, .-Reset_Handler
/**
* @brief This is the code that gets called when the processor receives an
* unexpected interrupt. This simply enters an infinite loop, preserving
* the system state for examination by a debugger.
* @param None
* @retval None
*/
.section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
b Infinite_Loop
.size Default_Handler, .-Default_Handler
/******************************************************************************
*
* The minimal vector table for a Cortex M3. Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
*
*******************************************************************************/
.section .isr_vector,"a",%progbits
.type g_pfnVectors, %object
.size g_pfnVectors, .-g_pfnVectors
g_pfnVectors:
.word _estack
.word Reset_Handler
.word NMI_Handler
.word HardFault_Handler
.word MemManage_Handler
.word BusFault_Handler
.word UsageFault_Handler
.word 0
.word 0
.word 0
.word 0
.word SVC_Handler
.word DebugMon_Handler
.word 0
.word PendSV_Handler
.word SysTick_Handler
/* External Interrupts */
.word WWDG_IRQHandler /* Window WatchDog */
.word PVD_IRQHandler /* PVD through EXTI Line detection */
.word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */
.word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */
.word FLASH_IRQHandler /* FLASH */
.word RCC_IRQHandler /* RCC */
.word EXTI0_IRQHandler /* EXTI Line0 */
.word EXTI1_IRQHandler /* EXTI Line1 */
.word EXTI2_IRQHandler /* EXTI Line2 */
.word EXTI3_IRQHandler /* EXTI Line3 */
.word EXTI4_IRQHandler /* EXTI Line4 */
.word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */
.word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */
.word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */
.word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */
.word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */
.word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */
.word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */
.word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */
.word CAN1_TX_IRQHandler /* CAN1 TX */
.word CAN1_RX0_IRQHandler /* CAN1 RX0 */
.word CAN1_RX1_IRQHandler /* CAN1 RX1 */
.word CAN1_SCE_IRQHandler /* CAN1 SCE */
.word EXTI9_5_IRQHandler /* External Line[9:5]s */
.word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */
.word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */
.word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */
.word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
.word TIM2_IRQHandler /* TIM2 */
.word TIM3_IRQHandler /* TIM3 */
.word TIM4_IRQHandler /* TIM4 */
.word I2C1_EV_IRQHandler /* I2C1 Event */
.word I2C1_ER_IRQHandler /* I2C1 Error */
.word I2C2_EV_IRQHandler /* I2C2 Event */
.word I2C2_ER_IRQHandler /* I2C2 Error */
.word SPI1_IRQHandler /* SPI1 */
.word SPI2_IRQHandler /* SPI2 */
.word USART1_IRQHandler /* USART1 */
.word USART2_IRQHandler /* USART2 */
.word USART3_IRQHandler /* USART3 */
.word EXTI15_10_IRQHandler /* External Line[15:10]s */
.word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */
.word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */
.word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */
.word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */
.word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */
.word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
.word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */
.word FSMC_IRQHandler /* FSMC */
.word SDIO_IRQHandler /* SDIO */
.word TIM5_IRQHandler /* TIM5 */
.word SPI3_IRQHandler /* SPI3 */
.word UART4_IRQHandler /* UART4 */
.word UART5_IRQHandler /* UART5 */
.word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */
.word TIM7_IRQHandler /* TIM7 */
.word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */
.word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */
.word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */
.word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */
.word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */
.word ETH_IRQHandler /* Ethernet */
.word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */
.word CAN2_TX_IRQHandler /* CAN2 TX */
.word CAN2_RX0_IRQHandler /* CAN2 RX0 */
.word CAN2_RX1_IRQHandler /* CAN2 RX1 */
.word CAN2_SCE_IRQHandler /* CAN2 SCE */
.word OTG_FS_IRQHandler /* USB OTG FS */
.word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */
.word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */
.word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */
.word USART6_IRQHandler /* USART6 */
.word I2C3_EV_IRQHandler /* I2C3 event */
.word I2C3_ER_IRQHandler /* I2C3 error */
.word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */
.word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */
.word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */
.word OTG_HS_IRQHandler /* USB OTG HS */
.word DCMI_IRQHandler /* DCMI */
.word 0 /* CRYP crypto */
.word HASH_RNG_IRQHandler /* Hash and Rng */
.word FPU_IRQHandler /* FPU */
/*******************************************************************************
*
* Provide weak aliases for each Exception handler to the Default_Handler.
* As they are weak aliases, any function with the same name will override
* this definition.
*
*******************************************************************************/
.weak NMI_Handler
.thumb_set NMI_Handler,Default_Handler
.weak HardFault_Handler
.thumb_set HardFault_Handler,Default_Handler
.weak MemManage_Handler
.thumb_set MemManage_Handler,Default_Handler
.weak BusFault_Handler
.thumb_set BusFault_Handler,Default_Handler
.weak UsageFault_Handler
.thumb_set UsageFault_Handler,Default_Handler
.weak SVC_Handler
.thumb_set SVC_Handler,Default_Handler
.weak DebugMon_Handler
.thumb_set DebugMon_Handler,Default_Handler
.weak PendSV_Handler
.thumb_set PendSV_Handler,Default_Handler
.weak SysTick_Handler
.thumb_set SysTick_Handler,Default_Handler
.weak WWDG_IRQHandler
.thumb_set WWDG_IRQHandler,Default_Handler
.weak PVD_IRQHandler
.thumb_set PVD_IRQHandler,Default_Handler
.weak TAMP_STAMP_IRQHandler
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler
.weak RTC_WKUP_IRQHandler
.thumb_set RTC_WKUP_IRQHandler,Default_Handler
.weak FLASH_IRQHandler
.thumb_set FLASH_IRQHandler,Default_Handler
.weak RCC_IRQHandler
.thumb_set RCC_IRQHandler,Default_Handler
.weak EXTI0_IRQHandler
.thumb_set EXTI0_IRQHandler,Default_Handler
.weak EXTI1_IRQHandler
.thumb_set EXTI1_IRQHandler,Default_Handler
.weak EXTI2_IRQHandler
.thumb_set EXTI2_IRQHandler,Default_Handler
.weak EXTI3_IRQHandler
.thumb_set EXTI3_IRQHandler,Default_Handler
.weak EXTI4_IRQHandler
.thumb_set EXTI4_IRQHandler,Default_Handler
.weak DMA1_Stream0_IRQHandler
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler
.weak DMA1_Stream1_IRQHandler
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler
.weak DMA1_Stream2_IRQHandler
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler
.weak DMA1_Stream3_IRQHandler
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
.weak DMA1_Stream4_IRQHandler
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler
.weak DMA1_Stream5_IRQHandler
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler
.weak DMA1_Stream6_IRQHandler
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler
.weak ADC_IRQHandler
.thumb_set ADC_IRQHandler,Default_Handler
.weak CAN1_TX_IRQHandler
.thumb_set CAN1_TX_IRQHandler,Default_Handler
.weak CAN1_RX0_IRQHandler
.thumb_set CAN1_RX0_IRQHandler,Default_Handler
.weak CAN1_RX1_IRQHandler
.thumb_set CAN1_RX1_IRQHandler,Default_Handler
.weak CAN1_SCE_IRQHandler
.thumb_set CAN1_SCE_IRQHandler,Default_Handler
.weak EXTI9_5_IRQHandler
.thumb_set EXTI9_5_IRQHandler,Default_Handler
.weak TIM1_BRK_TIM9_IRQHandler
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
.weak TIM1_UP_TIM10_IRQHandler
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
.weak TIM1_TRG_COM_TIM11_IRQHandler
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
.weak TIM1_CC_IRQHandler
.thumb_set TIM1_CC_IRQHandler,Default_Handler
.weak TIM2_IRQHandler
.thumb_set TIM2_IRQHandler,Default_Handler
.weak TIM3_IRQHandler
.thumb_set TIM3_IRQHandler,Default_Handler
.weak TIM4_IRQHandler
.thumb_set TIM4_IRQHandler,Default_Handler
.weak I2C1_EV_IRQHandler
.thumb_set I2C1_EV_IRQHandler,Default_Handler
.weak I2C1_ER_IRQHandler
.thumb_set I2C1_ER_IRQHandler,Default_Handler
.weak I2C2_EV_IRQHandler
.thumb_set I2C2_EV_IRQHandler,Default_Handler
.weak I2C2_ER_IRQHandler
.thumb_set I2C2_ER_IRQHandler,Default_Handler
.weak SPI1_IRQHandler
.thumb_set SPI1_IRQHandler,Default_Handler
.weak SPI2_IRQHandler
.thumb_set SPI2_IRQHandler,Default_Handler
.weak USART1_IRQHandler
.thumb_set USART1_IRQHandler,Default_Handler
.weak USART2_IRQHandler
.thumb_set USART2_IRQHandler,Default_Handler
.weak USART3_IRQHandler
.thumb_set USART3_IRQHandler,Default_Handler
.weak EXTI15_10_IRQHandler
.thumb_set EXTI15_10_IRQHandler,Default_Handler
.weak RTC_Alarm_IRQHandler
.thumb_set RTC_Alarm_IRQHandler,Default_Handler
.weak OTG_FS_WKUP_IRQHandler
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
.weak TIM8_BRK_TIM12_IRQHandler
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
.weak TIM8_UP_TIM13_IRQHandler
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
.weak TIM8_TRG_COM_TIM14_IRQHandler
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
.weak TIM8_CC_IRQHandler
.thumb_set TIM8_CC_IRQHandler,Default_Handler
.weak DMA1_Stream7_IRQHandler
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler
.weak FSMC_IRQHandler
.thumb_set FSMC_IRQHandler,Default_Handler
.weak SDIO_IRQHandler
.thumb_set SDIO_IRQHandler,Default_Handler
.weak TIM5_IRQHandler
.thumb_set TIM5_IRQHandler,Default_Handler
.weak SPI3_IRQHandler
.thumb_set SPI3_IRQHandler,Default_Handler
.weak UART4_IRQHandler
.thumb_set UART4_IRQHandler,Default_Handler
.weak UART5_IRQHandler
.thumb_set UART5_IRQHandler,Default_Handler
.weak TIM6_DAC_IRQHandler
.thumb_set TIM6_DAC_IRQHandler,Default_Handler
.weak TIM7_IRQHandler
.thumb_set TIM7_IRQHandler,Default_Handler
.weak DMA2_Stream0_IRQHandler
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler
.weak DMA2_Stream1_IRQHandler
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler
.weak DMA2_Stream2_IRQHandler
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler
.weak DMA2_Stream3_IRQHandler
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler
.weak DMA2_Stream4_IRQHandler
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler
.weak ETH_IRQHandler
.thumb_set ETH_IRQHandler,Default_Handler
.weak ETH_WKUP_IRQHandler
.thumb_set ETH_WKUP_IRQHandler,Default_Handler
.weak CAN2_TX_IRQHandler
.thumb_set CAN2_TX_IRQHandler,Default_Handler
.weak CAN2_RX0_IRQHandler
.thumb_set CAN2_RX0_IRQHandler,Default_Handler
.weak CAN2_RX1_IRQHandler
.thumb_set CAN2_RX1_IRQHandler,Default_Handler
.weak CAN2_SCE_IRQHandler
.thumb_set CAN2_SCE_IRQHandler,Default_Handler
.weak OTG_FS_IRQHandler
.thumb_set OTG_FS_IRQHandler,Default_Handler
.weak DMA2_Stream5_IRQHandler
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler
.weak DMA2_Stream6_IRQHandler
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler
.weak DMA2_Stream7_IRQHandler
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler
.weak USART6_IRQHandler
.thumb_set USART6_IRQHandler,Default_Handler
.weak I2C3_EV_IRQHandler
.thumb_set I2C3_EV_IRQHandler,Default_Handler
.weak I2C3_ER_IRQHandler
.thumb_set I2C3_ER_IRQHandler,Default_Handler
.weak OTG_HS_EP1_OUT_IRQHandler
.thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler
.weak OTG_HS_EP1_IN_IRQHandler
.thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler
.weak OTG_HS_WKUP_IRQHandler
.thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler
.weak OTG_HS_IRQHandler
.thumb_set OTG_HS_IRQHandler,Default_Handler
.weak DCMI_IRQHandler
.thumb_set DCMI_IRQHandler,Default_Handler
.weak HASH_RNG_IRQHandler
.thumb_set HASH_RNG_IRQHandler,Default_Handler
.weak FPU_IRQHandler
.thumb_set FPU_IRQHandler,Default_Handler
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Binary file not shown.

After

Width:  |  Height:  |  Size: 857 KiB

View File

@ -1,6 +1,6 @@
### 使能了sd card
![alt text](image-2.png)
结果
![alt text](image.png)
关了就好了
![alt text](image-1.png)
#### LCD 显示温湿度
![LCD温湿度](lcdtemp.jpg)
左上角是00 →x↓y
### 简易贪吃蛇
![alt text](660c6c04fddc1bd3ccbe4255df5d449.jpg)

15
dayandnight/SConscript Normal file
View File

@ -0,0 +1,15 @@
from building import *
import os
cwd = GetCurrentDir()
CPPPATH = [cwd]
src = Glob('*.c')
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH)
list = os.listdir(cwd)
for item in list:
if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
group = group + SConscript(os.path.join(item, 'SConscript'))
Return('group')

BIN
dayandnight/image-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
dayandnight/lcdtemp.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

108
dayandnight/my_func.c Normal file
View File

@ -0,0 +1,108 @@
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <stdlib.h>
#include <drv_lcd.h>
#include <ntp.h>
#define LCD_MAX 240
void lcd_black(int x, int y)
{
lcd_address_set(x, y, x, y);
lcd_write_half_word(BLACK);
}
void lcd_white(int x, int y)
{
lcd_address_set(x, y, x, y);
lcd_write_half_word(WHITE);
}
int roundxy[4][2] = {
{0, 0},
{0, LCD_MAX},
{LCD_MAX, 0},
{LCD_MAX, LCD_MAX},
};
int xymove[4][2] = {
{1, 1},
{1, -1},
{-1, 1},
{-1, -1},
};
void mytime()
{
rt_thread_mdelay(10000);
time_t cur_time;
cur_time = ntp_get_time(RT_NULL);
if (cur_time)
{
rt_kprintf("NTP Server Time: %s", ctime((const time_t *)&cur_time));
}
lcd_show_string(20, 2, 16, ctime((const time_t *)&cur_time));
}
void xy_round(int x, int y, int x2, int y2, int r, int ii)
{
// rt_kprintf("x:%d,y:%d,x2:%d,y2:%d,r:%d\n", x, y, x2, y2, r);
for (int i = x; i != x2; i += xymove[ii][0])
{
for (int j = y; j != y2; j += xymove[ii][1])
{
int newi = x2 - i;
int newj = y2 - j;
// rt_kprintf("(%d,%d,%d)",(newi * newi + newj * newj), newi, newj);
if ((newi * newi + newj * newj) > (r * r))
{
// rt_kprintf("x:%d,y:%d\n", i, j);
lcd_black(i, j);
}
}
}
}
void my_round(int r)
{
// 这个范围涂黑
lcd_fill(0, 0, roundxy[2][0], roundxy[2][1], BLACK);
lcd_write_half_word(BLACK);
for (int i = 0; i < 4; i++)
{
xy_round(roundxy[i][0], roundxy[i][1], roundxy[i][0] + r * xymove[i][0], roundxy[i][1] + r * xymove[i][1], r, i);
}
}
void xy_sink()
{
for (int i = 0; i < 240; i++)
{
for (int j = 0; j <= 240; j++)
{
lcd_black(j, 240 - i);
rt_thread_mdelay(1);
}
// rt_kprintf("(%d,...) Blacked\n", i);
}
}
void snake_address(int x, int y, int r, const rt_uint16_t da)
{
int f = 0; // 使蛇身成节
if (r > 5)
{
f = 1;
}
for (int i = x * r + f; i < x * r + r - f; i++)
{
for (int j = y * r + f; j < y * r + r - f; j++)
{
lcd_address_set(i, j, i, j);
lcd_write_half_word(da);
}
}
}
// bt 命令行
int color_cmd(int argc, char **argv)
{
snake_address(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), BLACK);
return 1;
}
MSH_CMD_EXPORT_ALIAS(color_cmd, snk, bt );

23
dayandnight/my_func.h Normal file
View File

@ -0,0 +1,23 @@
#include <drv_lcd.h>
#include <rtthread.h>
#include <stdio.h>
#include <malloc.h>
// 当前方向
void mytime();
void xy_round(int x, int y, int x2, int y2, int r, int ii);
void my_round(int r);
void xy_sink();
void lcd_black(int x, int y);
void lcd_white(int x, int y);
void snake_address(int x, int y, int r, const rt_uint16_t da);
// typedef int QDataType;
// typedef struct QListNode
// {
// QDataType data;
// struct QListNode* next;
// } QueueNode;

366
dayandnight/myproject.c Normal file
View File

@ -0,0 +1,366 @@
#include "rtthread.h"
#include "dev_sign_api.h"
#include "mqtt_api.h"
#include <board.h>
#include <drv_gpio.h>
#include <stdio.h>
#include <string.h>
#include "aht10.h"
#include <ap3216c.h>
#include <dfs_posix.h>
#include <drv_lcd.h>
#include "mysnake.h"
char DEMO_PRODUCT_KEY[IOTX_PRODUCT_KEY_LEN + 1] = {0};
char DEMO_DEVICE_NAME[IOTX_DEVICE_NAME_LEN + 1] = {0};
char DEMO_DEVICE_SECRET[IOTX_DEVICE_SECRET_LEN + 1] = {0};
void *HAL_Malloc(uint32_t size);
void HAL_Free(void *ptr);
void HAL_Printf(const char *fmt, ...);
int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN + 1]);
int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN + 1]);
int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN]);
uint64_t HAL_UptimeMs(void);
int HAL_Snprintf(char *str, const int len, const char *fmt, ...);
// 定义接受文件内容的缓冲区
char buffer[1026] = {};
char tmp[1026];
extern int snake_len;
rt_atomic_t page_chosen = 1;
#define PAGE_MAX 2
#define GPIO_LED_B GET_PIN(F, 11)
#define GPIO_LED_R GET_PIN(F, 12)
// AHT挂载的总线名字
#define AHT10_I2C_BUS "i2c3"
// AHT,ap3216c设备指针
aht10_device_t Dev = RT_NULL;
ap3216c_device_t dev;
// Humi:湿度值,Temp:温度值
float Humi, Temp;
rt_uint16_t ps_data;
float brightness;
int lcd_y;
int int_tmp;
void ath_init(void);
void mqt_init(void);
int ap3_init(void);
#define EXAMPLE_TRACE(fmt, ...) \
do \
{ \
HAL_Printf("%s|%03d :: ", __func__, __LINE__); \
HAL_Printf(fmt, ##__VA_ARGS__); \
HAL_Printf("%s", "\r\n"); \
} while (0)
static void example_message_arrive(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg)
{
iotx_mqtt_topic_info_t *topic_info = (iotx_mqtt_topic_info_pt)msg->msg;
switch (msg->event_type)
{
case IOTX_MQTT_EVENT_PUBLISH_RECEIVED:
/* print topic name and topic message */
EXAMPLE_TRACE("Message Arrived:");
rt_pin_mode(GPIO_LED_R, PIN_MODE_OUTPUT);
// topic_info->payload 为发送的内容,可以据此设置命令
if (rt_pin_read(GPIO_LED_R) == PIN_HIGH)
{
// rt_kprintf("LED_R should be ON\n");
rt_pin_write(GPIO_LED_R, PIN_LOW);
}
else
{
// rt_kprintf("LED_R should be OFF\n");
rt_pin_write(GPIO_LED_R, PIN_HIGH);
}
EXAMPLE_TRACE("Topic : %.*s", topic_info->topic_len, topic_info->ptopic);
EXAMPLE_TRACE("Payload: %.*s", topic_info->payload_len, topic_info->payload);
EXAMPLE_TRACE("\n");
break;
default:
break;
}
}
static int example_subscribe(void *handle)
{
int res = 0;
const char *fmt = "/%s/%s/user/get";
char *topic = NULL;
int topic_len = 0;
topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1;
topic = HAL_Malloc(topic_len);
if (topic == NULL)
{
EXAMPLE_TRACE("memory not enough");
return -1;
}
memset(topic, 0, topic_len);
HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME);
res = IOT_MQTT_Subscribe(handle, topic, IOTX_MQTT_QOS0, example_message_arrive, NULL);
if (res < 0)
{
EXAMPLE_TRACE("subscribe failed");
HAL_Free(topic);
return -1;
}
HAL_Free(topic);
return 0;
}
int plus_lcd_y(int pls)
{
int_tmp = lcd_y;
lcd_y += pls;
return int_tmp;
}
void easy_show_lcd(char *title, float Temp)
{
lcd_show_string(10, plus_lcd_y(24), 24, title);
sprintf(tmp, "%f", Temp);
lcd_show_string(10, plus_lcd_y(32), 32, tmp);
}
void show_lcd()
{
lcd_y = 10;
easy_show_lcd("Temperature:", Temp);
easy_show_lcd("Humidity:", Humi);
easy_show_lcd("Brightness:(lux)", brightness);
easy_show_lcd("Ps data:", (float)ps_data);
// lcd_show_string(10, plus_lcd_y(10), 24, "Temperature:");
// sprintf(tmp, "%f", Temp);
// lcd_show_string(10, plus_lcd_y(24), 32, tmp);
// lcd_show_string(10, plus_lcd_y(32), 24, "Humidity:");
// sprintf(tmp, "%f", Humi);
// lcd_show_string(10, plus_lcd_y(24), 32, tmp);
// lcd_show_string(10, plus_lcd_y(32), 24, "Brightness:");
// sprintf(tmp, "%f(lux)", brightness);
// lcd_show_string(10, plus_lcd_y(24), 32, tmp);
}
void make_file()
{
// 文件描述符
int fd;
// 用只写方式打开文件,如果没有该文件,则创建一个文件
fd = open("/fal/test/Data.txt", O_WRONLY | O_CREAT | O_APPEND); // 和原来相比只是把O_TRUNC参数更改为O_APPEND即更改为打开后如果再进行写入将从文件的末尾位置开始写。
// rt_kprintf("\n%f %f tmp:%s\n",Humi,Temp,String);
// 如果打开成功
if (fd >= 0)
{
// 写入文件
write(fd, tmp, sizeof(tmp));
// rt_kprintf("Write done.\n");
// 关闭文件
close(fd);
}
else
{
rt_kprintf("File Open Fail.\n");
}
return;
}
int cnt = 0;
void tmp_payload(void)
{
// 读取温湿度值
Humi = aht10_read_humidity(Dev);
Temp = aht10_read_temperature(Dev);
brightness = ap3216c_read_ambient_light(dev);
ps_data = ap3216c_read_ps_data(dev);
if (ps_data > 14)
{
page_chosen = (page_chosen % PAGE_MAX) + 1;
}
// icm20608_get_accel(icm20608_device_t dev, rt_int16_t *accel_x, rt_int16_t *accel_y, rt_int16_t *accel_z)
// memset(tmp, 0, sizeof(tmp));
// sprintf(tmp, "Temp: %.1f;Humi: %.1f;Count: %d\n", Temp, Humi,++cnt);
// rt_kprintf("\n%f %f tmp:%s\n",Humi,Temp,tmp);
// make_file();
if (page_chosen == 2)
{
show_lcd();
}
sprintf(tmp, "{\"params\":{\"temperature\":%.2f,\"humidity\":%.2f,\"LightLux\":%.2f,\"Psdata\":%d,\"Snakelen\":%d}}", Temp, Humi, brightness, ps_data, snake_len);
return;
}
void test_lcd()
{
// show_str(10, 10+24+32+24+32, 100, 32, "你好", 32);
ath_init();
ap3_init();
while (1)
{
tmp_payload();
rt_thread_mdelay(100);
}
}
MSH_CMD_EXPORT(test_lcd, run my project);
static int example_publish(void *handle)
{
tmp_payload();
int res = 0;
const char *fmt = "/sys/%s/%s/thing/event/property/post";
// /k1lyriw1yGj/${deviceName}/user/get
char *topic = NULL;
int topic_len = 0;
char *payload = tmp;
// strcpy(payload,tmp_payload());
// rt_kprintf("payload:%s\n",payload);
topic_len = strlen(fmt) + strlen(DEMO_PRODUCT_KEY) + strlen(DEMO_DEVICE_NAME) + 1;
topic = HAL_Malloc(topic_len);
if (topic == NULL)
{
EXAMPLE_TRACE("memory not enough");
return -1;
}
memset(topic, 0, topic_len);
HAL_Snprintf(topic, topic_len, fmt, DEMO_PRODUCT_KEY, DEMO_DEVICE_NAME);
res = IOT_MQTT_Publish_Simple(0, topic, IOTX_MQTT_QOS0, payload, strlen(payload));
if (res < 0)
{
EXAMPLE_TRACE("publish failed, res = %d", res);
HAL_Free(topic);
return -1;
}
HAL_Free(topic);
return 0;
}
static void example_event_handle(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg)
{
EXAMPLE_TRACE("msg->event_type : %d", msg->event_type);
}
static void mqtt_example_main(void *parameter)
{
void *pclient = NULL;
int res = 0;
int loop_cnt = 0;
iotx_mqtt_param_t mqtt_params;
HAL_GetProductKey(DEMO_PRODUCT_KEY);
HAL_GetDeviceName(DEMO_DEVICE_NAME);
HAL_GetDeviceSecret(DEMO_DEVICE_SECRET);
EXAMPLE_TRACE("mqtt example");
memset(&mqtt_params, 0x0, sizeof(mqtt_params));
mqtt_params.handle_event.h_fp = example_event_handle;
pclient = IOT_MQTT_Construct(&mqtt_params);
if (NULL == pclient)
{
EXAMPLE_TRACE("MQTT construct failed");
return;
}
res = example_subscribe(pclient);
if (res < 0)
{
IOT_MQTT_Destroy(&pclient);
return;
}
while (1)
{
if (0 == loop_cnt % 20)
{
example_publish(pclient);
}
IOT_MQTT_Yield(pclient, 200);
loop_cnt += 1;
}
return;
}
#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 4096
#define THREAD_TIMESLICE 5
rt_thread_t MQTT_Thread = RT_NULL;
rt_thread_t Snake_Thread = RT_NULL;
void ath_init(void)
{
// 初始化设备
Dev = aht10_init(AHT10_I2C_BUS);
if (Dev == RT_NULL)
{
rt_kprintf("AHT10_init Fail");
return;
}
}
void mqt_init(void)
{
MQTT_Thread = rt_thread_create("MTQQ_Thread", mqtt_example_main, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
if (MQTT_Thread != RT_NULL)
{
rt_thread_startup(MQTT_Thread);
}
else
{
rt_kprintf("MQTT Thread Create Failed!\n");
}
}
int ap3_init(void)
{
const char *i2c_bus_name = "i2c2";
dev = ap3216c_init(i2c_bus_name);
return 0;
}
void snk_init(void)
{
Snake_Thread = rt_thread_create("Snake_Thread", snake_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
if (Snake_Thread != RT_NULL)
{
rt_thread_startup(Snake_Thread);
}
else
{
rt_kprintf("Snake Thread Create Failed!\n");
}
}
MSH_CMD_EXPORT_ALIAS(snk_init, snake, "snake game");
// void i20_init(void)
// {
// const char* i2c_bus_name = "i2c2";
// icm20608_init(i2c_bus_name)
// return 0;
// }
void my_project(void)
{
ath_init();
mqt_init();
ap3_init();
}
MSH_CMD_EXPORT_ALIAS(my_project, myproject, run my project);

116
dayandnight/mysnake.c Normal file
View File

@ -0,0 +1,116 @@
#include <stdio.h>
#include <rtthread.h>
#include <stdbool.h>
#include "my_func.h"
#include "mysnake.h"
#include <time.h>
#include <rtatomic.h>
#define LCD_MAX 240
#define SNAKE_SIZE 20
#define SNAKE_MAX LCD_MAX / SNAKE_SIZE
rt_atomic_t now_direction = 3;
rt_atomic_t snake_pressed = 0;
extern rt_atomic_t page_chosen;
int snake_max = SNAKE_MAX * 3;
int snake_len = 3;
// bool snake_table[SNAKE_MAX][SNAKE_MAX] = {0};
// struct My_snake
// {
// int x;
// int y;
// }snake_list[SNAKE_MAX*SNAKE_MAX] = {0};
// /* rt_event_t 是指向事件结构体的指针类型 */
// typedef struct My_snake* my_snake_t;
void snake_entry(void *parameter)
{
system("irq");
time_t t;
/* 初始化随机数发生器 */
srand((unsigned)time(&t));
int snake_list[SNAKE_MAX + 1][2] = {0};
int snake_direction[4][2] = {{0, -1}, {-1, 0}, {0, 1}, {1, 0}}; // 上,左,下,右
int snake_food[2];
bool food_flag = false;
char snake_dirshow[4][7] = {"upup", "left", "down", "rigt"};
char tmp[10];
int snake_head = 2, snake_tail = 0; // 蛇头,蛇尾
snake_list[1][0] = SNAKE_MAX / 2;
snake_list[1][1] = SNAKE_MAX / 2;
snake_list[0][0] = snake_list[1][0] - 1;
snake_list[0][1] = snake_list[1][1];
snake_list[2][0] = snake_list[1][0] + 1;
snake_list[2][1] = snake_list[1][1];
// snake_table[snake_list[0][0]][snake_list[0][1]] = 1;
// snake_table[snake_list[1][0]][snake_list[1][1]] = 1;
// snake_table[snake_list[2][0]][snake_list[2][1]] = 1;
snake_address(snake_list[0][0], snake_list[0][1], SNAKE_SIZE, BLACK);
snake_address(snake_list[1][0], snake_list[1][1], SNAKE_SIZE, BLACK);
snake_address(snake_list[2][0], snake_list[2][1], SNAKE_SIZE, BLACK);
snake_food[0] = rand() % SNAKE_MAX;
snake_food[1] = rand() % SNAKE_MAX;
snake_address(snake_food[0], snake_food[1], SNAKE_SIZE, GREEN);
int new_head_x = 0, new_head_y = 0;
int new_direction = 0;
while (1)
{
if (page_chosen == 1)
{
if (!snake_pressed)
{
// 50%的概率保持当前方向20%的概率随机改变方向
if (rand() % 100 < 50)
{
new_direction = rand() % 3;
now_direction = (now_direction + 3 + new_direction) % 4; // 防止反向,走回头路
}
}
else
{
rt_atomic_add(&snake_pressed, -1);
}
new_head_x = (snake_list[snake_head][0] + snake_direction[now_direction][0] + SNAKE_MAX) % (SNAKE_MAX);
new_head_y = (snake_list[snake_head][1] + snake_direction[now_direction][1] + SNAKE_MAX) % (SNAKE_MAX);
sprintf(tmp, "(%d,%d)", new_head_x, new_head_y);
// rt_kprintf("head:%d,%d\n", snake_list[snake_head][0], snake_list[snake_head][1]);
lcd_show_string(20, 20, 16, snake_dirshow[now_direction]);
lcd_show_string(20 + 16 * 4, 20, 16, tmp);
snake_address(new_head_x, new_head_y, SNAKE_SIZE, BLACK);
if (new_head_x == snake_food[0] && new_head_y == snake_food[1])
{
snake_food[0] = rand() % SNAKE_MAX;
snake_food[1] = rand() % SNAKE_MAX;
snake_address(snake_food[0], snake_food[1], SNAKE_SIZE, GREEN);
snake_len++;
sprintf(tmp, "%d", snake_len);
lcd_show_string(100, 105, 32, tmp);
// 防止蛇咬尾出现bug
if (snake_len >= SNAKE_MAX)
{
snake_address(snake_list[snake_tail][0], snake_list[snake_tail][1], SNAKE_SIZE, WHITE);
snake_tail = (snake_tail + 1) % (SNAKE_MAX);
}
}
else
{
if (snake_list[snake_tail][0] == snake_food[0] && snake_list[snake_tail][1] == snake_food[1])
{
}
else
{
snake_address(snake_list[snake_tail][0], snake_list[snake_tail][1], SNAKE_SIZE, WHITE);
}
snake_tail = (snake_tail + 1) % (SNAKE_MAX);
}
snake_head = (snake_head + 1) % (SNAKE_MAX);
snake_list[snake_head][0] = new_head_x;
snake_list[snake_head][1] = new_head_y;
rt_thread_mdelay(900);
}
}
}

6
dayandnight/mysnake.h Normal file
View File

@ -0,0 +1,6 @@
#include <stdio.h>
#include <rtthread.h>
#include <stdbool.h>
#include "my_func.h"
void snake_entry(void *parameter);

8
dayandnight/note.md Normal file
View File

@ -0,0 +1,8 @@
### 使能了sd card
![alt text](image-2.png)
结果
![alt text](image.png)
关了就好了
![alt text](image-1.png)
### 开了soft rtc
![alt text](image-3.png)

View File

@ -131,6 +131,8 @@
#define RT_USING_I2C
#define RT_USING_I2C_BITOPS
#define RT_USING_PWM
#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
@ -274,6 +276,7 @@
#define RT_USING_ULOG
#define ULOG_OUTPUT_LVL_D
#define ULOG_OUTPUT_LVL 7
#define ULOG_USING_ISR_LOG
#define ULOG_ASSERT_ENABLE
#define ULOG_LINE_BUF_SIZE 128
@ -329,6 +332,16 @@
/* end of CYW43439 WiFi */
/* end of Wi-Fi */
#define PKG_USING_NETUTILS
#define PKG_NETUTILS_NTP
#define NTP_USING_AUTO_SYNC
#define NTP_AUTO_SYNC_FIRST_DELAY 30
#define NTP_AUTO_SYNC_PERIOD 3600
#define NETUTILS_NTP_HOSTNAME "cn.ntp.org.cn"
#define NETUTILS_NTP_HOSTNAME2 "ntp.rt-thread.org"
#define NETUTILS_NTP_HOSTNAME3 "edu.ntp.org.cn"
#define PKG_USING_NETUTILS_LATEST_VERSION
#define PKG_NETUTILS_VER_NUM 0x99999
/* IoT Cloud */
@ -404,6 +417,13 @@
/* LVGL: powerful and easy-to-use embedded GUI library */
#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_USING_DEMOS
#define PKG_LVGL_USING_V080311
#define PKG_LVGL_VER_NUM 0x080311
/* end of LVGL: powerful and easy-to-use embedded GUI library */
/* u8g2: a monochrome graphic library */
@ -468,6 +488,8 @@
#define PKG_USING_AHT10
#define PKG_USING_AHT10_LATEST_VERSION
#define PKG_USING_AP3216C
#define PKG_USING_AP3216C_LATEST_VERSION
#define PKG_USING_ICM20608
#define PKG_USING_ICM20608_LATEST_VERSION
/* end of sensors drivers */
@ -564,6 +586,12 @@
/* Onboard Peripheral Drivers */
#define BSP_USING_USB_TO_USART
#define BSP_USING_RS485
/* set rts pin number */
#define BSP_RS485_RTS_PIN 104
#define RS485_UART_DEVICE_NAME "uart6"
#define BSP_USING_SRAM
#define BSP_USING_ONBOARD_LCD
#define BSP_USING_ONBOARD_LCD_PWM_BL
@ -574,6 +602,7 @@
#define BSP_USING_FAL
#define BSP_USING_RW007_WLAN
#define BSP_USING_AHT21
#define BSP_USING_AP3216C
#define BSP_USING_ICM20608
/* end of Onboard Peripheral Drivers */
@ -582,7 +611,10 @@
#define BSP_USING_GPIO
#define BSP_USING_UART
#define BSP_USING_UART1
#define BSP_USING_UART6
#define BSP_USING_PWM
#define BSP_USING_PWM3
#define BSP_USING_PWM3_CH2
#define BSP_USING_PWM14
#define BSP_USING_PWM14_CH1
#define BSP_USING_ON_CHIP_FLASH