OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2596|回复: 11

移植的一个hc-sr04测距有问题,,,

[复制链接]

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
发表于 2018-10-6 21:17:24 | 显示全部楼层 |阅读模式
20金钱
大概50ms读取一次距离,但出口输出的值一直在1000上下浮动,明显是有问题的,代码如下:

#include "distance.h"
#include "delay.h"
#include "stdio.h"

/**************************************************************************
函数功能:定时器4通道1输入捕获初始化
入口参数:入口参数:arr:自动重装值  psc:时钟预分频数
返回  值:无

pb0 控制端口

检测  pb6    timer4 ch1  
**************************************************************************/
u8 TIM4CH1_CAPTURE_STA = 0;        //通道1输入捕获标志,高两位做捕获标志,低6位做溢出标志               

u16 TIM4CH1_CAPTURE_VAL;                //记录捕获值

/**************************************************************************
函数功能:定时器4通道1输入捕获初始化
入口参数:arr:自动重装值  psc:时钟预分频数
返回  值:无
**************************************************************************/
void TIM4_Cap_Init(u16 arr,u16 psc)       
{         
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
  TIM_ICInitTypeDef  TIM_ICInitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);        //使能TIM4时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能GPIOB时钟
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PB0 输入  GPIO_Mode_IPD                GPIO_Mode_IN_FLOATING
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;     
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //PB0输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        TIM_TimeBaseStructure.TIM_Period = arr;                                                                 //设定计数器自动重装值                 65535                                        400cm时高电平约为23.529ms
        TIM_TimeBaseStructure.TIM_Prescaler =psc;                                                         //预分频器   72 - 1  时钟1Mhz                                               
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

        TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕获
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //配置输入分频,不分频
  TIM_ICInitStructure.TIM_ICFilter = 0x00;//配置输入滤波器 不滤波
  TIM_ICInit(TIM4, &TIM_ICInitStructure);
       
        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占优先级2级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级0级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器        
        TIM_ITConfig(TIM4,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断 ,允许CC1IE捕获中断       
  TIM_Cmd(TIM4,ENABLE );         //使能定时器4               
}

/**************************************************************************
函数功能:超声波接收回波函数
入口参数:无
返回  值:无
**************************************************************************/

