野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13106|回复: 46

平衡车整车已到!可以开心地耍咯

[复制链接]
发表于 2016-9-12 09:43:49 | 显示全部楼层 |阅读模式
上周六早上快递来电,可惜当时没在,今天上午收到平衡车,超级棒。快递盒子挺大的,有点儿超乎意料的重。盒子摆放包装不错,包裹了保丽龙之类的保护措施,发件人姓陈,打包工作做的不错,赞一个。整车尺寸比想象的大些,重量应该有1斤多,手感挺不错。重点是板子lay的挺棒,IC之类的收拾手工焊接,那么多板子,估计花了不少资金和时间。辛苦啦,板子焊得不错。整车已经组装完成,直接插上电池固定就OK啦,非常感谢火哥和几个负责人所做的工作。强烈建议众筹大伙儿一起学习玩耍,哈哈。
接下来我们努力把驱动整起来。持续更新......

闲话少收,先来上传几张图片:

特写1

特写1

IMG_20160912_084123.jpg
IMG_20160912_085400.jpg
IMG_20160912_085446.jpg
IMG_20160912_085439.jpg
IMG_20160912_085427.jpg


IMG_20160912_083908.jpg
IMG_20160912_085403.jpg
IMG_20160912_085444.jpg
回复

使用道具 举报

发表于 2016-9-12 09:46:58 | 显示全部楼层
楼主运气真好啊,好羡慕。
回复 支持 反对

使用道具 举报

发表于 2016-9-12 09:47:05 | 显示全部楼层
期待更新                          
回复 支持 反对

使用道具 举报

发表于 2016-9-12 09:49:27 | 显示全部楼层
你直接把车带到公司,不怕他们说嘛。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-12 17:49:10 | 显示全部楼层
fire 发表于 2016-9-12 09:49
你直接把车带到公司,不怕他们说嘛。

没办法,我住公司公共宿舍,~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-12 17:50:59 | 显示全部楼层
与孤独和好 发表于 2016-9-12 09:46
楼主运气真好啊,好羡慕。

哈哈,确实是运气好,不过前期参与度比较高,优先级也就高些咯,接下来努力把它整起来,哈哈,大伙儿共同进步!
回复 支持 反对

使用道具 举报

发表于 2016-9-12 17:54:38 | 显示全部楼层
看着这图片就知道这板子的做工是精品了
回复 支持 反对

使用道具 举报

发表于 2016-9-12 17:54:52 | 显示全部楼层
赶紧耍起来,期待更新
回复 支持 反对

使用道具 举报

发表于 2016-9-12 17:55:27 | 显示全部楼层
另外问一下这板子是楼主画的吗?好漂亮,高手啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 09:31:11 | 显示全部楼层
几折荒年 发表于 2016-9-12 17:55
另外问一下这板子是楼主画的吗?好漂亮,高手啊

不是我画的,我得说这板子画的比我画的漂亮多了,哈哈,好像是张工画的,必须得赞一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-13 22:08:02 | 显示全部楼层
起航,从建立工程文件开始,今天稍微折腾了一下,建立了项目文件,移植从最基本的点亮LED灯开始,一步一步添加移植驱动,哈哈,万丈高楼平地起,第一步是打地基,啥也别说了,打地基。看看这地基图片:
IMG_20160913_215417.jpg IMG_20160913_215426.jpg

程序源码:https://git.oschina.net/jylzming/BalanceCar.git
回复 支持 反对

使用道具 举报

发表于 2016-9-13 22:12:32 来自手机 | 显示全部楼层
牧梦苍穹 发表于 2016-9-13 22:08
起航,从建立工程文件开始,今天稍微折腾了一下,建立了项目文件,移植从最基本的点亮LED灯开始,一步一步 ...


李工,代码直接传到论坛,活跃论坛同样是这次开源的目的。
回复 支持 反对

使用道具 举报

发表于 2016-9-13 22:18:58 | 显示全部楼层
这几天一直在关注论坛,哎~~上次报名晚了。现在看大家玩得好嗨啊~手痒痒啊!!楼主记得多更新了,给我们解解渴啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-19 16:39:26 | 显示全部楼层
weida 发表于 2016-9-13 22:18
这几天一直在关注论坛,哎~~上次报名晚了。现在看大家玩得好嗨啊~手痒痒啊!!楼主记得多更新了,给我们 ...

