查看: 9811|回复: 2

[分享] 逐飞科技LPC55S69开源库发布及简介

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3931

    主题

    7551

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    40106
    最后登录
    2025-9-1
    发表于 2020-11-17 18:14:01 | 显示全部楼层 |阅读模式
    逐飞科技LPC55S69开源库发布及简介

    各位朋友好,距离上次20天备战智能车专辑连载结束后,逐飞科技已经有一个多月没在公众号上更新内容了,但其实我们没闲着,为了生存嘛,所以今天又给玩儿MCU、玩儿嵌入式开发的各位带了点东西来分享:逐飞基于LPC55S69的开源库发布,同时也带来了LPC55S69的特价核心板和基于LPC55S69的特价IoT开发板,现在已经可以通过逐飞科技淘宝店下单购买了(PS:活动价低到超乎你的想象),进入逐飞科技淘宝店后店内搜索LPC,即可找到相关产品,希望大家喜欢。
    11.png
    可能有朋友会问,为什么是LPC55S69呢,为什么今天带来的东西能做到这么低的价格呢,这就得感谢NXP原厂的支持了,感谢NXP相关领导及工程师的信任,把LPC系列芯片的推广的任务分派了一些给我们这样一个小团队,有了原厂的推广及技术支持,我们也就放心的开启了这个项目,并且基于LPC系列芯片做了一些东西出来,希望能对NXP的LPC系列芯片推广帮上忙,也希望大家能认可逐飞科技这个草根团队基于LPC系列芯片精心制作的硬件产品和软件开源资料。关于IoT开发板的相关介绍会在“恩智浦MCU加油站”及恩智浦社区进行官方推荐,所以本文只涉及到了IoT开发板的一些图片,没有详细介绍,欢迎大家关注“恩智浦MCU加油站”及恩智浦社区,今天的LPC开源库推荐算是一个预热。

    一、逐飞LPC55S69开源库发布

    今天的主要内容是“逐飞LPC55S69开源库”发布及简介,如下图所示,该项目已经开源到Gitee,需要的朋友们可以直接下载使用了:
    12.png
    附上Gitee开源链接:https://gitee.com/seekfree/LPC55S69_Library

    二、逐飞LPC55S69开源库简介

    该开源库是基于NXP官方SDK进行二次开发,封装常用接口,方便使用与学习开发的一个开源项目。主要针对LPC55S69核心板<以下简称核心板>进行更新优化。


    简介将从开源库的目录结构开始,为您讲解整个开源库的结构,与详细的使用示范。

    目录结构图
    13.png
    2.1、【文档】说明书 芯片手册等


    该目录下包含开源库项目的说明文档、核心板的说明书以及官方的芯片文档。


    2.2、example_project


    该目录下包含开源库项目的例程,请注意本库例程并不包括USB以及SD-Card部分,相关例程请参考SDK。


    本开源库统一在该目录下放置Demo工程,Demo工程中不包含完整的开源库,用户工程可以在coreboard_user_project_part目录下新建或者直接使用该目录下样板工程进行修改。包含路径为相对路径,详情请参考各个示例工程中的包含路径设置。开源库目录下也包含一个样板空工程,同样可以作为模板使用(区别见1.3.4.user_project_demo)。


    2.2.1、xx_drivers_example


    该目录下包含芯片外设驱动的例程,供学习与参考使用。


    2.2.2、xx_peripheral_example


    该目录下包含了一些常用的传感器的例程,当前已经支持WIFI模块ESP8266、陀螺仪模块MPU6050、气压计模块MS5611、温湿度模块SHT31、TOF激光测距模块VL53L0X、以及2.4寸ILI9341芯片TFT屏幕搭配FTF6336的触摸屏。


    2.2.3、xx_project_part


    该目录下包含了开源库的一个示例工程,是使用核心搭配已有驱动传感器外设作为硬件平台,调用开源库接口实现的一个示例。


    2.2.4、xx_user_project_example


    该目录下放置用户程序,我们在其中放置一个样板工程,是一个添加了开源库的空工程。
    14.png
    2.3、Seekfree_LPC55SXX_Opensource_Library
    2.3.1、55S69_SDK


    该目录下包含LPC55S69的官方SDK,整个IOT开源项目基于官方SDK进行二次开发,用户亦可参考BSP进行自拟定的个性开发。如若想要替换SDK版本,只需要将该文件下对应的文件替换成您所需要的SDK版本的文件即可。


    2.3.2、RT_Thread


    该目录下包含V4.0.3版本的RT-Thread OS源码,包含完整版的RTOS与相关组件。当前RT-Thread暂时并不支持Cortex M-33双核移植,当前使用的移植文件是基于Cortex M-4的单核文件移植,只提供core 0的单核RT-Thread移植。并且使用RT-Thread OS时请注意使用的启动文件(.s)不支持V6编译,详细实现请参考例程。


    2.3.3、seekfree_ali_mqtt


    该目录下包含针对于ALI云服务器的MQTT协议实现的对接协议,可供参考与学习。


    2.3.4、user_project_demo


    该目录下是一个空的样板工程,与example_project目录下工程有所区别,包含路径为相对路径,所以包含路径设置不一样。


    2.3.5、seekfree_drives_Library


    该目录下的内容为该开源库的核心内容,由逐飞科技精心编写而成,是基于NXP官方SDK进行二次开发,将繁琐结构体与接口操作的调用封装为简明的一键化接口,为大家提供便捷的常用函数库,详情请参考源码及注释。
    board
    该目录下是关于时钟配置初始化的配置文件。
    drivers
    该目录下是基于SDK进行的外设二次封装接口,简化用户调用过程,简化操作流程。


    seekfree_peripheral


    该目录下是基于开源库进行编写的外设驱动文件,可直接驱动对应的外设模块进行工作。


    2.3.6、doc


    该目录是开源库的版本等相关文件的存放目录。
    16.png
    三、seekfree_drives_Library的调用方式示例

    3.1、drivers的接口调用


    我们以GPIO初始化为例子进行讲解,我们提供丰富的接口方式,在满足用户简化操作的同时也预留足够的DIY空间。下列代码示例为一键式初始化GPIO管脚,只需输入GPIO的组别、编号与方向即可完成初始化。

    1. //-----------------------------------------------------------------------------
    2. //  @brief      端口管脚 GPIO 功能初始化  
    3. //  @param      group_index   管脚组别  
    4. //  @param      pin_index       管脚索引  
    5. //  @param      dir               管脚方向  
    6. //  Sample usage:   zf_gpio_default_init( GPIO0, PIN00, IOCON_PIO_DIR_OUT);  
    7. //-----------------------------------------------------------------------------
    8. void zf_gpio_default_init (group_index _list group_index, pin_index_list pin_index,iocon_pio_dir_list dir)
    9. {  
    10.     pin_param_t config;  
    11.     zf_gpio_get_default_config (&config);  
    12.     IOCON->PIO [group_index] [pin_index] = (config.pin_config & 0x000007FF);  
    13.   
    14.     // 设置方向  
    15.     GPIO->DIR [group_index] |= ((dir && 0x01) << pin_index);
    16.   
    17.     if(pin_side == GPIO1)  
    18.         CLOCK_EnableClock(kCLOCK_Gpio1);                // 开启 GPIO1 时钟  
    19.     else  
    20.         CLOCK_EnableClock(kCLOCK_Gpio0);                // 开启 GPIO0 时钟  
    21. }
    复制代码
    为保证用户DIY需求,我们预留了对应的接口进行拓展,下图为获取默认GPIO设置。
    1. //----------------------------------------------------------------------------
    2. //  @brief      端口管脚 GPIO 功能获取默认配置  
    3. //  @param      config          管脚配置结构体  
    4. //  Sample usage:    zf_gpio_get_default_config (config);  
    5. //----------------------------------------------------------------------------
    6. void zf_gpio_get_default_config (pin_param_t *config)  
    7. {  
    8.     // 默认设置GPIO  
    9.     config->param_bit.pin_param_func      = PIN_FUNC0;  
    10.     // 默认设置悬空  
    11.     config->param_bit.pin_param_mode    = PIN_MODE_INACTIVE;  
    12.     // 默认设置标准速率  
    13.     config->param_bit.pin_param_slew      = PIN_SLEW_STANDARD;  
    14.     // 默认设置禁止反相  
    15.     config->param_bit.pin_param_invert    = PIN_INVERT_DISABLED;  
    16.     // 默认设置数字模式  
    17.     config->param_bit.pin_param_digimode  = PIN_DIGIMODE_ENABLED;  
    18.     // 默认设置禁止开漏  
    19.     config->param_bit.pin_param_od      = PIN_OD_DISABLED;  
    20.     // 默认设置禁止模拟模式  
    21.     config->param_bit.pin_param_asw      = PIN_ASW_DISABLED;  
    22. }
    复制代码
    通过获取默认设置后,可以通过调用参数修改接口或者直接对结构体进行赋值来修改GPIO的设置参数,从而达到满足用户高度自定义的接口自由性,参数修改接口如下:

    1. //----------------------------------------------------------------------------
    2. //  @brief      端口管脚参数设置  
    3. //  @param      config          参数结构体  
    4. //  @param      pin_param_list  参数选项  
    5. //  @param      pin_config      参数值  
    6. //  Sample usage:               zf_pin_param_set( config, PIN_PARAM_MODE, IOCON_PIO_MODE_INACTIVE);  
    7. //----------------------------------------------------------------------------
    8. void zf_pin_param_set (pin_param_t *config,pin_param_list param_index,uint32_t pin_config)
    9. {  
    10.     switch(param_index)  
    11.     {  
    12.         case PIN_PARAM_FUNC:  
    13.          // 设置引脚内部工作模式  
    14.             config->param_bit.pin_param_func      = (pin_func_list)pin_config;
    15.             break;  
    16.         case PIN_PARAM_MODE:  
    17.          // 设置引脚内部工作模式  
    18.             config->param_bit.pin_param_mode     = (pin_mode_list)pin_config;
    19.             break;  
    20.         case PIN_PARAM_SLEW:  
    21.           // 设置引脚速率  
    22.             config->param_bit.pin_param_slew     = (pin_slew_list)pin_config;
    23.             break;  
    24.         case PIN_PARAM_INVERT:  
    25.     // 设置反相设置  
    26.             config->param_bit.pin_param_invert       = (pin_invert_list)pin_config;
    27.             break;  
    28.         case PIN_PARAM_DIGIMODE:  
    29.   // 设置数字模式使能  
    30.             config->param_bit.pin_param_digimode = (pin_digimode_list)pin_config;
    31.             break;  
    32.         case PIN_PARAM_OD:   
    33. // 设置开漏模式使能  
    34.             config->param_bit.pin_param_od           = (pin_od_list)pin_config;  
    35.             break;  
    36.         case PIN_PARAM_ASW:  
    37. // 设置ADC输入使能 A type 引脚才有  
    38.             config->param_bit.pin_param_asw          = (pin_asw_list)pin_config;
    39.             break;  
    40.         default:  
    41.             break;  
    42.     }  
    43. }
    复制代码

    通过调用上述两个接口后,完成了参数的个性化设置,最后调用初始化接口如下如图:

    1. //----------------------------------------------------------------------------
    2. //  @brief      端口管脚 GPIO 功能初始化  
    3. //  @param      group_index        管脚组别  
    4. //  @param      pin_index       管脚索引  
    5. //  @param      config          管脚配置  
    6. //  @param      dir             管脚方向  
    7. //  Sample usage:               zf_gpio_init ( GPIO0,PIN00, config,IOCON_PIO_DIR_OUT);
    8. //----------------------------------------------------------------------------
    9. void zf_gpio_init (group_index _list group_index, pin_index_list pin_index, pin_param_t *config, iocon_pio_dir_list dir)  
    10. {  
    11.     IOCON->PIO [group_index] [pin_index] = (config->pin_config & 0x000007FF);  
    12.     // 设置方向  
    13.     GPIO->DIR [group_index] |= ((dir && 0x01) << pin_index);  
    14.     if(pin_side == GPIO1)  
    15.         CLOCK_EnableClock(kCLOCK_Gpio1);   // 开启 GPIO1 时钟
    16.     else  
    17.         CLOCK_EnableClock(kCLOCK_Gpio0);    // 开启 GPIO0 时钟  
    18. }
    复制代码
    至此完成整个DIY定义初始化GPIO的流程,整个过程为新手入门或者简化开发、学习流程服务,用户可参考我们的注释与代码进行完全的自由开发。


    在整个外设调用接口封装系统中,我们添加了完备的注释与必要的说明性文字,有较高的代码可阅读性与复用性,推荐参考例程结合注释进行学习。
    17.png
    3.2、seekfree_peripheral的接口调用


    外设部分为了兼容我们以mpu6050外设模块驱动为例子进行讲解,下如为mpu6050的初始化接口,只需要根据使用的对应的Flex COMM接口输入参数就可以了,内部会完成片上接口的初始化,如果是从IOT的接口进行调用配合IOT主板使用可以不需要关心管脚初始化,IOT接口中会根据接口参数自动完成管脚初始化。
    1. //----------------------------------------------------------------------------
    2. //  @brief      初始化MPU6050  
    3. //  @param      Index           使用的 FlexCOMM 端口  
    4. //  @return     void                     
    5. //  @since      v1.0  
    6. //----------------------------------------------------------------------------
    7. #ifdef IOT_BOARD  
    8. void mpu6050_init(iot_flexcomm_index_list Index)  
    9. #else  
    10. void mpu6050_init(flexcomm_index_list Index)  
    11. #endif  
    12. {  
    13.     // 定义一个 Flex COMM 配置结构体  
    14.     i2c_master_config_t iic_mpu6050_config;  
    15.     // 初始化 MPU6050 FlexCOMM 接口部分  
    16.     // 获取默认设置  
    17.     zf_iic_master_get_default_config( &iic_mpu6050_config);  
    18. #ifdef IOT_BOARD  
    19.     // 初始化 IOT 主板上 FlexCOMM-USART 接口  
    20.     iot_flexcomm_init(Index, FLEX_COMM_IIC_MASTER, &iic_mpu6050_config);  
    21. #else  
    22.     zf_flexcomm_init(Index, FLEX_COMM_IIC_MASTER, &iic_mpu6050_config);  
    23. #endif  
    24.     //上电延时  
    25.     delay_ms(100);  
    26.   
    27.     mpu6050_self1_check(Index);  
    28.     //解除休眠状态  
    29.     zf_iic_write_reg(Index, MPU6050_DEV_ADDR, PWR_MGMT_1,     0x00);  
    30.     //125HZ采样率  
    31.     zf_iic_write_reg(Index, MPU6050_DEV_ADDR, SMPLRT_DIV,     0x07);  
    32.     zf_iic_write_reg(Index, MPU6050_DEV_ADDR, MPU6050_CONFIG, 0x04);  
    33.     zf_iic_write_reg(Index, MPU6050_DEV_ADDR, GYRO_CONFIG,    0x18);  
    34.     zf_iic_write_reg(Index, MPU6050_DEV_ADDR, ACCEL_CONFIG,   0x10);  
    35.     zf_iic_write_reg(Index, MPU6050_DEV_ADDR, User_Control,   0x00);  
    36.     zf_iic_write_reg(Index, MPU6050_DEV_ADDR, INT_PIN_CFG,    0x02);  
    37. }
    复制代码
    后续的读取也是直接输入接口参数调用即可,为什么这里还要输入选用的接口的Index呢?因为考虑到如果用户将这套方案真正应用到IOT方案上,那么就可能存在接入好几个相同的传感器来检测不同节点的状态,那么就可以直接使用这一套驱动而不用再费心了。

    1. //----------------------------------------------------------------------------
    2. //  @brief      获取MPU6050陀螺仪数据  
    3. //  @param      Index           使用的 FlexCOMM 端口  
    4. //  @return     void  
    5. //  @since      v1.0  
    6. //  Sample usage:               执行该函数后,直接查看对应的变量即可  
    7. //----------------------------------------------------------------------------
    8. void mpu6050_get_gyro(flexcomm_index_list Index)  
    9. {  
    10.     uint8_t dat[6];  
    11.   
    12.     zf_iic_read_reg(Index, MPU6050_DEV_ADDR, GYRO_XOUT_H, dat, 6);  
    13.     mpu_gyro_x = (int16_t)(((uint16_t)dat[0]<<8 | dat[1]));  
    14.     mpu_gyro_y = (int16_t)(((uint16_t)dat[2]<<8 | dat[3]));  
    15.     mpu_gyro_z = (int16_t)(((uint16_t)dat[4]<<8 | dat[5]));  
    16. }
    复制代码
    19.png
    四、seekfree_ali_mqtt的云端连接讲解


    本部分讲解使用RT-Thread OS搭配MQTT协议通过ESP8266 WIFI模块进行针对ALI云连接,仅供参考。


    本部分参考《MQTT 协议 3.1.1》进行编程,建议以该文档为标准进行设计参考,下方示例中三元组<< span="">productkey,devicename,devicesecre>为我们测试时使用,请各位在使用本教程时将其替换为自己设备的三元组,否则无法对接到自己的设备。


    其次,本部分仅进行了MQTT协议的部分封装接口的设计,如有特殊个性化设计需求,请详细参考《MQTT 协议 3.1.1》进行设计,本部分仅作参考使用,且本部分不包括服务器JSON字符串处理,例程中仅有部分特定提取解析,关于JSON解析请参考JSON格式相关规则。


    4.1、mqtt_aliyun_init的接口调用


    MQTT接口部分我们封装了PUBLISH、SUBSCRIBE、UNSUBSCRIBE、PINGREQ几个控制报文,CONNECT报文与TCP建立连接一同封装在mqtt_aliyun_init接口函数中。


    关于连接服务器建立与设备的对接如同下方代码示例,只需要将ALI云端设备的三元组输入到MQTT部分的接口,调用mqtt_aliyun_init接口函数即可。
    1. // 新建一个参数结构体
    2. aliyun_device_message_t aliyun_init_t;
    3. // 指定使用的 Flexcomm  
    4. aliyun_init_t.Index = IOT_FLEXCOMM_0;
    5. // 写入 productkey
    6. memset(aliyun_init_t.productkey, 0, 32);
    7. memcpy(aliyun_init_t.productkey, "a13WwZVmHl6", 11);
    8. aliyun_init_t.productkey_len = 11;
    9. // 写入 devicename
    10. memset(aliyun_init_t.devicename, 0, 32);
    11. memcpy(aliyun_init_t.devicename, "device_demo", 11);
    12. aliyun_init_t.devicename_len = 11;
    13. // 写入 devicesecre
    14. memset(aliyun_init_t.devicesecre, 0, 32);
    15. memcpy(aliyun_init_t.devicesecre, "af27d6b2368ce1a10fa95f7762d414a6", 32);
    16. aliyun_init_t.devicesecre_len = 32;

    17. rt_kprintf("aliyun_init start.\r\n");                                               // RTT 控制台输出 log  
    18. if(!mqtt_aliyun_init(&aliyun_init_t))                                         // 连接ALI云并对接设备
    19. {
    20.     rt_kprintf("aliyun_init error.\r\n");                                          // RTT 控制台输出 log  
    21.     while(1);  
    22. }
    23. rt_kprintf("aliyun_init success.\r\n");     
    复制代码
    关于三元组信息,可在阿里云物联网平台进行查看,本文档中给出的是我们测试例程所用的设备三元组,请各位在使用时替换为自己的设备三元组。
    20.png
    请注意:我们的例程中,使用的是生活物联网平台创建的产品,产品类目为插座,详情见《关于ALI云例程调试的说明书》文档,创建设备后,请注意设备属性是否与例程中相符,否则可能需要对例程进行修改才可以正常运行!
    21.png
    设备属性在物联网平台->设备管理->产品->产品详情->功能定义下查看,我们的程序示例中使用的属性标识符为PowerSwtich!


    如果这里与本文档不符,请修改例程中识别的属性,详情请参考《关于ALI云例程调试的说明书》文档。


    4.2、mqtt_pingreq_pack的接口调用


    该接口为心跳包发送接口,无需输入参数,在完成了ALI云对接后可直接调用,调用后返回是否完成PINGREQ包的发送,如果发送失败可能是设备被服务器踢掉或者网络波动,请再发送几次PINGREQ包,如果依旧发送失败则可能与服务器断开连接或者网络出现故障。
    1. /----------------------------------------------------------------------------
    2. //  @brief      设备心跳 PINGREQ 包发送函数  
    3. //  @return     bool            PINGREQ是否成功  
    4. //  Sample usage:               mqtt_pingreq_pack();  
    5. //----------------------------------------------------------------------------
    6. bool mqtt_pingreq_pack (void)
    复制代码
    4.3、mqtt_subscribe_pack的接口调用


    该接口为订阅对应Topic的接口,需要输入Topic以及长度与此次订阅的报文标识符,返回是否订阅成功。这里只执行一条Topic订阅,从发送订阅消息到收到订阅回复,所以报文标识符可以都填一个值。如果需要同时并发多个订阅Topic,需要自行构建接口。
    1. //----------------------------------------------------------------------------
    2. //  @brief      订阅 topic  
    3. //  @param      topic           目标 topic  
    4. //  @param      topic_len       topic 长度  
    5. //  @param      flag            报文标识符  
    6. //  @return     bool            订阅是否成功  
    7. //  Sample usage:               mqtt_subscribe_pack(&topic, 55, 0x01);  
    8. //----------------------------------------------------------------------------
    9. bool mqtt_subscribe_pack (char *topic, uint8_t topic_len, uint8_t flag)  
    复制代码
    4.4、mqtt_unsubscribe_pack的接口调用


    该接口对应取消订阅,参数与介绍与订阅类似。
    1. //----------------------------------------------------------------------------
    2. //  @brief      取消订阅 topic  
    3. //  @param      topic           目标 topic  
    4. //  @param      topic_len       topic 长度  
    5. //  @param      flag            报文标识符  
    6. //  @return     bool            取消是否成功  
    7. //  Sample usage:               mqtt_unsubscribe_pack(&topic, 55, 0x01);  
    8. //----------------------------------------------------------------------------
    9. bool mqtt_unsubscribe_pack (char *topic, uint8_t topic_len, uint8_t flag)
    复制代码
    4.5、mqtt_publish_pack的接口调用


    该接口是向指定Topic推送消息使用,需要输入Topic以及长度与消息已经消息长度,请注意ALI云常用为JSON字符消息格式,请按照相关规则进行消息编辑。

    1. //----------------------------------------------------------------------------
    2. //  @brief      推送消息  
    3. //  @param      topic           目标 topic  
    4. //  @param      topic_len       topic 长度  
    5. //  @param      message         json 消息 这个需要自行根据设备进行解析  
    6. //  @param      message_len     消息长度  
    7. //  @return     bool            推送是否成功  
    8. //  Sample usage:               mqtt_publish_pack(&topic, topic_len, &message, message_len);  
    9. //----------------------------------------------------------------------------
    10. bool mqtt_publish_pack (char *topic, uint8_t topic_len, char *message, uint16_t message_len)  
    复制代码
    22.png
    五、结束语

    截止到目前为止,逐飞已经在gitee上发布了8个开源项目,对其他开源项目感兴趣的朋友们也可通过此链接:https://gitee.com/seekfree/projects了解到具体内容,感谢您的阅读,本期逐飞LPC55S69开源库介绍就到这里了,在使用过程中遇到相关疑问或有更好的建议欢迎留言告诉我们。


    最后,关于LPC系列的产品,不仅仅有已经在逐飞淘宝店上架LPC55S69核心板和基于LPC55S69的 IoT开发板,还有一款基于LPC845制作的多功能传感器模拟模块,可以模拟多种传感器的数据输出方式,这个模拟模块主要用于大家调试学习使用,可以替代多款传感器的调试学习,对于做设计的嵌入式工程师来说应该是一款神器了,后面会推出一篇专门的介绍来介绍这个神器的模块,欢迎关注,最最后,逐飞还有一款老产品LPC54606核心板,大家应该比较熟悉了,就不再赘述,至此,关于NXP LPC系列芯片我们已经有了4款主要产品,希望大家喜欢。下期再见!
    23.png
    基于LPC845的传感器模拟模块



    qiandao qiandao
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 18:18
  • 签到天数: 869 天

    连续签到: 1 天

    [LV.10]以坛为家III

    69

    主题

    3280

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    10410
    最后登录
    2025-8-31
    发表于 2020-11-17 21:50:09 | 显示全部楼层
    好东西,顶一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-6-17 10:46
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    帖子

    0

    注册会员

    Rank: 2

    积分
    106
    最后登录
    2024-12-20
    发表于 2022-5-2 09:31:06 | 显示全部楼层
    本帖最后由 小二郎666 于 2022-5-2 11:31 编辑

    666666666
    今天天气不错!签到!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-2 05:50 , Processed in 0.093792 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表