GD32开发实战指南(基础篇) 第8章 定时器 全球聚看点
开发环境:
MDK:Keil5.30
(资料图)
开发板:GD32F207I-EVAL
MCU:GD32F207IK
1 PWM输出的工作原理
脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。
GD32 的定时器除了 TIMER5 和 6(基本定时器)。其他的定时器都可以用来产生 PWM 输出。
每个定时器有四个通道,每一个通道都有一个捕获比较寄存器,,将寄存器值和计数器值比较,通过比较结果输出高低电平,便可以实现脉冲宽度调制模式(PWM信号)。
在上一节,讲解了定时器的相关寄存器即基本原理,本节将不再赘述。下面谈谈如何使用定时器的寄存器进行PWM输出的。若配置脉冲计数器TIMERx_CNT为向上计数,而重载寄存器TIMERx_CAR配置为N,即TIMERx_CNT的当前计数值数值X在CK_TIMER时钟源的驱动下不断累加,当TIMERx_CNT的数值X大于N时,会重置TIMERx_CNT数值为0重新计数。而在TIMERx_CNT计数的同时,TIMERx_CNT的计数值X会与比较寄存器TIMERx_CHxCV预先存储了的数值A进行比较,当脉冲计数器TIMERx_CNT的数值X小于比较寄存器TIMERx_CHxCV的值A时,输出高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输出低电平(或高电平)。如此循环,得到的输出脉冲周期就为重载寄存器TIMERx_CAR存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMERx_CHxCV的值A乘以触发脉冲的时钟周期,即输出PWM的占空比为A/(N+1)。
估计很多初学者看了上面的一段话都很蒙圈,没关系,下面以向上计数模式为例进行讲解。
在PWM输出模式下,除了CNT(计数器当前值)、CAR(自动重装载值)之外,还多了一个值CHxCV(捕获/比较寄存器值)。当CNT小于CHxCV时,CHxCV通道输出低电平;当CNT等于或大于CHxCV时,CHxCV通道输出高电平。因此得到PWM的一个周期如下:
1.定时器从0开始向上计数;
2.当0-t1段,定时器计数器CNT值小于CHxCV值,输出低电平;
3.t1-t2段,定时器计数器CNT值大于CHxCV值,输出高电平;
4.当CNT值达到CAR时,定时器溢出,重新向上计数...循环此过程。
至此一个PWM周期完成。针对PWM重点关注两个寄存器, CAR寄存器确定PWM频率,CHxCV寄存器确定占空比。
上文提到了PWM的输出模式,下面讲解PWM的工作模式:
PWM模式1(向上计数) :计数器从0计数加到自动重装载值(CAR),然后重新从0开始计数,并且产生一个计数器溢出事。PWM模式2(向下计数) :计数器从自动重装载值(CAR)减到0,然后重新从重装载值(CAR)开始递减,并且产生一个计数器溢出事件。这里我们仅利用 TIMER2产生多路 PWM 输出。如果要产生多路输出,大家可以根据我们的代码稍作修改即可。具体不同定时器对应引脚在对应芯片数据手册的引脚说明(pin description) 中查看。
[ps] 本文以F2系列为例进行讲解,GD不同系列其定时器个数不同
2 PWM输出的寄存器描述
同样,我们首先通过对 PWM 相关的寄存器进行讲解,大家了解了定时器 TIMER2的 PWM原理之后,我们再讲解怎么使用库函数产生 PWM 输出。
要使 GD32 的通用定时器 TIMERx 产生 PWM 输出,除了上一章介绍的寄存器外,我们还会用到 3 个寄存器,来控制 PWM 的。这三个寄存器分别是:通道控制寄存器(TIMERx_CHCTL0/1)、通道控制寄存器(TIMERx_CHCTL2)、捕获/比较寄存器(TIMERx_CHxCV)。接下来我们简单介绍一下这三个寄存器。
首先是通道控制寄存器(TIMERx_CHCTL0/1),该寄存器总共有2个,TIMERx_CHCTL0和TIMERx_CHCTL1。TIMERx_CHCTL0控制 CH1 和 2,而TIMERx_CHCTL1 控制 CH3 和 4。该寄存器的各位描述如下图。
该寄存器的有些位在不同模式下,功能不一样,所以在上图中,我们把寄存器分了2层,上面一层对应输出而下面的则对应输入。关于该寄存器的详细说明,请参考《GD32F20x User Manual》。这里我们需要说明的是模式设置位CH0COMCTL,此部分由 3 位组成。总共可以配置成 7 种模式,我们使用的是 PWM 模式,所以这 3 位必须设置为 110/111。这两种PWM 模式的区别就是输出电平的极性相反。
接下来,我们介绍通道控制寄存器(TIMERx_CHCTL2),该寄存器控制着各个输入输出通道的开关。该寄存器的各位描述如下图。
该寄存器比较简单, 我们这里只用到了CHxEN位,该位是输入/捕获 2 输出使能位,要想PWM 从 IO 口输出,这个位必须设置为 1,所以我们需要设置该位为 1。
最后,我们介绍一下捕获/比较寄存器(TIMERx_CHxCV),该寄存器总共有 4 个,对应 4 个输通道 CH0~3。因为这 4 个寄存器都差不多,我们仅以TIMERx_CH0CV为例介绍,该寄存器的各位描述如下图。
在输出模式下,该寄存器的值与 CNT 的值比较,根据比较结果产生相应动作。利用这点,我们通过修改这个寄存器的值,就可以控制 PWM 的输出脉宽了。
假如我们要利用 TIMER2的 CH1 输出 PWM 来控制 DS0 的亮度,但是 TIMER2_CH1默认是接在 PA7上面的,这就可以通过重映射功能,把 TIMER2_CH1映射到 PB5 上。
GD32 的重映射控制是由复用重映射和调试 IO 配置寄存器控制的,该寄存器的各位描述如上图。我们这里用到的是 TIMER2的重映射,从上图可以看出,TIMER2_REMAP 是由[11:10]这 2 个位控制的。TIMER2_REMAP[1:0]重映射控制表如下表。
默认条件下,TIMER2_REMAP[1:0]为 00,是没有重映射的,所以 TIMER2_CH0~TIMER2_CH3 分别是接在 PA6、 PA7、 PB0 和 PB1 上的,而我们想让 TIMER2_CH1 映射到 PB5 上, 则需要设置TIMER2_REMAP[1:0]=10,即部分重映射,这里需要注意,此时TIMER2_CH0 也被映射到 PB4 上了。
TIMER定时器的四路通道CHx_O输出PWM。
3 PWM输出实现
3.1 PWM代码分析
本章要实现通过TIMER2实现四路方波的输出,以TIMER2_CH0 输出 PWM 为例进行讲解。下面我们介绍通过库函数来配置该功能的步骤。
首先要提到的是,PWM 相关的函数设置在库函数文件gd32f20x_timer.h和gd32f20x_timer.c文件中。
1) 开启 TIMER2 时钟以及GPIO的时钟,配置 PA6为复用输出。
要使用 TIMER2,我们必须先开启 TIMER2的时钟,这点相信大家看了这么多代码,应该明白了。库函数使能 TIMER2及PA6时钟的方法是:
/* enable the GPIOA clock */rcu_periph_clock_enable(RCU_GPIOA);//Enable TIMER2 clockrcu_periph_clock_enable(RCU_TIMER2);
库函数设置 AFIO 时钟的方法是:
/* 开启复用功能时钟 */rcu_periph_clock_enable(RCU_AF);
2) 初始化 TIMER2,设置 TIMER2的 CAR 和 PSC。
在开启了 TIMER2 的时钟之后,我们要设置 CAR 和 PSC 两个寄存器的值来控制输出 PWM 的周期。这在库函数是通过timer_init()函数实现的,在上一节定时器中断章节我们已经有讲解,这里就不详细讲解,调用的格式为:
/* TIMER2 configuration */timer_init_struct.prescaler = 0;timer_init_struct.alignedmode = TIMER_COUNTER_EDGE;timer_init_struct.counterdirection = TIMER_COUNTER_UP;timer_init_struct.period = 999;timer_init_struct.clockdivision = TIMER_CKDIV_DIV1;timer_init_struct.repetitioncounter = 0;timer_init(TIMER2, &timer_init_struct);
3) 设置 TIMER2_CH0的 PWM 模式,使能 TIMER2的 CH0输出。
接下来,我们要设置 TIMER2_CH0为 PWM 模式(默认是冻结的),在库函数中,PWM通道设置是通过函数 timer_channel_output_config()来设置的,我们直接来看看结构体 timer_oc_parameter_struct的定义:
/* channel output parameter structure definitions */typedef struct { uint16_t outputstate; /*!< channel output state */ uint16_t outputnstate; /*!< channel complementary output state */ uint16_t ocpolarity; /*!< channel output polarity */ uint16_t ocnpolarity; /*!< channel complementary output polarity */ uint16_t ocidlestate; /*!< idle state of channel output */ uint16_t ocnidlestate; /*!< idle state of channel complementary output */} timer_oc_parameter_struct;
该结构体主要配置通道的状态,极性等,还需要设置占空比等配置,不同的通道需要分别设置。
/* PWM Mode configuration: Channel0 */timer_channel_output_config(TIMER2, TIMER_CH_0, &timer_oc_init_struct);/* 通道2占空比设置 */timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, CH0CV_Val);/* PWM模式0 */timer_channel_output_mode_config(TIMER2,TIMER_CH_0,TIMER_OC_MODE_PWM0);/* 不使用输出比较影子寄存器 */timer_channel_output_shadow_config(TIMER2,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);
4) 使能 TIM3。
我们需要使能 TIMER2。使能 TIMER2的方法前面已经讲解过:
timer_enable(TIMER2);
最后看下主函数代码:
/* brief main function param[in] none param[out] none retval none*/int main(void){ //systick init sysTick_init(); /* configure the TIMER peripheral */ pwm_init (); while(1) { }}
是不是很简单,这里进行了PWM初始化,最核心的就是timer2_init()函数,其代码如下:
/* brief configure the TIMER peripheral param[in] none param[out] none retval none */void pwm_init(void){ /* TIMER2 configuration: generate PWM signals with different duty cycles*/ /* 定义一个定时器初始化结构体 */ timer_parameter_struct timer_init_struct; /* 定义一个定时器输出比较参数结构体*/ timer_oc_parameter_struct timer_oc_init_struct; /* PWM信号电平跳变值 */ uint16_t CH0CV_Val = 500; uint16_t CH1CV_Val = 375; uint16_t CH2CV_Val = 250; uint16_t CH3CV_Val = 125; /* ----------------------------------------------------------------------- TIMER2 Channel0 duty cycle = (TIMER2_CH0CV/ TIMER2_CAR+1)* 100% = 50% TIMER2 Channel1 duty cycle = (TIMER2_CH1CV/ TIMER2_CAR+1)* 100% = 37.5% TIMER2 Channel2 duty cycle = (TIMER2_CH2CV/ TIMER2_CAR+1)* 100% = 25% TIMER2 Channel3 duty cycle = (TIMER2_CH3CV/ TIMER2_CAR+1)* 100% = 12.5% ----------------------------------------------------------------------- */ // gpio init timer_gpio_init(); //Enable TIMER2 clock rcu_periph_clock_enable(RCU_TIMER2); /* 开启复用功能时钟 */ rcu_periph_clock_enable(RCU_AF); timer_deinit(TIMER2); /* TIMER2 configuration */ timer_init_struct.prescaler = 0; timer_init_struct.alignedmode = TIMER_COUNTER_EDGE; timer_init_struct.counterdirection = TIMER_COUNTER_UP; timer_init_struct.period = 999; timer_init_struct.clockdivision = TIMER_CKDIV_DIV1; timer_init_struct.repetitioncounter = 0; timer_init(TIMER2, &timer_init_struct); /* PWM初始化 */ timer_oc_init_struct.outputstate = TIMER_CCX_ENABLE;/* 通道使能 */ timer_oc_init_struct.outputnstate = TIMER_CCXN_DISABLE;/* 通道互补输出使能(定时器2无效) */ timer_oc_init_struct.ocpolarity = TIMER_OC_POLARITY_HIGH;/* 通道极性 */ timer_oc_init_struct.ocnpolarity = TIMER_OCN_POLARITY_HIGH;/* 互补通道极性(定时器2无效)*/ timer_oc_init_struct.ocidlestate = TIMER_OC_IDLE_STATE_LOW;/* 通道空闲状态输出(定时器2无效)*/ timer_oc_init_struct.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;/*互补通道空闲状态输出(定时器2无效) */ /* PWM Mode configuration: Channel0 */ timer_channel_output_config(TIMER2, TIMER_CH_0, &timer_oc_init_struct); /* 通道2占空比设置 */ timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, CH0CV_Val); /* PWM模式0 */ timer_channel_output_mode_config(TIMER2,TIMER_CH_0,TIMER_OC_MODE_PWM0); /* 不使用输出比较影子寄存器 */ timer_channel_output_shadow_config(TIMER2,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE); /* PWM Mode configuration: Channel1 */ timer_channel_output_config(TIMER2, TIMER_CH_1, &timer_oc_init_struct); /* 通道2占空比设置 */ timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_1, CH1CV_Val); /* PWM模式0 */ timer_channel_output_mode_config(TIMER2,TIMER_CH_1,TIMER_OC_MODE_PWM0); /* 不使用输出比较影子寄存器 */ timer_channel_output_shadow_config(TIMER2,TIMER_CH_1,TIMER_OC_SHADOW_DISABLE); /* PWM Mode configuration: Channel2 */ timer_channel_output_config(TIMER2, TIMER_CH_2, &timer_oc_init_struct); /* 通道2占空比设置 */ timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_2, CH2CV_Val); /* PWM模式0 */ timer_channel_output_mode_config(TIMER2,TIMER_CH_2,TIMER_OC_MODE_PWM0); /* 不使用输出比较影子寄存器 */ timer_channel_output_shadow_config(TIMER2,TIMER_CH_2,TIMER_OC_SHADOW_DISABLE); /* PWM Mode configuration: Channel3 */ timer_channel_output_config(TIMER2, TIMER_CH_3, &timer_oc_init_struct); /* 通道2占空比设置 */ timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_3, CH3CV_Val); /* PWM模式0 */ timer_channel_output_mode_config(TIMER2,TIMER_CH_3,TIMER_OC_MODE_PWM0); /* 不使用输出比较影子寄存器 */ timer_channel_output_shadow_config(TIMER2,TIMER_CH_3,TIMER_OC_SHADOW_DISABLE); /* 自动重装载影子比较器使能 */ timer_auto_reload_shadow_enable(TIMER2); /* TIMER2 enable */ timer_enable(TIMER2);}
3.2 PWM周期、占空比分析
根据前面的参数配置,我们可以算出PWM的输出周期:
PWM=1/(Tclk/(psc+1))*(arr+1)
这里我们 arr=999 psc=0 Tclk=120Mhz ,
PWM=1/(120Mhz/(1))*(999+1)=1/120ms
因此PWM的输出频率120KHz,周期是8.3us。
PWM的占空比为:
Dutycycle=(CHxCV/CAR+1)* 100%
PWM自动重装值为999,四个通道的跳变值分别为500,375,250,125。因此,TIMER2的四个通道的占空比分别为50%,37.5%,25%,12.5%。
4 PWM输出的实验现象
在前面我们输出了TIMER2的通道0(PA6)、1(PA7)、2(PB0)、3(PB1)不同占空比的 PWM 信号。接下来就看看PWM的输出,PWM 信号可以通过示波器看到,下面笔者就是用逻辑分析仪查看波形。
首先笔者使用的逻辑分析仪是Kingst LA5016,当然啦,其他的也可以,关于逻辑分析仪的相关使用笔者这里就不介绍了,可以查看官方资料。
首先将通道 0(PA6)、1(PA7)、2(PB0)、3(PB1)分别接到逻辑分析仪的CH0 – CH3,然后下载程序到板子中,打开Kingst VIS,然后进行采样。
我们就可以看到不同通道的实际周期,占空比等信息。
从上图可以看到,实际测量的频率和占空比和理论是相符的。
标签:
推荐
- GD32开发实战指南(基础篇) 第8章 定时器 全球聚看点
- 热点!河北师大附属实验中学召开2023年少代会
- 当前视点!2023年05月12日19时54分美元/人民币汇率最新报价
- 挖财记账理财客服电话_挖财记账理财
- 光伏产业链大降价:硅料价格腰斩 硅片周降幅超15% 焦点播报
- 世纪华通:去年至今,公司已推出多款标杆产品,其中《Family Farm》自创 IP 系列产品累计用户已超1.5亿,创下模拟经营手游出海的新纪录 当前最新
- 每日速读!快手粉丝一万官方给发工资吗?如何变现?
- 滚动:最恐怖的游戏前十名排名_最恐怖的游戏前十名
- 环球新资讯:在赛场实现成果转让!广东首届智能产品设计职工职业技能大赛落幕
- 环球头条:在东风雪铁龙凡尔赛C5 X这里,一元可以买到什么?
- 全球快播:形成双头是什么意思_双头是什么意思简介介绍
- 免费VS付费,抖快谁能突围短剧下半场
- 全球消息!林裕纮爆北农之争内幕“农委会”惨输韩国瑜?
- 山东武城:积极构建“一站式”矛盾化解新格局 环球播资讯
- 世界速读:2023中国数字能源生态大会圆满举行
- 碱性食物一览表_碱性食物有哪些|焦点热门
- 许昌市开展2023年度突发地质灾害应急演练_世界视讯
- 昨晚安徽两位市委书记“逛夜市”|速看
- 外媒:向乌提供武器,美军工业生产活跃至几十年来最高水平 每日资讯
- 环球消息!女性成长,是个流量话题,但想赚钱,你要懂这3个解法
- 最新消息播报:北大弑母案吴谢宇二审 吴谢宇案二审下周开庭-当前关注
- 今日播报!诚信勇敢作文600字叙事文(优选20篇)
- 投影市场将迎来惨烈价格战? 投影设备行业市场深度分析2023
- 环球讯息:海南防雷检测公司有哪些_防雷检测主要内容有哪些
- 专插本需要考些什么科目_专插本
- ETF观察丨获大众汽车集团海外市场定点,国轩高科高开高走,电池ETF(159755)涨超2%
- 每日头条!吴谢宇案二审恢复审理:5月19日开庭,此前一审判处死刑
- 宝马召回部分进口X4:驾驶员座椅存问题 每日头条
- 牛仔裤作为百搭之王 牛仔裤搭配什么衣服更时尚?|环球动态
- 等不及了,宣布个好消息! 当前播报
- 经常感冒发生的人,不但免疫力更强,还不易患癌?告诉你真相
- 全球百事通!“防灾减灾:护航高质量发展”论坛举行
- 今日最新!这位获得诺贝尔奖的作家,有一句充满矛盾的名言,让我们顿悟人生
- 大族激光:可转债转股价格调整为 51.59 元 / 股-世界即时
- 巴斯勒:基米希一直罚角球令人奇怪,他踢得又高又飘很难顶到
- 即时看!2022佛山嘉宝果采摘好去处 佛山嘉宝果果园采摘
- 券商研报现场检查发现三大问题-焦点短讯
- Unity Android:用Unity与C#构建8款手机游戏
- 当前观点:瑞士政府:俄罗斯央行约有83亿美元的资产位于瑞士 已无法动用
- 当前快播:2023重庆秀山小升初报名(时间+材料+流程)
- 网友反映赣州龙湖天境二期停工?真实情况是?|快讯
- 世界快看:青岛品牌即将闪耀中国品牌日 青岛城市品牌面临新机遇
- 男子吐槽明星活动封闭电梯上班险迟到,商场回应:怕粉丝拥挤发生踩踏
- 每日快看:集中兑付是什么意思_集中结售汇是什么意思
- 从4岁娃娃到70岁初老志愿者,今年他们继续“乐善同心,志愿同行” 环球新资讯
- 金博股份:1509.6万股限售股5月18日解禁_速讯
- 环球时讯:a9av com红番阁
- 环球即时看!电子行业深度报告:AI系列深度:国内厂商受益AI算力需求增长,PCB有望量价齐升
- 甘肃发电装机容量七千万千瓦 新能源占53%|天天速看料
- 今日热搜:在日常生活中,能让自己更聪明的 4 条捷径
- 《龙腾世纪4》不会在2024年4月之前发售 玩家还需等待
- 金价还能创新高?"2年行情才走了半年"!机构犀利预判:有两大坚实支撑|天天快看点
- 世邦魏理仕报告:商业和旅游活动复常带动零售及酒店投资-世界报资讯
- 君子兰多久开一次花?|快播
- 大功率充电宝能带上火车吗?太铁民警提醒:有容量限制 超出规定不能随身携带
- 黄河底下有多恐怖?为什么连当地人都不敢下去游泳?
- 要闻速递:朝霞不出门晚霞行千里的意思是啥_朝霞不出门晚霞行千里的意思
- 工信部收回98个电信网码号 环球新视野
- 全球新资讯:2023年5月10日:农业板块股票市值排行榜来了!
- 外交部副部长马朝旭会见南非金砖国家事务协调人苏克拉尔 快报
- 捷邦科技:5月9日融资买入82.88万元,融资融券余额3567万元 环球聚看点
- 环球最资讯丨3万工人"入企即入校" 企业新型学徒制在沪实施
- 寿仙谷: 衷心感谢您对公司发展的关心和支持。公司在灵芝孢子粉领域已形成一定品牌力
- 全球观速讯丨5月下旬起吉星入命,运势大涨,好运不断,财运连连
- 佳能3680打印机驱动下载官网_佳能3680打印机驱动 天天日报
- 业绩历史最佳估值历史最低,新能源何时否极泰来_今头条
- 全球聚焦:三夫户外:杭州X-BIONIC+Klattermusen(攀山鼠)+CRISPI三品牌旗舰店预计6月开业
- 当前快看:南方传媒(601900)5月9日主力资金净卖出7964.49万元
- 焦点关注:名IP亮相 “老朋友”新故事值得期待 电影市场即将踏入“大片季”
- 天天观天下!微信炒股教程_微信炒股交流群
- 比利时海上安装公司DEME Offshore海工获得法国海上风电合同-环球新动态
- 全球速讯:樱第三方抽
- 元音用an辅音用a_元音
- 黔南州气象台发布大雾黄色预警信号【Ⅲ/较重】【2023-05-09】 速递
- 美国得州购物中心枪击事件遇难者包括3名儿童 枪手疑为新纳粹分子_天天要闻
- 电瓶车电瓶能用多久更换_电瓶车电瓶能用多久
- 迅雷11_11 25 全球播资讯
- 供电公司施工,本周五上午交管局曝光台将暂停服务
- 新高天量长阴该当如何
- 环球焦点![就医直通]兰州有没有好点的专科白癜风医院-白点癫风只用一种什么药能看好吗
- 当前报道:“挖呀挖”:全民低幼化背后的悲剧
- 与往年不同,今年莫斯科红场阅兵取消空中阅兵环节
- 焦点要闻:最低温度降至零下 甘肃两地发布霜冻蓝色预警
- 环球消息!SMM评论:需求跟进低于预期 钨价回调趋势初显
- 新资讯:亚马逊开始收取10美元提货费用
- 代购买到假货多少钱可以立案
- 好消息!国内成品油价格此次将要“2连跌”-时快讯
- 声光电绝美呈现!这个“中国首座”背后的硬核技术-环球观点
- 灌南金针菇_关于灌南金针菇介绍
- 超算预测英超结局:曼城夺冠,曼联力压利物浦进前四,埃弗顿降级 全球新消息
- 延安子长:老百姓身边党的二十大精神宣讲队乡村行 时快讯
- 讯息:宝马第一季度财报:汽车业务利润率达12.1%
- 为什么“么么儿”萌兰的秋千是铁的?其实都是凭本事换来的! 实时
- 备受资金青睐连续10天资金净流入,数字经济ETF(159658)震荡上涨近1% |全球速讯
- 当前关注:惠同新材过会:今年IPO过关第102家 中金公司过3单
- 视讯!季线图
- 泰国天然乳胶床垫价格_天然乳胶床垫价格
- 全球热文:方寸之地见匠心
- 当前消息!三一重能:5月8日融券净卖出13.55万股,连续3日累计净卖出17.34万股
- 当前消息!恩施州气象台发布雷电黄色预警【III级/较重】【2023-05-09】
X 关闭
行业规章
X 关闭