呵呵,这几天耽搁了,接下来几天要是有时间一步一步把自己的工作更新上来,哈哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 22:08:46 | 显示全部楼层
耽搁的进度要整起来,哈哈,今天折腾了一下,没啥进度,具体的成果参见如下两个帖子:

第一个是今天使用延时函数的时候,延时方法和Systick使用的一些参考,感谢火哥的回答:
http://www.firebbs.cn/forum.php? ... 8&fromuid=25783

第二个是按键1和2使用了同一个按键中断线,不能同时使用外部中断,新手需要注意:
同一条中断线的不同端口外部中断讨论
http://www.firebbs.cn/forum.php? ... 2&fromuid=25783

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-22 22:11:14 | 显示全部楼层
虽然没啥进展,上传一下更新的程序文件,哈哈

BalanceCar.zip

339.31 KB, 下载次数: 15

平衡车更新20160922

回复 支持 反对

使用道具 举报

发表于 2016-9-22 22:29:56 来自手机 | 显示全部楼层
牧梦苍穹 发表于 2016-9-22 22:11
虽然没啥进展,上传一下更新的程序文件,哈哈

不错不错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-26 22:30:16 | 显示全部楼层
最新进度:调试MPU6050死在busy上了,没想到呀,看来还是得用模拟IIC
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-29 22:41:29 | 显示全部楼层
这两天调试了一下IIC连接MPU6050,之前使用硬件IIC,后来自己修改了一下软件IIC,依旧有点点问题,一气之下,直接移植野火的例程驱动咯,在问题中成长。得空还是得自己弄的。显示了MPU6050的数据啦,看来还是实力的问题,他们都快整出来了,呵呵,不过就是在一步步调试过程中遇到问题解决问题才是提高的关键,尤其是经验不足的情况下,只有自己动手解决问题才能快速提升。不过这两天调试几个代码花了好长好长时间,我也是醉了。啥也不说了,上图,上程序...... 001.jpg

BalanceCar.zip

6.08 MB, 下载次数: 17

20160929

回复 支持 反对

使用道具 举报

发表于 2016-10-6 20:19:11 | 显示全部楼层
等了好久,刚好需要
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-8 21:19:48 | 显示全部楼层
放假回家,好像离上次已经很遥远了,好多大神都已经整出来了,我还在乌龟跑步中,呵呵,今天增加了马达驱动代码,能让马达转起来了,下一步结合陀螺仪数据折腾了,然后还得把各部分代码整合起来,一步一步整吧。在实际工作中,不需要搞懂其中的原理,只要迅速的完成好项目工作,在学习中应当一边折腾一边了解。

BalanceCar20161008.zip

329.08 KB, 下载次数: 18

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-8 21:22:53 | 显示全部楼层
使用定时器的PWM比较输出时,貌似TIM_CtrlPWMOutputs使能要放到定时器使能后面才有效
        TIM_Cmd(TIM1, ENABLE);
        TIM_CtrlPWMOutputs(TIM1, ENABLE);//这个要放在TIM_Cmd后面

有些使能是有先后顺序的,调试时如果发现程序各部分应该都没问题,有时候就得注意注意这一定
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-8 21:23:49 | 显示全部楼层
还有一些使能是不能两个选项放在一起使用“|”或的方法的,这点也需要注意
回复 支持 反对

使用道具 举报

发表于 2016-10-8 22:51:56 来自手机 | 显示全部楼层
牧梦苍穹 发表于 2016-10-8 21:23
还有一些使能是不能两个选项放在一起使用“|”或的方法的,这点也需要注意

现在进展如何了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-14 17:09:31 | 显示全部楼层
fire 发表于 2016-10-8 22:51
现在进展如何了

