为什么人不会飞| 活检是什么检查| 脖子后面疼是什么原因| 属鼠男和什么属相最配| 第一次查怀孕挂什么科| 便秘是什么症状| 痞气是什么意思| 烤肉筋的肉是什么肉| 羊水栓塞是什么意思| 大拇指疼是什么原因| 牛大力有什么功效| 人体最大器官是什么| 自食其力是什么意思| 舌炎吃什么药效果最好| 望周知是什么意思| 为什么白带多| 缺硒有什么症状| 夏天适合养什么花| 武五行属什么| 浪琴手表什么档次| 指甲变黄是什么原因| 胃不好早餐吃什么好| 危机四伏是什么生肖| 英语四级是什么水平| 初吻是什么意思| 甲功三项是检查什么| 叶酸补什么| 舌苔厚白应该吃什么| 口子念什么| 嗓子痛吃什么药好| 尿酸高吃什么好| 生理盐水和食用盐水有什么区别| 维生素b12有什么作用| 辅酶q10什么时间吃好| 返祖现象什么意思| 寒湿重吃什么中成药| 什么的雪人| 天津市市长是什么级别| 庭字五行属什么| 三伏天什么意思| 过敏性鼻炎吃什么食物好| 前列腺炎吃什么药效果好见效快| 茧是什么意思| 佐匹克隆片是什么药| 什么人不能吃绿豆| 小鸟站在高压线上为什么不会触电| 眼睛经常充血是什么原因引起的| 什么是什么非| 润喉咙什么东西最合适| 人中长痘痘是什么原因| 梦见别人搬家预示什么| 宫内膜回声欠均匀是什么意思| 什么是音调| 只是女人容易一往情深是什么歌| 淤血是什么意思| 胆囊息肉是什么| 桑叶泡水喝有什么功效和作用| 凝血功能差是什么原因| 肋骨下面疼是什么原因| 饿了胃疼是什么原因| 鄙视是什么意思| cdfi未见明显血流信号是什么意思| 孕激素高会有什么影响| 肝囊肿是什么原因造成的| 吃避孕药对身体有什么影响| 月经来一点又不来了是什么原因| 争辩的近义词是什么| 卵泡刺激素是什么意思| 抑郁症挂什么科室| 人得猫癣用什么药| 夏季风寒感冒吃什么药| 乳腺增生什么意思| 2006属什么生肖| 玥字属于五行属什么| 三是什么意思| 争奇斗艳什么意思| 小麻雀吃什么| 丙五行属什么| 什么耳机比较好| 持之以恒是什么意思| 过氧化氢浓度阳性是什么意思| 什么啤酒劲最大| 孩子胃疼吃什么药| 转氨酶高是什么问题| 十一月份什么星座| 阿扎西是什么意思| a4纸可以折什么| 肺部纤维化是什么意思| 脸一边大一边小是什么原因| 尿液中有泡沫是什么原因| 什么空如洗| 腰疼看什么科| trendiano什么牌子| 大便隐血弱阳性是什么意思| bmi指数是什么| 缺钙吃什么| 冰雹是什么季节下的| 琋字五行属什么| my什么牌子| 牙周炎吃什么药| 甲亢查什么项目| 娘是什么意思| 臭虫怕什么东西| 千什么一发| 副司长是什么级别| 湿气重吃什么水果| 为什么喝牛奶会长痘| 梦见自己的衣服丢了是什么意思| lcp是什么意思| 30如狼40如虎是什么意思| 正常尿液是什么味道| 乐五行属性是什么| 胆碱酯酶偏高说明什么| NT是检查什么的| 1979年什么命| 家有蝙蝠是什么兆头| 窦性心律过缓是什么意思| as是什么材质| 吐血拉血是什么病的症状| 病假需要什么医院证明| 脑出血有什么后遗症| 肚子发胀是什么原因| 心与什么相表里| 69年出生属什么| 钙片什么时候吃最好| 多么什么| 老年人嘴唇发紫是什么原因| 青灰色是什么颜色| 违反禁令标志指示什么意思| as是什么病| 大健康是什么意思| 氯吡格雷是什么药| 烧烤烤什么好吃| 动手术后吃什么对伤口恢复比较快| 咳黄痰是什么原因| 白发缺少什么维生素| 大好河山是什么生肖| 舌苔发白吃什么药| 天天喝奶茶有什么危害| 作业是什么意思| 脑供血不足吃点什么药| 七月份有什么节日| 朱门是什么意思| cas号是什么| 吓得什么填空| aug是什么意思| 电视开不了机是什么原因| 霉菌性阴道炎是什么症状| 为什么去香港还要通行证| 腹泻是什么| 达字五行属什么| quest是什么车| 增大摩擦力的方法有什么| 喝酒对胃有什么伤害| 1924年属什么| 精液什么颜色| 发烧白细胞高是什么原因| 百什么齐什么| 辟谷可以吃什么| 什么的星空| 狗尾巴草有什么功效| 广东有什么城市| 头脑简单是什么生肖| 湿气重是什么原因引起的| 头重脚轻是什么生肖| 鹿象征什么寓意| 肾阴亏虚吃什么药| 白蛋白是什么| us什么意思| 予是什么意思| 什么人容易得癌症| 白鸡蛋是什么鸡下的蛋| 甲状腺弥漫性病变是什么意思| 什么体质容易高原反应| 言外之意什么意思| 体检应该挂什么科| vb是什么意思| 意蕴什么意思| 水瓶座后面是什么星座| 胃不好吃什么水果好| 女人吃知了有什么好处| 苹果醋有什么作用| 流水席是什么意思| 为什么梦不到死去的亲人| 珊五行属什么| 1893年属什么| 糖尿病人适合吃什么水果| naco是什么牌子| 什么是极差| 结婚前一天晚上的宴会叫什么| 弥漫什么意思| 什么人生病从来不看医生| 大同有什么好玩的地方| ln是什么| 全是什么意思| 结石挂什么科| 双侧骶髂关节致密性骨炎是什么病| blacklabel是什么牌子| 干预治疗是什么意思| 18kgp是什么意思| 郑州有什么好玩的| 七月份是什么季节| 雾化是治疗什么的| 骨盐量偏低代表什么| 什么是七情六欲| 孕妇熬夜对胎儿有什么影响| 南辕北辙的意思是什么| 蛋白尿是什么症状| 属兔的跟什么属相最配| 长红痣是什么原因| 什么情况下需要做造影| 充饥是什么意思| 过什么不什么| 雌二醇是什么意思| 犬和狗有什么区别| 镭射是什么意思| 绍兴本地人喝什么黄酒| 男士皮带什么品牌好| 蛞蝓是什么动物| 额头上长痘痘是什么原因引起的| 性欲是什么意思| sap是做什么的| 气血两亏是什么意思| 10月25日什么星座| tp是什么病毒| 肝功七项查的是什么| 主管药师是什么职称| 为什么不能拜女娲娘娘| 癫痫是什么原因引起的| 什么是蜘蛛痣图片| 癫痫病吃什么药最好| 9.7号是什么星座| 小儿惊痫是什么症状| 好奇害死猫是什么意思| 为什么家里会有隐翅虫| 老年人嘴唇发紫是什么原因| 胸疼什么原因| 为什么电脑| 龟头炎什么症状| 杀破狼是什么意思| 咳嗽有绿痰是什么原因| 寻常疣是什么样子图片| 长期缺铁性贫血会导致什么后果| 骨髓穿刺是检查什么病| 血窦是什么意思| 亚历山大王什么档次| 老赖什么意思| 地球是什么意思| daily什么意思| 腺肌瘤是什么病| 为什么男生喜欢女生叫爸爸| 为什么会缺乏维生素d| 跑完步头疼是为什么| colorful是什么牌子| 晴雨表是什么意思| 火山飘雪是什么菜| 来月经量少吃什么可以增加月经量| 射手座属于什么象星座| 峻字五行属什么| 山穷水尽疑无路是什么生肖| 梦见冬瓜是什么意思| 阿尔兹海默症是什么病| 豆浆喝多了有什么副作用| 什么湖什么海| 百度
打印
[RISC-V MCU 应用开发]