void Read_Distane(void)
{   
         PBout(0)=1;
         delay_us(15);  
         PBout(0)=0;       
                if(TIM4CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
                {
                        Distance=TIM4CH1_CAPTURE_STA&0X3F;
                        Distance*=65536;                                               //溢出时间总和
                        Distance+=TIM4CH1_CAPTURE_VAL;         //得到总的高电平时间
                        Distance=Distance*170/1000;      //单位转换为mm
                        TIM4CH1_CAPTURE_STA=0;                             //开启下一次捕获
                }                               
}
/**************************************************************************
函数功能:超声波回波脉宽读取中断
入口参数:无
返回  值:无
**************************************************************************/
void TIM4_IRQHandler(void)
{                                                                   
        u16 tsr;
        tsr=TIM4->SR;                //状态寄存器
        if((TIM4CH1_CAPTURE_STA&0X80)==0)//还未成功捕获       
                                {
                                             if(tsr&0X01)//溢出        即更新
                                                                {            
                                                                                if(TIM4CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
                                                                                {
                                                                                        if((TIM4CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
                                                                                        {
                                                                                                TIM4CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
                                                                                                TIM4CH1_CAPTURE_VAL=0XFFFF;
                                                                                        }
                                                                                        else
                                                                                                TIM4CH1_CAPTURE_STA++;
                                                                                }         
                                                                }
                                                  if(tsr&0x02)//捕获1发生捕获事件        0000 0010
                                            {       
                                                                                if(TIM4CH1_CAPTURE_STA&0X40)                //捕获到一个下降沿                 0100 0000
                                                                                {                                 
                                                                                        TIM4CH1_CAPTURE_STA|=0X80;                //标记成功捕获到一次高电平脉宽                1100 0000
                                                                                        TIM4CH1_CAPTURE_VAL=TIM4->CCR1;        //获取当前的捕获值.
                                                                                        TIM4->CCER&=~(1<<1);                        //CC1P=0 设置为上升沿捕获
                                                                                }
                                                                                else                                                                  //还未开始,第一次捕获上升沿                TIM4CH1_CAPTURE_STA初始为0000 0000
                                                                                {
                                                                                        TIM4CH1_CAPTURE_STA=0;                        //清空
                                                                                        TIM4CH1_CAPTURE_VAL=0;                       
                                                                                        TIM4CH1_CAPTURE_STA|=0X40;                //标记捕获到了上升沿
                                                                                        TIM4->CNT=0;                                             //计数器清空
                                                                                        TIM4->CCER|=1<<1;                                 //设置为下降沿捕获
                                                                                }                    
                                                    }                                                                                   
                   }
                         TIM4->SR=0;//清除中断标志位              
}

哪里有问题呢??。。。。。。


最佳答案

查看完整内容[请看2#楼]

是开发板的话先检查下捕获IO有没有别的硬件外设占用,不行你试试这个 .c [mw_shl_code=applescript,true]#include "timer.h" #include "includes.h" u16 TIM3CH1_CAPTURE_STA = 0; //通道1输入捕获标志,高两位做捕获标志,低14位做溢出标志 u16 TIM3CH1_CAPTURE_UPVAL,TIM3CH1_CAPTURE_DOWNVAL; u32 CH1_Time; //捕获电平的间隔时间,通过初始化代表高高,高低,低低的间隔时间 // ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-10-6 21:17:25 | 显示全部楼层
本帖最后由 275891381 于 2018-10-7 19:22 编辑
Gwvfbukn 发表于 2018-10-7 16:43
哪位用过的有空帮看看吧。。。看两天了,,,额
是开发板的话先检查下捕获IO有没有别的硬件外设占用,不行你试试这个
.c
[mw_shl_code=applescript,true]#include "timer.h"
#include "includes.h"

u16 TIM3CH1_CAPTURE_STA = 0;        //通道1输入捕获标志,高两位做捕获标志,低14位做溢出标志               
u16 TIM3CH1_CAPTURE_UPVAL,TIM3CH1_CAPTURE_DOWNVAL;



u32 CH1_Time;        //捕获电平的间隔时间,通过初始化代表高高,高低,低低的间隔时间
//定时器4通道1输入捕获配置
float CH1_cm;        //捕获电平的间隔时间,通过初始化代表高高,高低,低低的间隔时间


void CSB_Init(void)
{
         GPIO_InitTypeDef  GPIO_InitStructure;
               
         RCC_APB2PeriphClockCmd( Trig_Echo_RCC_APB2Periph_GPIOx , ENABLE);         //使能PC端口时钟
               
         GPIO_InitStructure.GPIO_Pin = Trig;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
         GPIO_Init(Trig_Echo, &GPIO_InitStructure);                                       
         GPIO_ResetBits(Trig_Echo,Trig);                                                
}

//Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
//计数频率=Tclk/(PSC+1)=72m/72=1m
void TIM3_Cap_Init(u16 arr, u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
  TIM_ICInitTypeDef TIM3_ICInitStructure;
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能TIM4时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIOB时钟

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOA, GPIO_Pin_6);

        //初始化定时器3 TIM3         
        TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
        TIM_TimeBaseStructure.TIM_Prescaler = psc;         //预分频器
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位


        //初始化TIM3输入捕获参数 通道1
        TIM3_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01         选择输入端 IC1映射到TI1上
        TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕获
        TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
        TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;          //配置输入分频,不分频
        TIM3_ICInitStructure.TIM_ICFilter = 0x08;          //IC1F=0000 配置输入滤波器 0不滤波
        TIM_ICInit(TIM3, &TIM3_ICInitStructure);
        
        //中断分组初始化
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级1级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级0级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);   //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

        TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC1,ENABLE);   //允许更新中断,允许CC1IE,CC2IE,CC3IE,CC4IE捕获中断        
        TIM_Cmd(TIM3, ENABLE);                 //使能定时器4
}

//定时器3中断服务程序
void TIM3_IRQHandler(void)
{
                if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
                {        
                          //通道1                                       
                                if(TIM3CH1_CAPTURE_STA&0X8000)//已经捕获到高电平了
                                {
                                                if((TIM3CH1_CAPTURE_STA&0X7FFF)==0X7FFF)//高电平太长了
                TIM3CH1_CAPTURE_STA = 0;                //捕获标志位清零
                                                else
                                                                TIM3CH1_CAPTURE_STA++;
                                }
                }
               
                //通道1
                if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)                 //捕获1发生捕获事件
                {
                                
                                if (TIM3CH1_CAPTURE_STA & 0X8000)                //捕获到一个下降沿
                                {
                                                TIM3CH1_CAPTURE_DOWNVAL = TIM_GetCapture1(TIM3);//记录下此时的定时器计数值
                                                TIM_OC1PolarityConfig(TIM3, TIM_ICPolarity_Rising); //设置为上升沿捕获
                                                CH1_Time = TIM3CH1_CAPTURE_DOWNVAL - TIM3CH1_CAPTURE_UPVAL+ 65536*(TIM3CH1_CAPTURE_STA&0X7FFF);                //得到总的高电平的时间

                                          TIM3CH1_CAPTURE_STA = 0;                //捕获标志位清零                                       
                                }
                                else //发生捕获时间但不是下降沿,第一次捕获到上升沿,记录此时的定时器计数值
                                {
                                                TIM3CH1_CAPTURE_UPVAL = TIM_GetCapture1(TIM3);                //获取上升沿数据
                                                TIM_OC1PolarityConfig(TIM3, TIM_ICPolarity_Falling);//设置为下降沿捕获
                                                TIM3CH1_CAPTURE_STA |= 0X8000;                //标记已捕获到上升沿
                                }
                }
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update);                 //清除中断标志位               
}