站不起来,正在努力学习PID控制内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-17 22:22:05 | 显示全部楼层
  1. float BalancePidCalc(float pitchdata)
  2. {
  3.         float Kp = 250;
  4.         float Ki = 0.8 ;//0.01;
  5.         float Kd = 5;//10;       
  6.         static pid_t pid;
  7.         pid.SetPoint  = 1;//平衡点角度

  8.         pid.err = pitchdata - pid.SetPoint;//当前偏差
  9.         pid.integral += pid.err;//(pid.err + pid.err_last) / 2; //偏差之和       
  10.        
  11.     //Uo = Kp*本次误差 + Ki*所有误差之和 + Kd*误差变化率
  12.     pid.u_sum = Kp * pid.err + Ki * pid.integral + Kd * (pid.err - pid.err_last);        //正+正+负
  13.         pid.FeedBack = pid.u_sum * 1.0;//反馈值为PID值乘于一个常亮
  14.         pid.err_last = pid.err;//计算完毕后把本次偏差值赋给上次偏差值
  15.        
  16.         return pid.FeedBack;
  17. }


  18. float SpeedPidCalc(void)
  19. {
  20.         float Kp = 0;
  21.         float Ki = 0;//0.01;
  22.         float Kd = 0;       
  23.         static pid_t pid;
  24.         //int encoder_left, encoder_right;
  25.         ENCODER encoderL, encoderR;
  26.        
  27.         lastencoder = encoder;//把上一次的值赋给lastencoder
  28.        
  29.         //读取两个马达的编码值(int)
  30.         encoderL = GetCode(motoL);
  31.         encoderR = GetCode(motoR);
  32.        
  33.         encoder = encoderL.code + encoderR.code;
  34.         //一阶低通滤波的算法公式为:Y(n)=αX(n) +(1-α)Y(n-1)
  35.         //式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。
  36.         //一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。
  37.         //encoder = 0.3f * encoder + (1 - 0.3f) * lastencoder;
  38.         encoder_integral += encoder;
  39.        
  40.         if(encoder_integral > 15000)  //积分限幅
  41.                 encoder_integral = 15000;
  42.         if(encoder_integral< -15000)  
  43.                 encoder_integral = -15000;
  44.        
  45.         pid.err = encoder - pid.SetPoint;//当前偏差,是否需要调换顺序?
  46.         pid.integral += (pid.err + pid.err_last) / 2; //偏差之和       
  47.        
  48.     //Uo = Kp*本次误差 + Ki*所有误差之和 + Kd*误差变化率
  49.     pid.u_sum = Kp * pid.err + Ki * pid.integral + Kd * (pid.err - pid.err_last);       
  50.         pid.FeedBack = pid.u_sum * 1.0;//反馈值为PID值乘于一个常亮
  51.         pid.err_last = pid.err;//计算完毕后把本次偏差值赋给上次偏差值
  52.        
  53.         return pid.FeedBack;
  54. }


  55. void PWM_Cntrl(int pwm)
  56. {
  57.         if(pwm > 0)
  58.                 {
  59.                         MotoDir(motoL, forward);
  60.                         MotoDir(motoR, forward);
  61.                        
  62.                 }
  63.         else if(pwm < 0)
  64.                 {
  65.                         MotoDir(motoL, backward);
  66.                         MotoDir(motoR, backward);
  67.                         pwm = -pwm;
  68.                 }
  69.         else if(pwm > 7000)   
  70.                 pwm = 7000;
  71.         else
  72.         {
  73.                 MotoDir(motoL, stop);
  74.                 MotoDir(motoR, stop);               
  75.         }
  76.         TIM_SetCompare1(TIM1,pwm);
  77.         TIM_SetCompare4(TIM1,pwm);       
  78. }
复制代码
PID代码如上,不管怎么调整PID的参数都达不到能够站立的情况,好不郁闷,各位参考一下以上代码在pid运算中是否合适(撇开PID的三个参数)?
回复 支持 0 反对 1

使用道具 举报

发表于 2016-10-17 23:09:11 | 显示全部楼层
本帖最后由 cxchenxingcool 于 2016-10-17 23:21 编辑
牧梦苍穹 发表于 2016-10-17 22:22
PID代码如上,不管怎么调整PID的参数都达不到能够站立的情况,好不郁闷,各位参考一下以上代码在pid运算中 ...

不是很懂哈,有一点不明白,如下:
  1. pid.err = pitchdata - pid.SetPoint;//当前偏差
复制代码
是不是改成:
  1. pid.err = pid.SetPoint - pitchdata;//当前偏差
复制代码
?
位置式PID,积分项是不是加一个FIFO更好?

回复 支持 反对

使用道具 举报

发表于 2016-10-17 23:28:38 | 显示全部楼层
建议PID参数作为全局变量,以方便上位机对PID参数进行微调
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 15:00:06 | 显示全部楼层
cxchenxingcool 发表于 2016-10-17 23:28
建议PID参数作为全局变量,以方便上位机对PID参数进行微调