七旬老人掉入保健品会销陷阱:买下30万劣质产品

[复制链接]
492|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 点赞 于 2025-7-30 21:56 编辑

EEPROM(Electrically Erasable Programmable Read-Only Memory)即电可擦除可编程只读存储器,是一种可以通过电信号多次擦除和改写数据的非易失性存储器。它在断电后仍能保持存储的数据,广泛应用于需要灵活存储和修改少量关键信息的场景。
一、EEPROM 的核心特点
  • 非易失性
    断电后数据不会丢失,这是其与 RAM(随机存取存储器)的核心区别,适合存储需要长期保存的信息(如设备配置参数、校准数据等)。
  • 电可擦除与改写
    无需紫外线照射(不同于早期的 EPROM),可通过电信号直接擦除和写入数据,操作便捷,支持单字节或单页级别的擦写(部分型号)。
  • 擦写寿命有限
    通常有10 万至 100 万次的擦写寿命,多次擦写后可能出现数据错误,因此设计时需避免频繁对同一地址写入(可通过 “磨损均衡” 算法优化)。
  • 读写速度适中
    读取速度较快(与 ROM 接近),但写入速度较慢(需先擦除再写入,通常毫秒级),不适合高频数据更新场景。
  • 容量较小
    常见容量为几十字节到几兆字节(MB),远小于 Flash 存储器,适合存储少量关键数据(如设备序列号、用户设置等)。