void Ceju_CH(void)
{
      GPIO_SetBits(Trig_Echo,Trig);
            delay_us(10);
            GPIO_ResetBits(Trig_Echo,Trig);
}


[/mw_shl_code]
.h
[mw_shl_code=applescript,true]#include "sys.h"

extern u32 CH1_Time;        //捕获电平的间隔时间,通过初始化代表高高,高低,低低的间隔时间


#define Trig_Echo_RCC_APB2Periph_GPIOx   RCC_APB2Periph_GPIOA
#define Trig_Echo                        GPIOA
#define Trig                             GPIO_Pin_5
//      Echo1                            A6


void TIM3_Cap_Init(u16 arr, u16 psc);
void CSB_Init(void);
void Ceju_CH(void);

[/mw_shl_code]
main
[mw_shl_code=applescript,true]
#include "includes.h"


#define jishu_pinlv_psc 0  //计数频率=Tclk/(PSC+1)=72m 这个越大越准确
//根据实验测试,电平持续时间小于10us会出现捕捉不到,也就是会丢失一次跳变,进而得出采样频率max=1/(10/1000000)=100kHz
int main()
{        

                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
                delay_init();                     //延时函数初始化
                USART1_Init(115200,0);         //串口初始化为115200

                TIM3_Cap_Init(0xffff,jishu_pinlv_psc); //计数频率=Tclk/(PSC+1)   以Tclk/(PSC+1)hz的频率计数 溢出设置最大
          CSB_Init();
        
                delay_ms(100);
          printf("ok.....\r\n");

                while(1)
                {
                                Ceju_CH();

                                printf("Channel 1: %06.2fms   ",CH1_Time/1000.0);
                                printf("Channel 1: %06.2fcm\r\n",CH1_Time/1000000.0*340/2.0*1.5);

                                delay_ms(100);
                }
}
[/mw_shl_code]


回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-10-6 21:37:17 | 显示全部楼层
Read_Distane好像有点问题吧,PBout(0)=0; 过一会会发脉冲 在过一会才能监测高电平;你这PBout(0)=0; 以后if(TIM4CH1_CAPTURE_STA&0X80)肯定捕获不到高电平,if就过去了,假如你再次read由执行一遍使能

最简单的就是PBout(0)=0;  后面改为
while(没有捕获)
{
   超时处理,超时跳出while,继续下次Read_Distane
}
再if(TIM4CH1_CAPTURE_STA&0X80)
{
}
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2018-10-7 16:30:46 | 显示全部楼层
275891381 发表于 2018-10-6 21:37
Read_Distane好像有点问题吧,PBout(0)=0; 过一会会发脉冲 在过一会才能监测高电平;你这PBout(0)=0; 以后i ...