嗯嗯,这个建议是对的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 15:01:43 | 显示全部楼层
cxchenxingcool 发表于 2016-10-17 23:09
不是很懂哈,有一点不明白,如下:是不是改成:
?
位置式PID,积分项是不是加一个FIFO更好?

当前偏差-设定值或者两个位置反过来应该不影响,只要数据正负和控制方向对了就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-21 17:07:12 | 显示全部楼层
编码器用得是AB两相的编码器,左边马达连接PB6/TIM4_CH1,PB7/TIM4_CH2;右边马达连接PA0/TIM2_CH1,PA1/TIM2_CH2;   一圈脉冲是390*4 编码器.jpg

两个电机安装的方向不同,因此任意一个方向行走是一个编码值为正,一个编码值为附。前进时右正左负,后退时右负左正。
测试时发现捕获上升沿和上升沿下降沿均捕获结果是一样的。
//        TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3
//        TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3
        TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge, TIM_ICPolarity_BothEdge);
        TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge, TIM_ICPolarity_BothEdge);

具体编码器测试请看附件,便于了解。 编码器测试.zip (341.33 KB, 下载次数: 24)



回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-24 21:12:29 | 显示全部楼层
电压测量:
1、电压测量使用ADC
2、ADC12表示ADC1和ADC2共用通道
3、ADC时钟最高不能超过14MHz
  1. #include "stm32f10x.h"
  2. #include "uart.h"

  3. void ADC_GPIO_Config(void);
  4. uint16_t GetADC(void);
  5. float VoltageConvert(void);


  6. int main(void)
  7. {       
  8.         // 程序来到main函数之前,启动文件:statup_stm32f10x_hd.s已经调用
  9.         //SystemInit();//函数把系统时钟初始化成72MHZ
  10.         // SystemInit()在system_stm32f10x.c中定义
  11.         // 如果用户想修改系统时钟,可自行编写程序修改
  12.         uint16_t i,j;
  13.         int temp = 0;
  14.         float v;
  15.         ADC_GPIO_Config();
  16.         UART1_Config(115200);

  17.        
  18.         while( 1 )
  19.         {
  20.                 v = VoltageConvert();
  21.                 printf("电压: %f\n", v);
  22.                 for(i = 0; i < 65535; i++)
  23.                         for(j = 0; j < 564; j++);
  24.         }
  25. }

  26. /*ADC的输入时钟不得超过14MHz*/
  27. void ADC_GPIO_Config(void)
  28. {
  29.         GPIO_InitTypeDef GPIO_InitStructure;
  30.         ADC_InitTypeDef ADC_InitStructure;
  31.        
  32.         //开启IO口时钟和ADC时钟
  33.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  34.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  35.        
  36.         //ADC使用悬浮输入
  37.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  38.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  39.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  40.        
  41.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
  42.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐
  43.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不受外界影响
  44.         ADC_InitStructure.ADC_NbrOfChannel = 1;//只有一个通道
  45.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描模式关闭
  46.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//连续模式关闭
  47.         ADC_Init(ADC1, &ADC_InitStructure);//配置到ADC1
  48.         //ADC时钟8分频,9MHz,最高不能超过14MHz
  49.         RCC_ADCCLKConfig(RCC_PCLK2_Div8);
  50.        
  51.         ADC_Cmd(ADC1, ENABLE);//使能ADC1
  52.         ADC_ResetCalibration(ADC1);//复位校准
  53.         while(ADC_GetResetCalibrationStatus(ADC1) == SET);//0初始化完成 / 1初始化开始
  54.         ADC_StartCalibration(ADC1);//开始校准
  55.         while(ADC_GetCalibrationStatus(ADC1) == SET);//0校准完成 / 1校准开始
  56. }

  57. uint16_t GetADC(void)
  58. {
  59.         ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);//PC1为通道11,配置到ADC1中,1个通道
  60.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  61.         while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) != SET);//等待转换结束
  62.         return ADC_GetConversionValue(ADC1);
  63. }

  64. float VoltageConvert(void)
  65. {
  66.         float voltage;
  67.         //12位ADC, 2^12=4096, 3.3V量程分成4096份,2^n-1才能达到最大值
  68.         voltage = GetADC() * 3.3 * 7.738 / 4095;//理论值7.67倍
  69.         return voltage;
  70. }
复制代码

