完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
声明
代码是依赖于买来的stm32f1zet6(淘宝上买来的最小系统) 里面提供的历程改来的,因为里面有封装好的函数,和正点原子的类似。 首先这是我大二参加学校智能车竞赛的代码,因为自己没有掌握到调车的技巧,最后呈现出来的也不是很完美,今天从自己扎伦的电脑里面找到了这个不知道是不是最终版的文件,从分享到那时候比赛已经隔了很久了,很多写的具体细节也忘了,不过代码里面基本上有注释。 硬件的话看看之后会不会想分享! 智能车代码文件等我上传审核成功后会在评论里发出下载地址 类型 红外寻迹小车 项目结构 具体文件内容 主要说明几个比较重要的文件 main.c #include “stm32f10x.h” #include “sys.h” #include “delay.h” #include “motor.h” #include “pwm.h” #include “tiai.h” #include “timer.h” // 全局变量 ----------------------------------------------------------- //u16 C_Not_Find_Black = 0 ; // 未发现黑线计时 //u8 F_Not_Find_Black_STOP = 0 ; // 长时间未发现黑线标志位 ----------------------------------------------------------- int main(void) { // int i=0; // 注:程序中使用中断时,NVIC分组设置应尽量位于程序起始处,并且在设置后尽量不要再更改NVIC分组 //------------------------------------------------------------------------------------------ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //NVIC分组2:2位抢占优先级,2位响应优先级 delay_init(); // 延时初始化(注:调用延时函数之前,必须先调用delay_Init()将SysTick初始化) TIM1_PWM_Init_JX(); // TIM1_PWM初始化 TIM4_PWM_Init_JX(); // TIM4_PWM初始化 TIM3_PWM_Init_DJ(999,719); //舵机定时器的初始化 Trail_Input_Init_JX(); // 红外寻迹初始化 delay_ms(200); while(1) { Trail_black_line(); if((PAin(7)==0)&&(S_Trail_Input == AAA_B_AAA)&&(PCin(15)==0)) //000_1_000 { Car_forward_zhizhou(50); TIM_SetCompare4(TIM3,18); //直底--0 } else if((PCin(15)==0)&&(S_Trail_Input==AAA_A_AAA)&&(PAin(7)==0)) //0_000_0_000_0 { Car_Turn_Left(50,50); //TIM_SetCompare4(TIM3,23); //左转--45 TIM_SetCompare4(TIM3,18); //直底--0 } //右转********************* else if((PCin(15)==1)&&(S_Trail_Input==AAA_A_AAA)&&(PAin(7)==0)) //0_000_0_000_1 { Car_Turn_Right(50,50); TIM_SetCompare4(TIM3,24); //右转--45 } else if((PAin(7)==0)&&(S_Trail_Input==AAA_A_AAB)&&(PCin(15)==0)) //000_0_0000 { Car_Turn_Right(50,50); TIM_SetCompare4(TIM3,23); //右转--30 } else if((PAin(7)==0)&&(S_Trail_Input==AAA_A_ABB)&&(PCin(15)==0)) //000_0_011 { Car_Turn_Right(50,50); TIM_SetCompare4(TIM3,23); //右转--20 } else if((PAin(7)==0)&&(S_Trail_Input==AAA_A_ABA)&&(PCin(15)==0)) //000_0_010 { Car_Turn_Right(50,50); TIM_SetCompare4(TIM3,22); //右转--20 } else if((PAin(7)==0)&&(S_Trail_Input==AAA_A_BBA)&&(PCin(15)==0)) //000_0_110 { Car_Turn_Right(50,50); TIM_SetCompare4(TIM3,24); //右转--15 } else if((PAin(7)==0)&&(S_Trail_Input==AAA_A_BAA)&&(PCin(15)==0)) //000_0_100 { Car_Turn_Right(50,52); TIM_SetCompare4(TIM3,20); //右转--10 } else if((PAin(7)==0)&&(S_Trail_Input==AAA_A_BAA)&&(PCin(15)==0)) //000_0_100 { Car_Turn_Right(50,50); TIM_SetCompare4(TIM3,19); //右转--15 } //左转 else if((PAin(7)==1)&&(S_Trail_Input==AAA_A_AAA)&&(PAin(15)==0)) { Car_Turn_Left(50,50); TIM_SetCompare4(TIM3,14); //左转--45 } else if((PAin(7)==1)&&(S_Trail_Input==BAA_A_AAA)&&(PAin(15)==0)) { Car_Turn_Left(50,50); TIM_SetCompare4(TIM3,13); //左转--30 } else if((PAin(7)==0)&&(S_Trail_Input==BBA_A_AAA)&&(PAin(15)==0)) { Car_Turn_Left(50,50); TIM_SetCompare4(TIM3,14); //左转--20 } else if((PAin(7)==0)&&(S_Trail_Input==ABA_A_AAA)&&(PAin(15)==0)) { Car_Turn_Left(50,50); TIM_SetCompare4(TIM3,16); //左转--10 ||S_Trail_Input==ABB_A_AAA } else if((PAin(7)==0)&&(S_Trail_Input==AAB_A_AAA)&&(PAin(15)==0)) { Car_Turn_Left(50,50); TIM_SetCompare4(TIM3,17); //左转--5 } else if((PAin(7)==0)&&(S_Trail_Input==ABB_A_AAA)&&(PAin(15)==0)) { Car_Turn_Left(50,50); TIM_SetCompare4(TIM3,17); //左转--5 } else { TIM_SetCompare4(TIM3,18); //直底--0 Car_forward_zhizhou(50); } } } // TIM_SetCompare4(TIM3,18); //直底--0 // delay_ms(100); // TIM_SetCompare4(TIM3,11); //左转--45 // delay_ms(100); // TIM_SetCompare4(TIM3,13); //左转--30 // delay_ms(100); // TIM_SetCompare4(TIM3,14); //左转--20 // delay_ms(100); // TIM_SetCompare4(TIM3,15); //左转--15 // delay_ms(100); // TIM_SetCompare4(TIM3,16); //左转--10 // delay_ms(100); // TIM_SetCompare4(TIM3,17); //左转--5 // TIM_SetCompare4(TIM3,24); //右转--45 // delay_ms(100); // TIM_SetCompare4(TIM3,23); //右转--30 // delay_ms(100); // TIM_SetCompare4(TIM3,22); //右转--20 // delay_ms(100); // TIM_SetCompare4(TIM3,21); //右转--15 // delay_ms(100); // TIM_SetCompare4(TIM3,20); //右转--10 // delay_ms(100); // // TIM_SetCompare4(TIM3,19); //右转--5 // delay_ms(100); // TIM_SetCompare4(TIM3,11); // delay_ms(100); // // TIM_SetCompare4(TIM3,7); // delay_ms(100); // TIM_SetCompare4(TIM3,10); // delay_ms(100); // TIM_SetCompare4(TIM3,99); // delay_ms(100); // TIM_SetCompare4(TIM3,13); // delay_ms(100); // // Car_forward(50); // 前进 // Trail_black_line(); // 黑线检测函数 // // // 未发现黑线 // //------------------------------------------------------- // if( S_Trail_Input == Not_Find_Black_Line ) // { // if( F_Not_Find_Black_STOP == 1 ) // 判断是否长时间未发现黑线 // Car_Stop(CAR_FLAMEOUT); // 停车 // // else // Car_forward(20); // 前进 // } // //------------------------------------------------------- // // // // 发现黑线 // //--------------------------------------------------------------------------------------------------- // else // { // C_Not_Find_Black = 0; // 清除“未发现黑线计时”,计时在定时器中断函数中 // // F_Not_Find_Black_STOP = 0 ; // 清除“长时间未发现黑线标志位” // // // // 中间发现黑线 // //---------------------------------------------- // if( S_Trail_Input == Middle_Find_Black_Line ) // { // Car_forward(20); // 前进 // } // // // 左侧发现黑线 // //---------------------------------------------- // else if( S_Trail_Input == Left_Find_Black_Line || S_Trail_Input == Left_Middle_Find_Black_Line ) // { // Car_Turn_Left(40); // 左转 // } // // // 右侧发现黑线 // //---------------------------------------------- // else if( S_Trail_Input == Right_Find_Black_Line || S_Trail_Input == Right_Middle_Find_Black_Line ) // { // Car_Turn_Right(40); // 右转 // } // // // 其他情况 // //---------------------------------------------- // else // { // Car_Stop(CAR_FLAMEOUT); // 熄火 // } // //---------------------------------------------- // }// (发现黑线) // //--------------------------------------------------------------------------------------------------- // }// while(1) // //}// int main(void) |
|
|
|
pwm.c
#include “pwm.h” // TIM1_PWM输出初始化 // TIM1_CH1 = PA8 // TIM1_CH2 = PA9 // TIM1_CH3 = PA10 // TIM1_CH4 = PA11 // TIM1_Reload_Num = TIM1自动重装值 // TIM1_Frequency_Divide = 时钟预分频数 //----------------------------------------------------------------------------------------------------------------- void TIM1_PWM_Init_JX(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // 使能TIM1时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOB时钟 // 配置IO模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始A10 //初始化TIM1的计数模式、分频值、重装载值等 TIM_TimeBaseStructure.TIM_Period = TIM1_Reload_Num; // 设置下一个更新事件后,装入自动重装载寄存器的值 TIM_TimeBaseStructure.TIM_Prescaler =TIM1_Frequency_Divide; // 设置TIM3时钟预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // 根据参数初始化TIM1 //初始化TIM1_CH1-4的PWM TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 选择定时器模式:TIM脉冲宽度调制模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 比较输出使能 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Disable; // 比较输出N不使能 TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性:TIM输出比较极性高 TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset ; // TIM_OC1Init(TIM1, &TIM_OCInitStructure); // 数初始化TIM1_OC1 // TIM_OC2Init(TIM1, &TIM_OCInitStructure); // 数初始化TIM1_OC2 TIM_OC2Init(TIM1, &TIM_OCInitStructure); // 数初始化TIM1_OC3 // TIM_OC4Init(TIM1, &TIM_OCInitStructure); // 数初始化TIM1_OC4 TIM_ARRPreloadConfig(TIM1,ENABLE); // 使能TIM1的自动重装载寄存器 TIM_CtrlPWMOutputs(TIM1,ENABLE); // 主输出使能 // TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); // 使能TIM1在OC1上的预装载寄存器 // TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); // 使能TIM1在OC2上的预装载寄存器 TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); // 使能TIM1在OC3上的预装载寄存器 // TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); // 使能TIM1在OC4上的预装载寄存器 TIM_Cmd(TIM1, ENABLE); // 使能TIM1 } //----------------------------------------------------------------------------------------------------------------- // TIM4_PWM输出初始化 // TIM4_CH1 = PB6 // TIM4_CH2 = PB7 // TIM4_CH3 = PB8 // TIM4_CH4 = PB9 // TIM4_Reload_Num = TIM1自动重装值 // TIM4_Frequency_Divide = 时钟预分频数 //----------------------------------------------------------------------------------------------------------------- void TIM4_PWM_Init_JX(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); // 使能TIM4时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB时钟 // 配置IO模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 |GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化TIM4的计数模式、分频值、重装载值等 TIM_TimeBaseStructure.TIM_Period = TIM4_Reload_Num; // 设置下一个更新事件后,装入自动重装载寄存器的值 TIM_TimeBaseStructure.TIM_Prescaler =TIM4_Frequency_Divide; // 设置TIM4时钟预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); // 根据参数初始化TIM4的计数方式 //初始化TIM4_CH1-4的PWM TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 选择定时器模式:TIM脉冲宽度调制模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性:TIM输出比较极性高 TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC2Init(TIM4, &TIM_OCInitStructure); // TIM_OC3Init(TIM4, &TIM_OCInitStructure); // TIM_OC4Init(TIM4, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); // 使能TIM4在OC1上的预装载寄存器 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); // 使能TIM4在OC2上的预装载寄存器 // TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); // 使能TIM4在OC3上的预装载寄存器 // TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); // 使能TIM4在OC4上的预装载寄存器 TIM_Cmd(TIM4, ENABLE); // 使能TIM4 } //----------------------------------------------------------------------------------------------------------------- //舵机初始化---TIM3-CH4 void TIM3_PWM_Init_DJ(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟 // GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2-》PB5 //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //TIM_CH2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO //初始化TIM3 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 //初始化TIM3 Channel2 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OC4Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2 TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器 TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, ENABLE); //使能TIM3 } tiai.c #include “tiai.h” u8 S_Trail_Input = 0 ; // 三个寻迹模块的返回值 // 红外寻迹初始化(将PB3、PB4、PB5初始化为上拉输入) // Trail -- PC15 // Trail -- PA0 // Trai2 -- PA1 // Trai3 -- PA2 // Trai4 -- PA3 // Trai5 -- PA4 // Trai6 -- PA5 // Trai7 -- PA6 // // Trai8 -- PA7 //---------------------------------------------------------------------------------------------- void Trail_Input_Init_JX(void) { GPIO_InitTypeDef GPIO_InitStructure; // 使能GPIOB端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOB时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 复用时钟使能 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); // 将PA0--PA6释放为通用GPIO口 // 寻迹:Trail--PA0--PA6端口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; // Trail--PB3、PB4、PB5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入 //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输入模式不需要设端口速度 GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化PA0--PA7 // 使能GPIOC端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // GPIOB时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 复用时钟使能 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); // 将PA0--PA6释放为通用GPIO口 // 寻迹:Trail--PC15端口配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Trai1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入 //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输入模式不需要设端口速度 GPIO_Init(GPIOC , &GPIO_InitStructure); // 初始化PA0--PA7 } //---------------------------------------------------------------------------------------------- // 黑线寻迹函数 // S_Trail_Input的低三位分别对应[PB5、PB4、PB3]的状态值 // 未碰到黑线(接收到红外光):对应状态 = 0 // 碰到黑线(未接收到红外光):对应状态 = 1 //---------------------------------------------------- void Trail_black_line(void) { S_Trail_Input = 0 ; S_Trail_Input = (((u8)GPIOA-》IDR) & 0x7f); } //---------------------------------------------------- timer.c #include “timer.h” // 初始化TIM3: // 根据“timer.h”文件中的宏定义,设置TIM2的溢出时间 //-------------------------------------------------------------------------------------------------------------- void TIM3_Time_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 使能TIM3的时钟 //定时器TIM3初始化 TIM_TimeBaseStructure.TIM_Period = TIM3_Reload_Num ; // 设置下一个更新事件后,装入自动重装载寄存器的值 TIM_TimeBaseStructure.TIM_Prescaler = TIM3_Frequency_Divide;// 设置TIM3时钟预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 根据参数初始化TIM3的计数方式 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); // 允许TIM3更新中断 //TIM3的中断NVIC设置 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; // TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级1级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 子优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能TIM3_IRQn通道 NVIC_Init(&NVIC_InitStructure); // 初始化NVIC寄存器 TIM_Cmd(TIM3, ENABLE); // 使能TIM3 } //-------------------------------------------------------------------------------------------------------------- 总结 代码是依赖于买来的stm32f1zet6(淘宝上买来的最小系统) 里面提供的历程改来的,因为里面有封装好的函数,和正点原子的类似。 |
|
|
|
大佬求一份代码和原理图
|
|
|
|
大佬求一份代码和原理图
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1376 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1368 浏览 1 评论
791 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
568 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1410 浏览 2 评论
1762浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
489浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
422浏览 3评论
415浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
391浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-30 14:43 , Processed in 0.920126 second(s), Total 80, Slave 65 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号