江协科技/江科大-STM32入门教程-18.示例程序(编码器接口测速)


0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发_stm32江协大 csdn-CSDN博客文章浏览阅读3.4k次,点赞47次,收藏143次。江协科技/江科大-STM32标准库开发-各章节详细笔记-传送门至各个章节笔记。基本上课程讲的每句都详细记录,方便回顾。_stm32江协大 csdnhttps://blog.csdn.net/m0_61712829/article/details/132434192?spm=1001.2014.3001.5501

main.c

这段代码主要作用是通过定时器定时执行 `TIM2_IRQHandler` 中断服务程序,在定时器中断处理函数中读取编码器的值,并将其存储在 `speed` 变量中,然后在主循环中利用 OLED 显示器显示速度值。

值得注意的是,在 `main` 函数中需要调用 `OLED_Init()` 进行 OLED 显示器的初始化,并在使用 OLED 显示的地方调用 `OLED_ShowString` 和 `OLED_ShowSignedNum` 函数进行显示。

除了这些代码片段外,程序的其他部分,例如 `OLED_Init`、`Timer_Init`、`Encoder_init` 等函数的定义以及头文件的包含内容,以及关于定时器和编码器的配置,也是非常重要的。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"
#include "Encoder.h"


uint16_t speed;

int main(void)
{
	
	OLED_Init();	//初始化OLED
	Timer_Init();    //初始化定时器
	Encoder_init();
	
	OLED_ShowString(1,1,"speed:");

	while(1)
	{
		OLED_ShowSignedNum(1,7,speed,5);//每隔一段时间读取一次;用定时中断
	}

}


//定时器2中断函数放在使用中断的main.c文件中;在startup文件中;定时中断每隔1s执行一次
void TIM2_IRQHandler(void) //当定时器产生更新中断时,这个函数就会自动被执行
{
	//检查中断标志位
	if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET)
	{
	//执行相应的用户代码
		speed = Encoder_Get();   //定时器每隔1s读取一下速度,存在speed变量里
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除标志位
	}

}

Encoder.c

这段代码是针对 STM32 微控制器的编码器初始化和测速函数的实现,用于读取编码器的旋转位置和速度。以下是对代码的简要说明:

1. `Encoder_init` 函数是编码器的初始化函数,主要包括了以下几个步骤:
   - 开启时钟,选择内部时钟,以及初始化 GPIO 接口。
   - 配置时基单元 TIM3,设置预分频器、计数器模式和周期等参数。
   - 配置输入捕获单元(通道)TIM_ICInit,设置滤波器和极性。
   - 最后调用 `TIM_EncoderInterfaceConfig` 函数配置编码器接口。
   - 启动定时器 TIM3。

2. `Encoder_Get` 函数是用于测速的函数,主要实现了在固定的时间间隔内读取一次计数器的值,并清零计数器。函数返回了测量得到的编码器的变化值,即速度信息。

#include "stm32f10x.h"                  // Device header

//编码器旋转控制CNT自增自减	
//编码器初始化函数,编码器电路初始化后,CNT就会随着编码器旋转而自增自减;直接读出CNT值就能测量编码器的位置;测量编码器的速度和方向就需要每隔一段固定的闸门时间取出一次CNT然后再把CNT清零这就是测频法测量速度了
/*
第一步,RCC开启时钟,开启GPIO和定时器的时钟
第二步,配置GPIO,需将PA6和PA7配置成输入模式
第三步,配置时基单元,预分频器一般选择不分频,ARR一般给最大值655535,只需要CNT执行计数就行了
第四步,配置输入捕获单元,这里只有滤波器和极性两个参数有用,后面的参数没有用到,与编码器无关
第五步,配置编码器接口模式,直接调用一个库函数
最后,调用TIM_Cmd,启动定时器
*/