电压ADC测量.zip

4.23 MB, 下载次数: 12

回复 支持 反对

使用道具 举报

发表于 2016-10-24 22:28:17 | 显示全部楼层
fire 发表于 2016-9-12 09:49
你直接把车带到公司,不怕他们说嘛。

套件在哪可以买到?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 22:32:56 | 显示全部楼层
车子犹如羊癫疯一样,“豆芽豆芽”,不能传视频
VID_201610_clip.gif
VID_201610_clip1.gif BalanceCar20161027.zip (7.92 MB, 下载次数: 97)
回复 支持 1 反对 0

使用道具 举报

发表于 2016-10-29 08:22:21 | 显示全部楼层
怎么下载的啊
回复 支持 反对

使用道具 举报

发表于 2016-10-29 08:23:41 | 显示全部楼层
怎么下载的啊
回复 支持 反对

使用道具 举报

发表于 2016-10-30 22:08:24 | 显示全部楼层
牧梦苍穹 发表于 2016-10-27 22:32
车子犹如羊癫疯一样,“豆芽豆芽”,不能传视频

兄弟,我用你这个程序跑不起来啊。。。只有当板子倾斜到一定程度电机才会运转,这是为什么呢?我用火哥的测试程序出来的结果跟你这个现象挺像的。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-31 08:38:29 | 显示全部楼层

你说说怎么下载程序到小车?
把附件下载下来后,用Keil5打开,重新编译,点击下载(快捷键F8,菜单栏Flash下面有个Downlow选项)就好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-31 13:39:11 | 显示全部楼层
望蓝天 发表于 2016-10-30 22:08
兄弟,我用你这个程序跑不起来啊。。。只有当板子倾斜到一定程度电机才会运转,这是为什么呢?我用火哥的 ...

OLED显示的第三行Pitch:是俯仰角,竖直放置时为0度左右,显示是否正确?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-31 13:43:58 | 显示全部楼层
望蓝天 发表于 2016-10-30 22:08
兄弟,我用你这个程序跑不起来啊。。。只有当板子倾斜到一定程度电机才会运转,这是为什么呢?我用火哥的 ...

321123.jpg 如图,第三行俯仰角能否获取正确?前倾为负值,后仰为正值。如果正确,说明MPU6050数据正确。问题很可能出现在陀螺仪的数据上
回复 支持 反对

使用道具 举报

发表于 2016-10-31 18:36:17 | 显示全部楼层
楼主,你好,编译的时候说少了一个 "dataprocess.h"这个文件,我想问,这个文件是做什么的?
回复 支持 反对

使用道具 举报

发表于 2016-10-31 22:50:14 | 显示全部楼层
xdh873939316 发表于 2016-10-31 18:36
楼主,你好,编译的时候说少了一个 "dataprocess.h"这个文件,我想问,这个文件是做什么的?

你去这位兄弟的云上下,他帖子里的工程好像少了。。https://git.oschina.net/jylzming/BalanceCar.git
你要是试成功了告诉我一声。。。
回复 支持 反对

使用道具 举报

发表于 2016-10-31 22:55:04 | 显示全部楼层
牧梦苍穹 发表于 2016-10-31 13:43
如图,第三行俯仰角能否获取正确?前倾为负值,后仰为正值。如果正确,说明MPU6050数据正确。问题很可能 ...

能成,就是感觉有点像机器小泰迪,哈哈,谢谢哥们的程序
回复 支持 反对

使用道具 举报

发表于 2016-11-1 08:43:36 | 显示全部楼层
望蓝天 发表于 2016-10-31 22:50
你去这位兄弟的云上下,他帖子里的工程好像少了。。https://git.oschina.net/jylzming/BalanceCar.git
...

谢谢兄弟,,编译成功了。
回复 支持 反对

使用道具 举报

发表于 2016-11-28 20:53:22 | 显示全部楼层
楼主现在小车怎么样了?我的小车走直线的能力很弱很弱,,就是转向环的PID调节很差劲
回复 支持 反对

使用道具 举报

发表于 2017-4-30 16:24:58 | 显示全部楼层
兄弟,能留个联系方式吗?我需要你的平衡小车
回复 支持 反对

使用道具 举报

发表于 2018-1-18 16:33:54 | 显示全部楼层
整个程序的源码是那个文件
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 16:11 , Processed in 0.053928 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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