中间加:
while(TIM4CH1_CAPTURE_STA&0x80 == 0)
         {
                                printf("等待\r\n");
         }
也不行。。

开启预分频器会有错误的值,关闭预分频器就是0了,预分频器是必须要开启了才能读吗?

stlink仿真时也可以看到上下沿捕获交替进行,但预分频器里的值明显是错误的,用手遮挡超声波模块也不会有明显变化,维持在一个很大的值,但装载周期是65535,分频71,一次计数1个微秒应该是没错的吧,会是哪里的问题?
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2018-10-7 16:38:24 | 显示全部楼层
275891381 发表于 2018-10-6 21:37
Read_Distane好像有点问题吧,PBout(0)=0; 过一会会发脉冲 在过一会才能监测高电平;你这PBout(0)=0; 以后i ...

如果检测正常的话定时器应该是不会溢出的,但最后的值非常大,明显是溢出很多次了,用串口数了下每次采样都会溢出9ci,,,哪里都是莫名其妙。。。
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2018-10-7 16:43:54 | 显示全部楼层
哪位用过的有空帮看看吧。。。看两天了,,,额

8_distance_demo_未完成.rar

6.42 MB, 下载次数: 1575

sr04,问题代码

回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2018-10-7 20:55:45 | 显示全部楼层
275891381 发表于 2018-10-7 19:20
是开发板的话先检查下捕获IO有没有别的硬件外设占用,不行你试试这个
.c
[mw_shl_code=applescript,true] ...

我用的是f103c8t6的最小系统板,用一个新板子写你的程序后接sr04基本正常,但我把你的程序移到我之前的代码里,把timer3改成timer4,pa5改pb0,pa6改pb6后就又不正常了,串口输出的高电平有10s...但刷新速率却很快。。。奇怪的很了
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2018-10-7 22:35:50 | 显示全部楼层
本帖最后由 Gwvfbukn 于 2018-10-7 22:43 编辑
275891381 发表于 2018-10-7 19:20
是开发板的话先检查下捕获IO有没有别的硬件外设占用,不行你试试这个
.c
[mw_shl_code=applescript,true] ...

应该是移植的时候少改什么了,我把我更改的都用宏定义换出来了,移植的时候只用改这些就能用了吗?

#define dingshiqi   TIM3
#define dingshiqi_port                 GPIOA
#define dingshiqi_io         GPIO_Pin_7
#define dingshiqi_clock                RCC_APB1Periph_TIM3
#define dingshiqi_port_clock         RCC_APB2Periph_GPIOA
#define dingshiqi_Channel         TIM_Channel_2
#define dignshiqi_IRQ         TIM3_IRQn
#define dingshiqi_ccIRQ         TIM_IT_CC2
#define dingshiqi_irqhandler         TIM3_IRQHandler
#define dignshiqi_get                TIM_GetCapture2
#define dignshiqi_setPolarity                TIM_OC2PolarityConfig
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-10-8 09:28:31 | 显示全部楼层
本帖最后由 275891381 于 2018-10-8 09:37 编辑
Gwvfbukn 发表于 2018-10-7 22:35
应该是移植的时候少改什么了,我把我更改的都用宏定义换出来了,移植的时候只用改这些就能用了吗?

#d ...

一个函数一个函数的移植,看到哪里出错的,出错函数内几行几行的移植,直到找到错误,再者上传你移植后的代码吧
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2018-10-8 20:18:08 | 显示全部楼层
275891381 发表于 2018-10-8 09:28
一个函数一个函数的移植,看到哪里出错的,出错函数内几行几行的移植,直到找到错误,再者上传你移植后的 ...

找到问题了。。我给的3.3v电源。。5v你的那个程序就正常使用了,
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-10-8 22:17:23 | 显示全部楼层
Gwvfbukn 发表于 2018-10-8 20:18
找到问题了。。我给的3.3v电源。。5v你的那个程序就正常使用了,

ok。。。。。。。。。。。。。。。。
回复

使用道具 举报

22

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
246
金钱
246
注册时间
2018-8-1
在线时间
43 小时
 楼主| 发表于 2018-10-9 12:52:53 | 显示全部楼层
275891381 发表于 2018-10-8 22:17
ok。。。。。。。。。。。。。。。。

唉,太粗心了,以后要注意了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 14:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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