void Encoder_init(void)
{
	//1.打开时钟,选择内部时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	//2.初始化GPIO
	GPIO_InitTypeDef GPIO_InitStructure;		
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入,与外部模块保持默认电平一致(上拉与下拉的选择原则);一般来说是默认高电平,所以一般上拉输入用的比较多;若不确定外部模块输出的默认状态或外部信号输出功率非常小,这时就尽量选择浮空输入(浮空输入:没有上拉和下拉电阻去影响外部信号,缺点是当引脚悬空,没有默认的电平了,输入就会受噪声干扰,来回不断地跳变)
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;	
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_Init(GPIOA,&GPIO_InitStructure);		
	
	//不需要初始化时基单元下面这个内部时钟函数,因为编码器接口会托管时钟,编码器接口就是一个带方向控制的外部时钟,所以内部时钟就不用了
	//TIM_InternalClockConfig(TIM3);
	
	//3.配置时基单元 
	/*
	公式:
	PWM 频 率:Freq = CK_PSC / (PSC + 1) / (ARR + 1)
	PWM占空比:Duty = CCR / (ARR + 1)
	PWM分辨率:Reso = 1 / (ARR + 1)
	*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;  //指定时钟分频
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,这个参数也是没有作用的,计数方向也是被编码器接口托管的
	TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;  //ARR 周期 ,满量程计数,这样计数的范围是最大的而且方便换算成负数
	TIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;  //PSC 预分频器,不分频,编码器的时钟直接驱动计数器
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;  //重复计数器的值
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);	//初始化TIM3
	
	//4.配置输入捕获单元(通道),编码器接口只使用了通道1和2的滤波器和极性选择
	//首先定义结构体变量,然后StructInit给结构体赋一个初始值,再部分修改我们想要的参数,调用ICInit配置一遍电路,结构体变量的配置在调用ICInit函数之后就写入到硬件的寄存器了,所以ICInit之后这个结构体我们可以换个值继续使用、不需要重新定义新的结构体
	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICStructInit(&TIM_ICInitStructure);//结构体初始化,防止结构体中出现不确定值可能造成问题,最好用StructInit给结构体赋一个初始值
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;	//通道1
	TIM_ICInitStructure.TIM_ICFilter = 0xF;	//滤波器为0xF
	//TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;	//电平极性为上升沿,这里的上升沿参数代表的是高低电平极性不反转;等会配置编码器接口的时候也有极性配置,属于重复配置,这个其实可以删掉;这里的上升沿并不代表上升沿有效,因为编码器接口始终都是上升沿、下降沿都有效
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;	//通道2
	TIM_ICInitStructure.TIM_ICFilter = 0xF;	//滤波器为0xF
	//TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;	//电平极性为上升沿,这里的上升沿参数代表的是高低电平极性不反转;等会配置编码器接口的时候也有极性配置,属于重复配置,这个其实可以删掉;这里的上升沿并不代表上升沿有效,因为编码器接口始终都是上升沿、下降沿都有效
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	
	//5.配置编码器接口,只需调用一个函数就行了;;需保证TIM_EncoderInterfaceConfig在TIM_ICInit函数之后,否则TIM_ICInit覆盖TIM_EncoderInterfaceConfig函数的配置
	TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);//选择Rising是通道不反相,选择Falling是通道反相;重复配置TIM_ICPolarity_Rising,后面的参数会覆盖前面的参数配置
	
	//6.启动定时器
	TIM_Cmd(TIM3,ENABLE);
}

int16_t Encoder_Get(void)
{
	//测速,在固定的匝门时间读一次CNT然后把CNT清零
	int16_t temp;//因为要先读取CNT再清零,所以要用temp缓存一下
	temp = TIM_GetCounter(TIM3);//读取CNT
	TIM_SetCounter(TIM3,0);//CNT清零	
	return temp;

}


 

Encoder.h

这段代码是编码器模块的头文件 "Encoder.h" 的内容。它使用了条件编译指令,防止头文件的重复包含。

在头文件中,声明了两个函数的原型:
- `Encoder_init`:编码器的初始化函数。
- `Encoder_Get`:获取编码器的值(位置或速度)的函数。

同时,使用了预处理指令 `#ifndef`、`#define`、`#endif`,确保头文件只包含一次,以避免重复定义的错误。

通过包含这个头文件,其他源文件就可以使用 `Encoder_init` 和 `Encoder_Get` 函数进行编码器的初始化和获取编码器的值。

#ifndef __ENCODER_H
#define __ENCODER_H

void Encoder_init(void);
int16_t Encoder_Get(void);

#endif
STM32正交编码器测速程序
06-07
自己编写的正交编码器测速程序,硬件为STM32f103ZET6, 编译器为keil4,自己测试可以正常使用
STM32编码器测速外部中断和正交编码
03-09
编码器测速的两种方式外部中断和正交编码。-Two ways external interrupt and speed encoder quadrature encoder.有需要的朋友请下载
科大STM32入门资料
04-03
科大官方STM32入门教程资料(https://jiangxiekeji.com/download.html) 程序源码 参考文档 工具软件 固件库 课件ppt 模块资料
stm32编码器测速
yuanyuandebk的博客
04-17 7110
摘要:编码器是一种将角位移或者角速度转换成一串电数字脉冲的旋转式传感器。编码器又分为光电编码器和霍尔编码器。 霍尔编码器是有霍尔码盘和霍尔元件组成。霍尔码盘是在一定直径的圆板上等分的布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。 采集数据方式: 第一种软件技术直接采用外部中断进行采集,根据AB相位差的不同可以判断正负。 第二种硬件技术直接使用定时器的编码器模式。 这里采用第二种。也是大家常说的四倍频,提高测量精度的方法
STM32单片机(六)TIM定时器 -> 第八节:TIM编码器练习(编码器接口测速
AnChenliang_1002的博客
06-19 428
本小节是对第七小节TIM编码器接口的内容写程序进行练习,即编码器接口测速
STM32 编码器接口测速
Echo_cy_的博客
03-07 2731
如何用编码器旋转控制CNT自增自减,本文介绍编码器接口测速的配置步骤。以上就是今天要讲的内容,本文仅仅简单介绍了编码器接口测速配置步骤、需要用到的库函数以及具体参数配置。
基于STM32光电编码器测速
12-01
基于STM32f103的欧姆龙的光电码编码器测速,及在12864液晶上显示速度
STM32编码器测速
m0_57333603的博客
04-15 3591
编码器是一种能将直线位移、角位移数据转换为脉冲信号、二进制编码的设备。它本质上就是一个传感器,可以把角位移或直线位移转换成电信号,并反馈给控制器,使控制器知道当前机械运动的位置、角度等信息。编码器按照检测原理可以分为光电式和磁电式;按照编码类型可分为增量式和绝对式。在实际的应用中,这四类编码器并不是相对独立的,它们经过组合后,就变成了光电绝对式、光电增量式、磁电绝对式和磁电增量式这四种编码器
stm32编码器电机测速(hal库)
2303_77805026的博客
05-03 7309
记录一下今天参考别人的代码实现了四个电机的测速编码器被广泛应用于电机测速,实现电机闭环控制。所以不论是自己做小车还是后续参加各种比赛,必须要学会编码器测速
STM32编码器测速代码
04-15
STM32使用定时器的编码器模式进行测速 适用于编码盘的直流减速电机 适用于增量编码器
STM32F103C8江协科技/科大教程中所用的老版本 STM32 的SPL库,在PlatformIO上使用.zip
03-29
嵌入式优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人单片机开发经验充足,深耕嵌入式领域,有任何使用问题欢迎随时与我联系,我会...
科大STM32入门教程资料(课程源码)
最新发布
05-31
探索STM32的奥秘 —— 科技大学STM32入门资料 简介: 科技大学精心准备的STM32入门资料,为嵌入式系统爱好者和学习者提供了一份全面的学习指南。这份资源涵盖了STM32微控制器的基础知识、核心概念、编程方法...
科大STM32入门-TIM编码器接口
04-03
在本教程中,我们将深入探讨STM32的TIM编码器接口,以便初学者能够快速掌握这一关键功能。 编码器接口STM32中的主要作用是捕捉电机或其他旋转设备的转速和位置信息。STM32支持两种类型的编码器模式:单相和双相。...
STM32入门教程资料.rar
03-01
STM32是一系列由ST Microelectronics(意法半导体公司)推出的微控制器(MCU)。这些微控制器基于ARM Cortex-M架构,并且提供各种不同的封装和引脚配置。STM32系列中一些受欢迎的微控制器包括STM32F103,STM32F407和...
科大STM32:旋转编码器接口
weixin_52958292的博客
01-23 1199
通过调整极性就可以改回来,调整引脚,给某一个极性反相都可以恢复到正确状态。此图展示了,向上计数,和向下计数,以及抗噪声的原理。TI1 反相后,需要对TI1取反,才是正确的。一般情况适用最下面的计数方式,精度最高。
stm32-编码器测速
2301_79330491的博客
03-14 4475
编码电机旋转编码器A,B相分别接通道一和二的引脚,VCC,GND接单片机VCC,GND。
STM32单片机编码器测速
热门推荐
Susquehanna的博客
08-23 6万+
一、实验工具:STM32开发板一块、L298N电机驱动、直流电机 以及用到的软件(STM32CubeMX、keil4)   二、编码器原理 1.概述:编码器是一种将角位移或者角速度转换成一串电数字脉冲的旋转式传感器。编码器又分为光电编码器和霍尔编码器,我们这里用到的是霍尔编码器。 2.霍尔编码器工作原理:一种通过磁电转换将输出的机械几何位移量转换成脉冲或数字量的传感器,霍尔编码器室友霍尔
stm32编码器接口测速
m0_62598303的博客
02-19 1009
stm32编码器接口测速
江协科技/科大-STM32入门教程-1.STM32简介、系统介绍、软件安装
嵌入式阿齐Archie
08-19 3万+
江协科技/科大-STM32入门教程-1.STM32简介、系统介绍、软件安装
科大自化协stm32pwm
07-28
您好!对于科大自化协的STM32 PWM的使用,我可以为您提供一些基本的指导。首先,您可以按照以下步骤来设置STM32的PWM功能: 1. 配置GPIO引脚:选择一个合适的GPIO引脚,并将其设置为PWM输出模式。 2. 配置定时器:选择一个合适的定时器,并根据您的需求进行配置。您可以设置定时器的时钟源、预分频系数、计数模式等。 3. 配置PWM模式:选择合适的PWM模式,例如单边模式或双边模式。您可以通过设置ARR(自动重装载寄存器)和CCR(捕获/比较寄存器)来调整PWM的频率和占空比。 4. 启动定时器和PWM输出:在完成上述配置后,启动定时器以及相应的PWM输出通道。 这只是一个基本的概述,具体的配置步骤可能会因为您使用的具体STM32系列和开发环境而有所差异。您可以参考相关的STM32芯片手册和开发工具提供的文档来获取更详细的信息和示例代码。 希望这些信息对您有所帮助!如果您有任何进一步的问题,请随时提问。
写文章

热门文章

  • 0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发 72060
  • 【物联网】手把手完整实现STM32+ESP8266+MQTT+阿里云+APP应用——第1节-阿里云配置+MQTT.fx模拟与使用AT命令发布订阅消息 47607
  • 【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末工程资料下载) 42984
  • 【物联网项目】基于ESP8266设计的家庭灯光与火情智能监测系统(文末完整工程资料源码PPT等) 38270
  • 【立创EDA-PCB设计基础完结】7.DRC设计规则检查+优化与丝印调整+打样与PCB生产进度跟踪 37027

分类专栏

  • 完整实现STM32+ESP8266+MQTT+阿里云+APP 付费 6篇
  • 单片机项目合集 付费 36篇
  • 嵌入式人工智能开发 付费 7篇
  • 立创EDA速成-原理图PCB设计-零基础完整设计出PCB板 付费 7篇
  • STM32单片机项目 1篇
  • 51单片机项目 1篇
  • 物联网嵌入式项目 1篇
  • 嵌入式智能算法项目
  • 嵌入式软件 7篇
  • Linux 7篇
  • 江协科技STM32标准库开发 20篇
  • 嵌入式相关方法算法 2篇
  • 网络与通信 6篇
  • RTOS
  • STM32 HAL库开发 3篇
  • Android软件开发 2篇
  • C语言程序设计-基础入门到进阶-嵌入式阿齐 7篇
  • 嵌入式硬件 11篇
  • 电路 6篇
  • ARM 3篇
  • 机器人 4篇
  • 人工智能 5篇
  • 深度学习 13篇
  • 数据分析 2篇
  • 人工智能应用 4篇
  • 人工智能算法 2篇
  • Python 3篇
  • Bug 11篇
  • 嵌入式阿齐 19篇

最新评论

  • openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接

    韩楚风: 大佬的文章让我对这领域的技术问题有了更深入的了解,尤其是大佬提到的那些“坑点”,我相信能够在实际应用中避免或解决很多问题。谢谢大佬的分享,期待大佬的更多精彩文章,让我们共同学习、进步。

  • openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接

    不去幼儿园: 优质好文,博主的文章细节很到位,技术干货很多,感谢博主的用心分享。表情包

  • openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接

    %编程爱好者%: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文

  • openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接

    愚公搬代码: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文

  • openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接

    爱编程的喵喵: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文

大家在看

  • Moectf-week2-wp 119
  • Java之异常体系 781
  • Java线程安全 502
  • C++ string的精讲 1128
  • 基于SpringBoot+Vue的可盈保险合同管理系统+万字论文+Mp4演示

最新文章

  • openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接
  • P2-3与P2-4.【C语言基本数据类型、运算符和表达式】第三节与第四节
  • P2-1与P2-2.【C语言基本数据类型、运算符和表达式】第一节与第二节
2024
10月 7篇
09月 18篇
08月 22篇
07月 10篇
06月 2篇
04月 16篇
03月 10篇
02月 5篇
01月 19篇
2023年53篇
2022年17篇

目录

目录

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿齐Archie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家唐河玻璃钢雕塑厂家许昌佛像玻璃钢卡通雕塑公司伊春人物玻璃钢雕塑价格辽宁玻璃钢雕塑工程产品介绍杭州玻璃钢马雕塑内江玻璃钢仿铜雕塑五华区玻璃钢雕塑设计制作景洪玻璃钢人物雕塑湖南动物玻璃钢雕塑定做价格南通商场节庆美陈商场玻璃钢花盆报价江苏商场美陈道具杭州玻璃钢雕塑长沙抽象玻璃钢雕塑多少钱天津定制玻璃钢雕塑价位长沙水景玻璃钢彩绘雕塑公司玻璃钢雕塑一平方多少江西大型玻璃钢雕塑公司冬季商场外围美陈武汉动物玻璃钢雕塑安装安徽佛像玻璃钢雕塑玻璃钢雕塑安装施工方案贵阳景观玻璃钢雕塑联系方式玻璃钢雕塑供应欢迎来电广东户外商场美陈报价鄂城玻璃钢花盆花器南京 玻璃钢花盆河北周年庆典商场美陈采购新乡玻璃钢浮雕园林不锈钢雕塑玻璃钢雕塑贵还是grc贵香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化