二、EEPROM 的典型应用
  • 嵌入式系统:存储设备的启动配置、硬件参数(如传感器校准值)。
  • 消费电子:智能手表的用户设置、打印机的墨盒计数。
  • 汽车电子:存储车辆 VIN 码、故障码、里程数据等。
  • 工业控制:PLC(可编程逻辑控制器)的运行参数、设备状态记录。
三、AT24C32介绍

    EEPROM 存储器芯片型号非常多,我们今天使用的AT24C32就是其中比较常见的串行EEPROM 存储器芯片。它具有如下特点:
  • 存储容量:AT24C32 的存储容量为 32Kb,即 4096 字节,适合存储少量的配置信息、校准参数、设备标识等数据。
  • 工作电压:支持 2.7V 至 5.5V 的工作电压范围,部分版本也支持 1.8V 至 5.5V,能适应不同的供电环境。
  • 低功耗:在 5.5V 电压下,静态电流仅为 2μA,对于电池供电或能量采集系统尤为重要。
  • 串行接口:采用两线式串行接口(I2C)进行数据通信,只需要 SCL(串行时钟输入引脚)和 SDA(串行数据输入 / 输出引脚)两个接口,占用引脚少,适合资源受限的嵌入式系统或小型设备。
  • 数据保护:具有写保护引脚 WP,当 WP 引脚为高电平时,AT24C32 将无法写入数据,起到对数据的保护作用。
  • 页写模式:支持 32 字节的页写模式,部分页写操作也是允许的,提高了数据写入效率。
  • 高可靠性:耐久性达到 100 万次写入周期,数据保留时间长达 100 年,具有较高的稳定性和可靠性。
  • 多种封装形式:提供 8 引脚 JEDEC PDIP、8 引脚 JEDEC SOIC、8 引脚 EIAJ SOIC 和 8 引脚 TSSOP 等封装形式,满足不同应用场景的需求。



相关帖子

沙发
点赞|  楼主 | 2025-7-29 20:43 | 显示全部楼层
本帖最后由 点赞 于 2025-7-30 21:26 编辑

电路原理图


今天我使用的是一个同时集成了AT24C32和DS3231的模块。它们都使用I2C通讯,在这个模块上都挂在同一个I2C总线上,使用不同的地址来访问。其中AT24C32相关的原理图如下:



原理图上器件型号写的是AT24C02,实际模块上焊接的是AT24C32,它们pin2pin兼容,只是容量不同。
AT24C32具有三个地址配置引脚:A0/A1/A2。
在原理图上,这三个地址引脚默认是上拉状态,即器件的地址是7。当使用其他地址或多个AT24CXX都挂在同一个I2C总线上时,可以通过短接R2~R4给器件分配不同的地址。这个地址在后面的控制代码中会用到。


该模块上的I2C总线已经有上拉电阻,在控制板中该总线可以不再接上拉电阻。



板凳
点赞|  楼主 | 2025-7-29 20:45 | 显示全部楼层
本帖最后由 点赞 于 2025-7-30 21:30 编辑

HPM5361与MPU6050的连接:

使用的HPM5361开发板P1接口有两组I2C接口,这里使用I2C0接口,及PB03和PB02引脚。



这两个引脚,在开发板上已经有了10K的上拉电阻,使用的AT24C32模块上也有上拉电阻,这里可以共存,不需要特殊处理。
地板
点赞|  楼主 | 2025-7-29 20:49 | 显示全部楼层
本帖最后由 点赞 于 2025-7-30 21:38 编辑

