RK3588开发板(armsom-w3)之PWM实操-全球即时看
PWM介绍
专栏总目录PWM是脉宽调制(Pulse Width Modulation)的缩写。它是一种用于控制电子设备的技术,通过改变电信号的脉冲宽度来实现对设备的控制。PWM基本概念
PWM信号由一个固定频率的周期性脉冲序列组成,每个脉冲的宽度(持续时间)可以根据需要进行调节。调节脉冲宽度的比例可以改变平均电压或电流的大小,从而实现对设备的控制。
当谈论PWM时,以下三个关键术语经常被提及:
(资料图片仅供参考)
频率(Frequency):PWM信号的频率是指每秒钟内脉冲的数量。
周期(Period):PWM信号的周期是指一个完整脉冲序列所花费的时间。它是频率的倒数,以秒为单位表示。周期可以通过将频率的倒数计算得到,例如,一个10kHz的PWM信号的周期为0.1毫秒(100微秒)。
占空比(Duty Cycle):占空比是指PWM信号中脉冲宽度与周期之间的比例关系。它表示了脉冲在一个周期中所占据的时间比例,通常以百分比表示。占空比为0%意味着脉冲不存在(完全低电平),而占空比为100%表示脉冲持续时间占据了整个周期(完全高电平)。在实际应用中,占空比可以在0%到100%之间任意调整,以实现所需的控制效果。
PWM驱动
pwm驱动是一个通用的驱动,SOC厂家都会在SDK里面默认打开
驱动文件
驱动文件所在位置:
drivers/pwm/pwm-rockchip.c
默认SDK已经加载好了PWM的驱动,下文我们主要注意PWM怎么使用
DTS 节点配置
DTS 配置参考文档
Documentation/devicetree/bindings/pwm/pwm.txt
以下为一个例子的示例
Node name { compatible = "Driver matching character"; pwms = < &pwmX 0 25000 0 >; }; &pwmX { status = "okay"; pinctrl-names = "active"; pinctrl-0 = < &pwmX_pin_pull_down >; };
pwms的几个参数说明如下:
参数 1,表示 index (per-chip index of the PWM to request),一般是 0,因为我们 Rockchip PWM 每个chip 只有一个。
参数 2,表示 PWM 输出波形的时间周期,单位是 ns;例如下面配置的 25000 就是表示想要得到的
PWM 输出周期是 40K 赫兹。
参数 3,表示极性,为可选参数;下面例子中的配置为负极性。
PWM使用
PWM 提供了用户层的接口,在 /sys/class/pwm/ 节点下面,PWM 驱动加载成功后,会在/sys/class/pwm/ 目录下产生 pwmchip0 目录;向 export 文件写入 0,就是打开 pwm 定时器0,会产生一个 pwm0 目录,相反的往 unexport 写入 0 就会关闭 pwm 定时器了,同时 pwm0 目录会
被删除,该目录下有以下几个文件:
enable:写入 1 使能 pwm,写入 0 关闭 pwm;
polarity:有 normal 或 inversed两个参数选择,表示输出引脚电平翻转;
duty_cycle:在 normal 模式下,表示一个周期内高电平持续的时间(单位:纳秒),在
reversed 模式下,表示一个周期中低电平持续的时间(单位:纳秒);
period:表示 pwm 波的周期(单位:纳秒);
以下是 pwmchip0 的例子,设置 pwm0 输出频率 100K,占空比 50%, 极性为正极性:
cd /sys/class/pwm/pwmchip0/echo 0 > exportcd pwm0echo 10000 > periodecho 5000 > duty_cycleecho normal > polarityecho 1 > enable
PWM应用实例
通常电子设备中应用pwm是比较常见的,比如风扇电机控制,电视背光控制, LED 照明调光、电动工具马达控制、汽车加热器等领域。
这里简单介绍一下pwm控制LED灯实现呼吸灯效果。
呼吸灯需要灯的驱动与PWM的驱动结合,两个驱动之间传递数据,我们可以在驱动中调用其他的驱动。
led是我需要的设备,这个设备用到了pwm,而pwm是用默认的驱动。
硬件上我们在开发板找到具有pwm功能的引脚
设备树的修改如下:
/{breathing_light {compatible = "lhd,breathing_light_test";backlight {pwms = < &pwm8 0 25000 0 >;pwm-names = "breathing_light"; };};};&pwm8 {status = "okay";};
写一个驱动。内部在使用PWM子系统。形成了包含驱动的驱动。
示例代码
驱动程序
#include < linux/init.h >#include < linux/module.h >#include < linux/fs.h >#include < linux/cdev.h >#include < linux/uaccess.h >#include < linux/types.h >#include < linux/kernel.h >#include < linux/delay.h >#include < linux/ide.h >#include < linux/errno.h >#include < linux/gpio.h >//#include < asm/mach/map.h >#include < linux/of.h >#include < linux/of_address.h >#include < linux/of_gpio.h >#include < asm/io.h >#include < linux/device.h >#include < linux/platform_device.h >#include < linux/pwm.h >#define RED_LED_DTS_COMPATIBLE "lhd,breathing_light_test" /* 设备树节点匹配属性 */#define LED_PWM_CMD_SET_DUTY 0x01#define LED_PWM_CMD_SET_PERIOD 0x02#define LED_PWM_CMD_SET_BOTH 0x03#define LED_PWM_CMD_ENABLE 0x04#define LED_PWM_CMD_DISABLE 0x05struct led_pwm_param{ int duty_ns; int period_ns;};struct red_led_dev { dev_t dev_no; struct cdev chrdev; struct class *led_class; struct device_node *dev_node; struct pwm_device *red_led_pwm;};static struct led_pwm_param led_pwm;static struct red_led_dev led_dev;static int red_led_drv_open (struct inode *node, struct file *file){ int ret = 0; //pwm_set_periodnnn(led_dev.red_led_pwm, PWM_POLARITY_INVERSED);//设置PWM信号的极性pwm_enable(led_dev.red_led_pwm);//启用指定PWM设备,使其开始输出PWM信号。 printk("red_led_pwm open"); return ret;}static ssize_t red_led_drv_write (struct file *file, const char __user *buf, size_t size, loff_t *offset){ int err; if (size != sizeof(led_pwm)) return -EINVAL;err = copy_from_user(&led_pwm, buf, size); if (err > 0) return -EFAULT;pwm_config(led_dev.red_led_pwm, led_pwm.duty_ns, led_pwm.period_ns);//配置PWM设备的基本参数,如频率、占空比等。 printk("red_led_pwm write");return 1;}static long drv_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){ int ret = 0; void __user *my_user_space = (void __user *)arg; switch (cmd) { case LED_PWM_CMD_SET_DUTY: ret = copy_from_user(&led_pwm.duty_ns, my_user_space, sizeof(led_pwm.duty_ns)); if (ret > 0) return -EFAULT; pwm_config(led_dev.red_led_pwm, led_pwm.duty_ns, led_pwm.period_ns); break; case LED_PWM_CMD_SET_PERIOD: ret = copy_from_user(&led_pwm.period_ns, my_user_space, sizeof(led_pwm.period_ns)); if (ret > 0) return -EFAULT; pwm_config(led_dev.red_led_pwm, led_pwm.duty_ns, led_pwm.period_ns); break; case LED_PWM_CMD_SET_BOTH: ret = copy_from_user(&led_pwm, my_user_space, sizeof(led_pwm)); if (ret > 0) return -EFAULT; pwm_config(led_dev.red_led_pwm, led_pwm.duty_ns, led_pwm.period_ns); break; case LED_PWM_CMD_ENABLE: pwm_enable(led_dev.red_led_pwm); break; case LED_PWM_CMD_DISABLE: pwm_disable(led_dev.red_led_pwm); break; } return 0;}static int red_led_drv_release(struct inode *node, struct file *filp){ int ret = 0; pwm_config(led_dev.red_led_pwm, 0, 5000);//配置PWM设备的基本参数,如频率、占空比等。 printk("led pwm dev close");// pwm_disable(led_dev.red_led_pwm); return ret;}static struct file_operations red_led_drv = {.owner = THIS_MODULE,.open = red_led_drv_open,.write = red_led_drv_write, .unlocked_ioctl = drv_ioctl, .release = red_led_drv_release,};/*设备树的匹配列表 */static struct of_device_id dts_match_table[] = { {.compatible = RED_LED_DTS_COMPATIBLE, }, {}, };static int led_red_driver_probe(struct platform_device *pdev){ int err; int ret; struct device *tdev; struct device_node *child; tdev = &pdev- >dev; child = of_get_next_child(tdev- >of_node, NULL); /* 获取设备树子节点 */if (!child) { return -EINVAL; } led_dev.red_led_pwm = devm_of_pwm_get(tdev, child, NULL); /* 从子节点中获取PWM设备,设备树获取这个设备就可以了 */ if (IS_ERR(led_dev.red_led_pwm)) { printk(KERN_ERR"can"t get breathing_light!!"); return -EFAULT; } ret = alloc_chrdev_region(&led_dev.dev_no, 0, 1, "breathing_light");//动态分配字符设备的主设备号if (ret < 0) {pr_err("Error: failed to register mbochs_dev, err: %d", ret);return ret;}cdev_init(&led_dev.chrdev, &red_led_drv);//初始化字符设备结构体cdevcdev_add(&led_dev.chrdev, led_dev.dev_no, 1);//将已经初始化的字符设备结构体cdev添加到系统中 led_dev.led_class = class_create(THIS_MODULE, "breathing_light");//创建一个设备类(device class)并注册到内核中err = PTR_ERR(led_dev.led_class);if (IS_ERR(led_dev.led_class)) { goto failed1;} tdev = device_create(led_dev.led_class , NULL, led_dev.dev_no, NULL, "breathing_light"); //创建一个设备实例并注册到设备类中 if (IS_ERR(tdev)) { ret = -EINVAL;goto failed2;} printk(KERN_INFO"%s %s line %d", __FILE__, __FUNCTION__, __LINE__); return 0;failed2: device_destroy(led_dev.led_class, led_dev.dev_no); class_destroy(led_dev.led_class);failed1: cdev_del(&led_dev.chrdev);unregister_chrdev_region(led_dev.dev_no, 1); return ret;}int led_red_driver_remove(struct platform_device *dev){ // pwm_disable(led_dev.red_led_pwm); // pwm_free(led_dev.red_led_pwm); printk(KERN_INFO"driver remove %s %s line %d", __FILE__, __FUNCTION__, __LINE__); device_destroy(led_dev.led_class, led_dev.dev_no);class_destroy(led_dev.led_class);unregister_chrdev_region(led_dev.dev_no, 1); cdev_del(&led_dev.chrdev); return 0;}static struct platform_driver red_led_platform_driver = { .probe = led_red_driver_probe, .remove = led_red_driver_remove, .driver = { .name = "lhd,breathing_light_test", .owner = THIS_MODULE, .of_match_table = dts_match_table, //通过设备树匹配 },};module_platform_driver(red_led_platform_driver);MODULE_AUTHOR("LHD");MODULE_LICENSE("GPL");
将上述驱动编译为ko文件然后push进3588开发板里面
应用层程序
#include "stdio.h"#include < sys/types.h >#include < sys/stat.h >#include < fcntl.h >#include < unistd.h >#include < stdio.h >#include < string.h >#include < sys/ioctl.h >#include < poll.h >#include < stdint.h >#define DEV_NAME "/dev/breathing_light"#define LED_PWM_CMD_SET_DUTY 0x01#define LED_PWM_CMD_SET_PERIOD 0x02#define LED_PWM_CMD_SET_BOTH 0x03#define LED_PWM_CMD_ENABLE 0x04#define LED_PWM_CMD_DISABLE 0x05struct led_pwm_param { int duty_ns; int period_ns;};void sleep_ms(unsigned int ms){ struct timeval delay;delay.tv_sec = 0;delay.tv_usec = ms * 1000; select(0, NULL, NULL, NULL, &delay);}int main(int argc, char **argv){ int fd; int ret; /* 2. 打开文件 */fd = open(DEV_NAME, O_RDWR | O_NONBLOCK); // | O_NONBLOCKif (fd < 0){printf("can not open file %s, %d", DEV_NAME, fd);return -1;} int buf = 3;struct led_pwm_param led_pwm;led_pwm.duty_ns = 500;led_pwm.period_ns = 5000; write(fd, &led_pwm, sizeof(led_pwm)); sleep_ms(3000);while(1){if(led_pwm.duty_ns<=500){while(led_pwm.duty_ns< led_pwm.period_ns){ioctl(fd, LED_PWM_CMD_SET_DUTY, &led_pwm.duty_ns);sleep_ms(50);led_pwm.duty_ns += 300;}}else{while(led_pwm.duty_ns > 500){ioctl(fd, LED_PWM_CMD_SET_DUTY, &led_pwm.duty_ns);sleep_ms(50);led_pwm.duty_ns -= 300;}}}close(fd); return 0;}
使用3588自带的编译器将用户程序编译进开发板
prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc apptest_breathing_light_.c -o testpwm
adb push path/testpwm /userdata
chmod 777 testpwm
./testpwm
最后可以看到灯明灭交替的效果
审核编辑:汤梓红
标签:
- RK3588开发板(armsom-w3)之PWM实操-全球即时看
- 血腥风格银河恶魔城新作《Cookie Cutter》实机预告赏-世界播资讯
- 肌酐高吃什么能降下来(肌酐高可以吃哪些水果来降肌酐?) 即时
- 速递!【宜宾·2023世界动力电池大会】又见宜宾 亮点十足 科技感拉满
- 如何将手机音频转成文字 如何把手机上的音频转换为文字
- 四川阿坝州茂县发生3.2级地震,震源深度18千米
- 国家防总针对南方地区持续降雨启动防汛四级应急响应
- 跨越山川大海,这场教共体活动干货满满
- 每日快看:今年雪糕价格如何?3至5元仍是主流
- 定向投档_关于定向投档介绍|天天速读
- 环球热消息:百联股份拟聘任杨琴为财务总监、董事会秘书,曾任红星美凯龙执行总裁
- 今日要闻!2023国庆节客户祝福语
- 龙珠之帝王传说 枫叶暮落_龙珠之帝王传说
- 环球即时:天安新材: 公司已在微博、微信、抖音、小红书等新媒体平台开通官方账号,欢迎关注并了解公司最新资讯
- 这些省份,为何在猛建工科? 最新
- 世界微动态丨杭州-西宁-德令哈航线今日正式通航
- 福建土楼在哪里位置_福建土楼在哪里
- 6月9日生意社正丙醇基准价为7933.33元/吨
- 热敏打印机打不出字的原因及解决方法_热敏打印机打不出字
- 马红漫:珍惜“经济复苏”的火苗!
- 爱人者人恒爱之什么什么(爱人者人恒爱之的意思)-天天简讯
- 源头创新 + AI赋能,能否让精准医学实现广泛应用?
- 消弧消谐柜作用_什么是消弧柜
- 天天资讯:中信证券:当前偏低估值背景下银行板块步入可积极配置区间
- 龙虎榜丨京投发展今日涨停 中国银河证券北京中关村大街证券营业部买入1283.13万元 焦点热议
- 环球动态:尹博林与尹卓林的关系(尹博林)
- 环球资讯:虔字怎么读_虔
- 热推荐:匡德鳌简历_匡萃龙
- 搞笑网名排行榜_最流行的经典搞笑网名大全 风趣又很幽默的沙雕群昵称
- 天天快播:老挝钾矿储量超百亿吨 中企淘金机会仍存
- 全球看点:点击qq图标没反应是怎么回事_点击qq图标没反应
- 观察:真兰仪表(301303):6月8日北向资金增持8.81万股
- 农村自建房屋顶隔热层的最佳做法(自建房楼顶隔热妙招有哪些) 焦点资讯
- 汉口银行:取消发行“23汉口银行CD191”
- 20年“老慢支”顽疾竟是肺内古董在作祟
- 今日热搜:西工大迎新网商品(西工大迎新网)
- 三套回迁房!保定四期城改东湖片区梁庄安置补偿方案公布! 焦点热门
- 特钢板块6月8日涨0.84%,甬金股份领涨,主力资金净流出31.91万元
- 中国电信广东地区网络异常无信号,专家:运营商连续提速降费又要保盈利,网络维护难度加大 世界快看点
- 可重复使用,最多可坐7人!新一代载人飞船什么样?_世界百事通
- 每日聚焦:大模型扎堆「赶考」,语文还是国产AI行,文言文能力超过95%考生
- 天天资讯:贵州村BA升级为全国性赛事:6月开赛 10月总决赛
- 全球信息:上半年A股IPO发行数量放缓,普华永道预计下半年将保持活跃
- 三套回迁房!保定四期城改东湖片区梁庄安置补偿方案公布!
- 发力小型纯电SUV市场,沃尔沃EX30开启全球首秀 环球看热讯
- 【短讯】募投项目20个月仅进展6% 太平鸟数字化转型“道阻且长”|直击业绩会-环球时讯
- 法媒:马克龙称法国安纳西发生持刀袭击事件“令全国震惊”-天天快报
- 街拍摄影师诉多家公司侵权获赔 成都太古里明文禁止侵犯肖像权-热讯
- 环球新资讯:中国烈士纪念日 中国抗战胜利纪念日
- 男子长期跟踪、骚扰、威胁前女友 还违反人身保护令!法院“出手”!_环球快报
-
陆海统筹跨级联动!崂山三部门联合开展海洋生态环境保护执法行动|每日头条
青岛新闻网6月8日讯(记者朱颖通讯员王琳戴永明)6月8日是世界海洋日。
-
北京市通信管理局就网络安全问题约谈瑞斯康达
北京市通信管理局官微消息,6月6日,按照有关工作安排,北京市通信管理
-
【全球播资讯】澳门今年首季立刑案逾3000宗
澳门特区政府保安司司长黄少泽8日向传媒发布“2023年第一季澳门罪
-
医药板块苏醒?多只新基金随批随发,抢抄底机会,机构看好医药弹性
医药板块苏醒?多只新基金随批随发,抢抄底机会,机构看好医药弹性
-
知了花的养殖方法(如何在家中种植知了花) 今日热闻
知了花的基本特征和外观知了花,又称为紫背天葵,是一种常见的观赏植物
-
化身铁匠!斯特鲁斯7中1&三分4中1 得到3分4板5助1断1帽 世界今日报
今日NBA总决赛G3,热火在主场以94-109不敌掘金,系列赛比分来到1-2。本
-
从对生活的重构开始 | 韩东小说《幽暗》《狼踪》新书分享会_视点
6月10日(周六)15:00,韩东将来到单向空间·杭州乐堤港店,和诗人、小
-
环球速递!被小球迷问及个人未来,齐达内打趣:你为哪家报社工作?
被小球迷问及个人未来,齐达内打趣:你为哪家报社工作?,东子,小球迷,
-
高度警惕!中消协发布警示
然后再冒充政府部门、消协组织、培训机构、知名企业、第三方合作机构等
-
华夏中证新能源汽车ETF净值下跌2.03% 请保持关注 每日资讯
金融界基金06月08日讯华夏中证新能源汽车ETF基金06月07日下跌2 12%,现
-
呷哺推出新业务,打算靠“卖”会员赚“6亿”? 焦点热门
第一财经商业数据中心(CBNData)隶属于上海文化广播影视集团(SMG),
-
《海南往事》第十八期:这栋带有金色字匾的骑楼,你知道它的故事吗?
商报全媒体讯(椰网 海拔新闻记者郑塞雯)“哇,这栋骑楼的字匾是金色
-
手机问题:努比亚Z30Pro是双屏吗
科技、数码、互联网新闻如今都成为了大众所关注的热点了,因为在我们的
-
郭嘉新传 皇家卡卡_郭嘉新传
1、《我与曹操锁心环》、《笑倾三国》、《郭嘉新传》、《天生郭奉孝》
-
天天最新:2023LPL夏季赛战报:JDG下路稳定发力 中野节奏起飞轻松带走OMG
2023LPL夏季赛战报:JDG下路稳定发力中野节奏起飞轻松带走OMG,让我们
-
天源环保:污泥碳化和生物质秸秆碳化研发项目采用了热储能技术|天天最资讯
天源环保(301127)06月07日在投资者互动平台表示:尊敬的投资者,您好
-
全球观热点:大盘弱势震荡不改 走势反复在所难免
快速回调后大盘继续震荡分化。沪指周三小幅高开后围绕3200点整数关口持
-
32辆电动车实测:特斯拉Model S跑最远 小鹏G9反向虚标最多-全球微头条
32辆电动车实测:特斯拉ModelS跑最远小鹏G9反向虚标最多
-
微动态丨中欧价值成长混合A重仓股华工科技涨10.01%
6月7日收盘,华工科技涨10 01%,报收35 84元,换手率11 68,成交量1 17
-
海关总署:前5个月我国进出口增长4.7%|每日热门
海关总署:前5个月我国进出口增长4 7%---人民网北京6月7日电(记者王震
-
苹果Vision Pro成本仅1500美元 世界播报
苹果在WWDC23上正式推出了第一款MR眼镜AppleVisionPro,其售价高达3499
-
【环球新视野】*ST民控:公司将把目前有限的资金主要用于提高营业收入和净利润方面,暂不考虑回购
同花顺金融研究中心6月7日讯,有投资者向*ST民控提问,为什么我的提问
-
环球今头条!淄博在全省首推“无还本续贷”创业担保贷款,企业无需还本也可续贷
“我们获得了220万元的‘无还本续贷’创业担保贷款,可连续享受6年,贴
-
2012年以来首次下跌!英国5月Halifax房价同比下降1%
英国房价出现了自2012年以来的首次年度下跌,突显出随着英国央行继续加
-
哈尔滨失业保险费率
按照国家、省市关于阶段性降低失业保险、工伤保险费率的文件精神,我市
-
聚焦:英国5月房价同比下跌1%,为11年来首次年率下跌
英国抵押贷款机构Halifax的数据显示,英国5月份房价出现2012年以来的首
-
全球快消息!23安徽债59今日发布发行公告
23安徽债59发布发行公告
-
全国碳市场今日收盘价与前一日持平 报58.50元/吨|环球速递
【全国碳市场今日收盘价与前一日持平报58 50元 吨】6月7日,据“全国碳
-
闽清高考生速看!遗忘身份证不要慌
6月7日上午,闽清县1302名考生奔赴考场,迎接“人生大考”。据了解,今
-
环球观点:海南橡胶:公司未参与投资海南万宁免税店项目
每经AI快讯,有投资者在投资者互动平台提问:2023年4月9号网上消息海南
-
吉林大学重要发布|世界快看点
“吉”刻返程相聚母校——致吉林大学2020、2021、2022届毕业生的一封“
-
2023年儋州市中小学班主任能力提升专题培训班顺利开班 每日讯息
新海南客户端、南海网6月7日消息(记者李绍远)近日,由儋州市教育研究
-
混纺是什么意思(混纺)
1、一般面料的优缺点棉:优点:吸汗透气、柔软、防敏感、容易清洗、不
-
车市焦点|首个完整月度销量超5000辆!魏牌蓝山这表现啥水平?
所以,早已有无数业界人士和媒体对魏牌蓝山的市场表现始终予以了高度关
-
【世界聚看点】影视股大爆发!百亿龙头3天2板,“AI+IP”双概念催化,这些方向或有望升温
①今日,影视板块再度拉升,个股也集体活跃,其中,上海电影获3天2板。
-
吉视传媒董秘回复: 感谢关注公司!截止到2023年3月31日公司普通股股东总数为84,124股
吉视传媒(601929)06月07日在投资者关系平台上答复了投资者关心的问题。
-
农业农村部、体育总局:举办全国和美乡村篮球大赛(村BA)|要闻速递
【农业农村部、体育总局:举办全国和美乡村篮球大赛(村BA)】据农业农
-
上网设备有哪些种类_上网设备有哪些|速讯
1、网络适配器:又称网络接口卡(网卡),它插在计算机的总线上将计算机连
-
最完美的iOS!iOS 17新功能盘点:让iPhone更人性化了
最完美的iOS!iOS17新功能盘点:让iPhone更人性化了
-
川渝建筑行业绿色建造技能大赛落幕
工人日报-中工网记者赵昂通讯员李治衡6月5日至6日,2023年川渝建筑行业
-
商品期货收盘多数下跌,甲醇跌3%,纸浆、尿素、纯碱跌超2%
国内商品期货收盘多数下跌,甲醇跌超3%,纯碱、尿素等跌超2%,硅铁、PV
-
收评|沪指3200点得而复失 赛道股集体回调
6月7日,A股三大指数收盘涨跌不一。早间,三大指数开盘涨跌不一,沪指
-
买车必看!smart北京华贸旗舰中心开业-当前资讯
6月7日,以“Fashion”时尚潮趣为主题的smart北京旗舰中心正式开业。sm
-
商用厨具行业市场未来发展规模预测 商用厨具行业市场增长潜力巨大 最新快讯
商用厨具行业市场前景在哪?教育部、市场监管总局联合印发《关于开展秋
-
天天最新:英媒:买凯塞多,切尔西可能将科尔威尔加入交易
据FootballInsider的消息,切尔西可能将科尔威尔加入求购凯塞多的交易
-
墙纸甲醛超标了怎么办_墙纸甲醛超标危害大
夏季,家装旺季来临,市场上又涌现了一批宣称可以“除甲醛”的家装建材
-
李云泽会见美国花旗集团首席执行官范洁恩
据国家金融监督管理总局6月7日消息,6月5日,国家金融监督管理总局党委
-
海关总署:前5个月我国一般贸易进出口11万亿元,增长7%
据海关总署,前5个月,我国一般贸易进出口11万亿元,增长7%,占我外贸
-
黎元洪银元价格(2023年06月07日)-热点
金投白银网提供黎元洪银元价格(2023年06月07日),【】最新消息(2023
-
戴森无绳吸尘器都在打折
以反映戴森吸尘器、空气净化风扇和美发工具的当前可用性和销售价格。在
X 关闭
X 关闭