工程创建及资源配置:
一、新建工程

打开RT-Thread Studio,在菜单选:文件-->新建-->RT-Thread 项目,在打开的“新建项目”选项卡,填写项目名称,选择“基于开发板”,其他选项默认,点“完成”按钮。



二、配置工程资源

双击工程下的“RT-Thread Setting”,打开RT-Thread Setting选项卡。
在软件包项目下,点“添加软件包”。





在打开的搜索页面搜索“at24”,在出现的项目中点“at24cxx“软件包的”添加“按钮。






在”软件包“标签页,配置at24cxx软件包:




在”组件“标签页打开”使用I2C设备驱动程序“




在”硬件“标签页,打开”Enable I2C“选项,并打开I2C0。





5
点赞|  楼主 | 2025-7-30 21:30 | 显示全部楼层
本帖最后由 点赞 于 2025-7-30 21:46 编辑

主要代码:
读寄存器:

static rt_err_t read_regs(at24cxx_device_t dev, rt_uint8_t len, rt_uint8_t *buf)
{
    struct rt_i2c_msg msgs;

    msgs.addr = AT24CXX_ADDR | dev->AddrInput;
    msgs.flags = RT_I2C_RD;
    msgs.buf = buf;
    msgs.len = len;

    if (rt_i2c_transfer(dev->i2c, &msgs, 1) == 1)
    {
        return RT_EOK;
    }
    else
    {
        return -RT_ERROR;
    }
}


读一个字节:
static uint8_t at24cxx_read_one_byte(at24cxx_device_t dev, uint16_t readAddr)
{
    rt_uint8_t buf[2];
    rt_uint8_t temp;
#if (PKG_AT24CXX_EE_TYPE > AT24C16)
    buf[0] = (uint8_t)(readAddr>>8);
    buf[1] = (uint8_t)readAddr;
    if (rt_i2c_master_send(dev->i2c, AT24CXX_ADDR | dev->AddrInput, RT_I2C_WR, buf, 2) == 0)
#else
    buf[0] = readAddr;
    if (rt_i2c_master_send(dev->i2c, AT24CXX_ADDR | dev->AddrInput, RT_I2C_WR, buf, 1) == 0)
#endif
    {
        return RT_ERROR;
    }
    read_regs(dev, 1, &temp);
    return temp;
}


写一个字节:
static rt_err_t at24cxx_write_one_byte(at24cxx_device_t dev, uint16_t writeAddr, uint8_t dataToWrite)
{
    rt_uint8_t buf[3];
#if (PKG_AT24CXX_EE_TYPE > AT24C16)
    buf[0] = (uint8_t)(writeAddr>>8);
    buf[1] = (uint8_t)writeAddr;
    buf[2] = dataToWrite;
    if (rt_i2c_master_send(dev->i2c, AT24CXX_ADDR | dev->AddrInput, RT_I2C_WR, buf, 3) == 3)
#else
    buf[0] = writeAddr; //cmd
    buf[1] = dataToWrite;
    //buf[2] = data[1];


    if (rt_i2c_master_send(dev->i2c, AT24CXX_ADDR | dev->AddrInput, RT_I2C_WR, buf, 2) == 2)
#endif
        return RT_EOK;
    else
        return -RT_ERROR;

}


读一页:
static rt_err_t at24cxx_read_page(at24cxx_device_t dev, uint32_t readAddr, uint8_t *pBuffer, uint16_t numToRead)
{
    struct rt_i2c_msg msgs[2];
    uint8_t AddrBuf[2];

    msgs[0].addr = AT24CXX_ADDR | dev->AddrInput;
    msgs[0].flags = RT_I2C_WR;

#if (PKG_AT24CXX_EE_TYPE > AT24C16)
    AddrBuf[0] = readAddr >> 8;
    AddrBuf[1] = readAddr;
    msgs[0].buf = AddrBuf;
    msgs[0].len = 2;
#else
    AddrBuf[0] = readAddr;
    msgs[0].buf = AddrBuf;
    msgs[0].len = 1;
#endif

    msgs[1].addr = AT24CXX_ADDR | dev->AddrInput;
    msgs[1].flags = RT_I2C_RD;
    msgs[1].buf = pBuffer;
    msgs[1].len = numToRead;

    if(rt_i2c_transfer(dev->i2c, msgs, 2) <= 0)
    {
        return RT_ERROR;
    }

    return RT_EOK;
}


写一页:
static rt_err_t at24cxx_write_page(at24cxx_device_t dev, uint32_t wirteAddr, uint8_t *pBuffer, uint16_t numToWrite)
{
    struct rt_i2c_msg msgs[2];
    uint8_t AddrBuf[2];

    msgs[0].addr = AT24CXX_ADDR | dev->AddrInput;
    msgs[0].flags = RT_I2C_WR;

#if (PKG_AT24CXX_EE_TYPE > AT24C16)
    AddrBuf[0] = (uint8_t)(wirteAddr>>8);
    AddrBuf[1] = (uint8_t)wirteAddr;
    msgs[0].buf = AddrBuf;
    msgs[0].len = 2;
#else
    AddrBuf[0] = wirteAddr;
    msgs[0].buf = AddrBuf;
    msgs[0].len = 1;
#endif

    msgs[1].addr = AT24CXX_ADDR | dev->AddrInput;
    msgs[1].flags = RT_I2C_WR | RT_I2C_NO_START;
    msgs[1].buf = pBuffer;
    msgs[1].len = numToWrite;

    if(rt_i2c_transfer(dev->i2c, msgs, 2) <= 0)
    {
        return RT_ERROR;
    }

    return RT_EOK;
}


通过在eeprom的最后一个字节,先写后读检查eeprom:
rt_err_t at24cxx_check(at24cxx_device_t dev)
{
    uint8_t temp;
    RT_ASSERT(dev);

    temp = at24cxx_read_one_byte(dev, AT24CXX_MAX_MEM_ADDRESS - 1);
    if (temp == 0x55) return RT_EOK;
    else
    {
        at24cxx_write_one_byte(dev, AT24CXX_MAX_MEM_ADDRESS - 1, 0x55);
        rt_thread_mdelay(EE_TWR);                 // wait 5ms befor next operation
        temp = at24cxx_read_one_byte(dev, AT24CXX_MAX_MEM_ADDRESS - 1);
        if (temp == 0x55) return RT_EOK;
    }
    return RT_ERROR;
}


读取任意位置任意长度的数据:
rt_err_t at24cxx_read(at24cxx_device_t dev, uint32_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead)
{
    rt_err_t result;
    RT_ASSERT(dev);

    if(ReadAddr + NumToRead > AT24CXX_MAX_MEM_ADDRESS || NumToRead == 0)
    {
        return RT_ERROR;
    }

    result = rt_mutex_take(dev->lock, RT_WAITING_FOREVER);
    if (result == RT_EOK)
    {
        while (NumToRead)
        {
            *pBuffer++ = at24cxx_read_one_byte(dev, ReadAddr++);
            NumToRead--;
        }
    }
    else
    {
        LOG_E("The at24cxx could not respond  at this time. Please try again");
    }
    rt_mutex_release(dev->lock);

    return RT_EOK;
}


在任意地址写任意长度的数据:
rt_err_t at24cxx_write(at24cxx_device_t dev, uint32_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite)
{
    uint16_t i = 0;
    rt_err_t result;
    RT_ASSERT(dev);

    if(WriteAddr + NumToWrite > AT24CXX_MAX_MEM_ADDRESS || NumToWrite == 0)
    {
        return RT_ERROR;
    }

    result = rt_mutex_take(dev->lock, RT_WAITING_FOREVER);
    if (result == RT_EOK)
    {
        while (1) //NumToWrite--
        {
            if (at24cxx_write_one_byte(dev, WriteAddr, pBuffer[i]) == RT_EOK)
            {
                rt_thread_mdelay(2);
                WriteAddr++;
            }
            if (++i == NumToWrite)
            {
                break;
            }
            rt_thread_mdelay(EE_TWR);
        }
    }
    else
    {
        LOG_E("The at24cxx could not respond  at this time. Please try again");
    }
    rt_mutex_release(dev->lock);

    return RT_EOK;
}


硬件初始化:
at24cxx_device_t at24cxx_init(const char *i2c_bus_name, uint8_t AddrInput)
{
    at24cxx_device_t dev;

    RT_ASSERT(i2c_bus_name);

    dev = rt_calloc(1, sizeof(struct at24cxx_device));
    if (dev == RT_NULL)
    {
        LOG_E("Can't allocate memory for at24cxx device on '%s' ", i2c_bus_name);
        return RT_NULL;
    }

    dev->i2c = rt_i2c_bus_device_find(i2c_bus_name);
    if (dev->i2c == RT_NULL)
    {
        LOG_E("Can't find at24cxx device on '%s' ", i2c_bus_name);
        rt_free(dev);
        return RT_NULL;
    }

    dev->lock = rt_mutex_create("mutex_at24cxx", RT_IPC_FLAG_FIFO);
    if (dev->lock == RT_NULL)
    {
        LOG_E("Can't create mutex for at24cxx device on '%s' ", i2c_bus_name);
        rt_free(dev);
        return RT_NULL;
    }

    if(AddrInput > 7)
    {
        LOG_E("The AddrInput is invalid");
        rt_free(dev);
        return RT_NULL;
    }
    else
    {
#if (PKG_AT24CXX_EE_TYPE == AT24C04)
        if(AddrInput > 3)
        {
            LOG_E("The AddrInput is invalid");
            rt_free(dev);
            return RT_NULL;
        }
#elif (PKG_AT24CXX_EE_TYPE == AT24C08)
        if(AddrInput > 1)
        {
            LOG_E("The AddrInput is invalid");
            rt_free(dev);
            return RT_NULL;
        }
#elif (PKG_AT24CXX_EE_TYPE == AT24C16)
        if(AddrInput != 0)
        {
            LOG_E("The AddrInput is invalid");
            rt_free(dev);
            return RT_NULL;
        }
#endif  //PKG_AT24CXX_EE_TYPE
    }

    dev->AddrInput = AddrInput;
    return dev;
}




6
点赞|  楼主 | 2025-7-30 21:55 | 显示全部楼层
验证效果:

把完整代码编译并烧写到开发板,连接好串口助手,在串口助手输入如下命令进行测试验证。

先探查at24c32:
at24cxx probe i2c0 0xae
其中:i2c0是总线名称。0xae是at24c32的设备地址,二进制为b1010 1110 ,其中的连续三个1及该AT24C32三个地址引脚配置的器件地址。

先写at24c32:
at24cxx write
在串口助手会有反馈信息打印出来:
write ok


然后读取at24c32:
at24cxx read
在串口助手会打印如下信息:
read at24cxx : WELCOM TO 21IC
其中:“WELCOM TO 21IC”是刚才写入at24c32的一个字符串。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

0

粉丝
uv是什么意思 高油酸是什么意思 喝酒后呕吐是什么原因 肝火旺吃什么中药 低烧是什么症状和感觉
6周岁打什么疫苗 哺乳期可以吃什么消炎药 兔死狗烹是什么意思 每天吃一根黄瓜有什么好处 月经期间喝什么比较好
阑尾炎能吃什么 十二指肠溃疡吃什么药 今天过生日是什么星座 荷花是什么季节 脑梗可以吃什么水果
hd什么意思 夏天吹空调感冒了吃什么药 芋头是什么季节的 2049年是什么年 股票杠杆是什么意思
制加手念什么hcv9jop5ns9r.cn 棍子鱼又叫什么鱼hcv8jop0ns7r.cn 晚上9点多是什么时辰hcv8jop4ns0r.cn 尿不尽是什么原因0297y7.com 剖腹产吃什么下奶最快hcv9jop0ns1r.cn
异物进入气管什么症状hcv8jop0ns9r.cn 生理期为什么不能拔牙hcv9jop1ns4r.cn 脑供血不足挂什么科hcv8jop3ns7r.cn 二十三岁属什么生肖wuhaiwuya.com 冲服是什么意思hcv8jop9ns6r.cn
什么水果补铁效果最好的hcv8jop1ns5r.cn 二尾子什么意思hcv9jop8ns2r.cn 钾在人体中起什么作用hcv7jop4ns6r.cn 恶心想吐吃什么药hcv7jop6ns5r.cn 九月十四号是什么星座hcv8jop2ns5r.cn
黄茶适合什么人喝hcv8jop7ns8r.cn 马蜂蛰了用什么药hcv9jop0ns9r.cn 红眼病有什么症状hcv9jop2ns6r.cn 宋朝后面是什么朝代hcv8jop9ns0r.cn 大便拉水是什么原因hcv9jop3ns9r.cn
百度