OpenEdv-开源电子网

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

想用一个定时器输出2路PWM波,求助

[复制链接]

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
发表于 2017-1-31 15:59:09 | 显示全部楼层 |阅读模式
5金钱
才看原子哥的视频自学碰到几个问题,我想用一个定时器3的2个通道1、2输出2路PWM波,现在只有通道2可调占空比,用TIM_SetCompare2(TIM3,500),TIM_SetCompare1(TIM3,500)这2个函数,还有我一共需要四路PWM波控制四个电机,我想的是TIM3 OC1 OC2,TIM 4 OC1 OC2,对于TIM3视频里说了部分重映射到PB4、PB5, 那么TIM4我查表,上写了复用就是PB6 PB7,可是我的程序写了,好象没有输出PWM,能不帮我看看程序,还有定时器初始化那个没讲清视频里的,        TIM_Time3_Init.TIM_ClockDivision=TIM_CKD_DIV1;这个后面的参数也是分频的吗?

QQ截图20170131155809.png QQ截图20170131155821.png QQ截图20170131155830.png QQ截图20170131155840.png

最佳答案

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

建议换一个引脚试试,如果是开发板的话,有的引脚不是完全开放为普通IO的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-8-5
在线时间
22 小时
发表于 2017-1-31 15:59:10 | 显示全部楼层
七年 发表于 2017-2-1 11:12
不是我L298N的问题 我把EN1接 PB5也可以调速 PB4我可能没配置好

建议换一个引脚试试,如果是开发板的话,有的引脚不是完全开放为普通IO的
回复

使用道具 举报

14

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-8-5
在线时间
22 小时
发表于 2017-1-31 17:42:33 | 显示全部楼层
刚看没看出什么问题,你可以用debug里面的逻辑分析仪判断一下是否真的是没有输出pwm,另外有个稍稍奇怪的地方,GPIO初始化的时候个人建议,多个引脚(同一组)的时候还是写成GPIO_Pin_4|GPIO_Pin_5可能更方遍一些。两次GPIO_Init感觉怪怪的。
附:CKD[1:0]: 时钟分频因子 (Clock division)
这2位定义在定时器时钟(CK_INT)频率、死区时间和由死区发生器与数字滤波器(ETR,TIx)所用
的采样时钟之间的分频比例。
00: tDTS = tCK_INT
01 : tDTS = 2 x tCK_INT
10: tDTS = 4 x tCK_INT
11 :保留,不要使用这个配置
我配置的时候写0。
回复

使用道具 举报

3

主题

21

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-1-31
在线时间
12 小时
发表于 2017-2-1 00:08:47 | 显示全部楼层
先重映射在配置GPIO再试试
回复

使用道具 举报

3

主题

21

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-1-31
在线时间
12 小时
发表于 2017-2-1 00:15:42 | 显示全部楼层
TIM4_REMAP:定时器4的重映像 (TIM4 remapping)
该位可由软件置’1’或置’0’,控制将TIM4的通道1-4映射到GPIO端口上。
0:没有重映像(TIM4_CH1/PB6, TIM4_CH2/PB7, TIM4_CH3/PB8, TIM4_CH4/PB9);
1:完全映像(TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15)。
注:重映像不影响在PE0上的TIM4_ETR。

------摘自中文参考手册
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-1 10:38:40 | 显示全部楼层
jasonflash 发表于 2017-1-31 17:42
刚看没看出什么问题,你可以用debug里面的逻辑分析仪判断一下是否真的是没有输出pwm,另外有个稍稍奇怪的地 ...

后面那个理解了  GPIO我是复杂了 嘿嘿 原来LED2个在不同的组 我就没注意这个方便 谢谢提醒 逻辑分析判断是啥
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-1 10:39:10 | 显示全部楼层
超级歪 发表于 2017-2-1 00:08
先重映射在配置GPIO再试试

把它映射到D14 D15吗
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-1 10:43:14 | 显示全部楼层
七年 发表于 2017-2-1 10:38
后面那个理解了  GPIO我是复杂了 嘿嘿 原来LED2个在不同的组 我就没注意这个方便 谢谢提醒 逻辑分析判断 ...

而且我TIM3的2路只有1路可调
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-1 10:59:19 | 显示全部楼层
jasonflash 发表于 2017-1-31 17:42
刚看没看出什么问题,你可以用debug里面的逻辑分析仪判断一下是否真的是没有输出pwm,另外有个稍稍奇怪的地 ...

嘿嘿原来是我 TIM4配置的时候复制TIM3 有的入口参数没改 现在四个都能转了 还有一个占空比不能调 我还在改
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-1 11:09:45 | 显示全部楼层
这是现在的程序 TIM3 OC1没办法调占空比 其他3个可以
#include "pwm.h"

//TIM4 PB6 PB7  TIM3 PB4 PB5
void TIM3_PWM_Init(u16 psc,u16 arr)
{
        GPIO_InitTypeDef GPIO_TIME3_PWM;
        TIM_TimeBaseInitTypeDef TIM_Time3_Init;
        TIM_OCInitTypeDef TIM3_OC_Init;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//PBê±Öóê1Äü ¸′óÃê±Öóê1Äü
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//¶¨ê±Æ÷3ê±Öóê1Äü
        
        GPIO_TIME3_PWM.GPIO_Mode=GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
        GPIO_TIME3_PWM.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;//PB4 PB5
        GPIO_TIME3_PWM.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_TIME3_PWM);
        
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//¶¨ê±Æ÷32¿·ÖÖØó3éäê1Äü
        
        TIM_Time3_Init.TIM_Prescaler=psc;
        TIM_Time3_Init.TIM_Period=arr;
        TIM_Time3_Init.TIM_CounterMode=TIM_CounterMode_Down;//ÏòϼÆêy
        TIM_Time3_Init.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM3,&TIM_Time3_Init);//¶¨ê±Æ÷33õê¼»ˉ
        
        TIM3_OC_Init.TIM_OCMode=TIM_OCMode_PWM1;//PWMÄ£ê½1
        TIM3_OC_Init.TIM_OutputState=TIM_OutputState_Enable;//PWMêä3öí¨μàê1Äü
        TIM3_OC_Init.TIM_OCPolarity=TIM_OCPolarity_Low;//±è½Ïêä3ö¼«DÔ ¸ß μí
        
        TIM_OC1Init(TIM3,&TIM3_OC_Init);//OC1êä3ö±è½Ï2Îêy3õê¼»ˉ
        TIM_OC2Init(TIM3,&TIM3_OC_Init);//OC2êä3ö±è½Ï2Îêy3õê¼»ˉ
        
        TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//OC1
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//OC2ê1ÄüÔ¤×°ÔØ¼Ä′æÆ÷
        TIM_ARRPreloadConfig(TIM3,ENABLE);//×Ô¶ˉÖØ×°ÔØÔ¤×°ÔØ
        
        TIM_Cmd(TIM3,ENABLE);//ê1ÄüTIM3
}

void TIM4_PWM_Init(u16 psc,u16 arr)
{
        GPIO_InitTypeDef GPIO_TIME4_PWM;
        TIM_TimeBaseInitTypeDef TIM_Time4_Init;
        TIM_OCInitTypeDef TIM4_OC_Init;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//PBê±Öóê1Äü ¸′óÃê±Öóê1Äü
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//¶¨ê±Æ÷4ê±Öóê1Äü
        
        GPIO_TIME4_PWM.GPIO_Mode=GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
        GPIO_TIME4_PWM.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//PB6 PB7
        GPIO_TIME4_PWM.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_TIME4_PWM);
        
        TIM_Time4_Init.TIM_Prescaler=psc;
        TIM_Time4_Init.TIM_Period=arr;
        TIM_Time4_Init.TIM_CounterMode=TIM_CounterMode_Down;//ÏòϼÆêy
        TIM_Time4_Init.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM4,&TIM_Time4_Init);//¶¨ê±Æ÷43õê¼»ˉ
        
        TIM4_OC_Init.TIM_OCMode=TIM_OCMode_PWM1;//PWMÄ£ê½1
        TIM4_OC_Init.TIM_OutputState=TIM_OutputState_Enable;//PWMêä3öí¨μàê1Äü
        TIM4_OC_Init.TIM_OCPolarity=TIM_OCPolarity_Low;//±è½Ïêä3ö¼«DÔ ¸ß μí

        TIM_OC1Init(TIM4,&TIM4_OC_Init);//OC1êä3ö±è½Ï2Îêy3õê¼»ˉ
        TIM_OC2Init(TIM4,&TIM4_OC_Init);//OC2êä3ö±è½Ï2Îêy3õê¼»ˉ
        
        TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);//OC1
        TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);//OC2ê1ÄüÔ¤×°ÔØ¼Ä′æÆ÷
        TIM_ARRPreloadConfig(TIM4,ENABLE);//×Ô¶ˉÖØ×°ÔØÔ¤×°ÔØ
        
        TIM_Cmd(TIM4,ENABLE);//ê1ÄüTIM3
}


回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-1 11:12:25 | 显示全部楼层
不是我L298N的问题 我把EN1接 PB5也可以调速 PB4我可能没配置好
回复

使用道具 举报

3

主题

21

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-1-31
在线时间
12 小时
发表于 2017-2-1 11:28:15 | 显示全部楼层
七年 发表于 2017-2-1 11:12
不是我L298N的问题 我把EN1接 PB5也可以调速 PB4我可能没配置好

换一块单片机试试
回复

使用道具 举报

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2292
金钱
2292
注册时间
2013-8-26
在线时间
229 小时
发表于 2017-2-1 20:54:28 | 显示全部楼层
七年 发表于 2017-2-1 11:12
不是我L298N的问题 我把EN1接 PB5也可以调速 PB4我可能没配置好

哥们调试好了吗?能否传个工程,最近也想调试PWM输出呢?
回复

使用道具 举报

14

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-8-5
在线时间
22 小时
发表于 2017-2-5 11:19:06 | 显示全部楼层
七年 发表于 2017-2-1 10:38
后面那个理解了  GPIO我是复杂了 嘿嘿 原来LED2个在不同的组 我就没注意这个方便 谢谢提醒 逻辑分析判断 ...

逻辑分析仪在这里说起来蛮麻烦的,其实就是一个只能显示高低电平的示波器,具体的使用方法可以百度一下。然后逻辑分析仪是在“debug"里面,上面有个黑色的小按钮。这些百度都说的很详细
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-5 11:28:39 | 显示全部楼层
jasonflash 发表于 2017-2-5 11:21
建议换一个引脚试试,如果是开发板的话,有的引脚不是完全开放为普通IO的

bingo老哥, 我现在把PA组空出来了 ,去研究了下功能表 ,发现A口很多都是定时器的, 我开始用来输出高地电平太浪费了, 现在动了, 我现在用定时器不映射直接输出PWM可以的, 可能是像你说的我的开发板一个IO不是单纯IO, 可能有外围电路所以给那个口拉高, 不能输出PWM了。你说的那个调试我再学学弄弄。
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-5 11:31:15 | 显示全部楼层
ws_zdyz 发表于 2017-2-1 20:54
哥们调试好了吗?能否传个工程,最近也想调试PWM输出呢?

#ifndef __PWM_H
#define __PWM_H         
#include "sys.h"

void TIM3_PWM_Init(u16 psc,u16 arr);//¶¨ê±Æ÷3PWM3õê¼»ˉ
void TIM4_PWM_Init(u16 psc,u16 arr);//¶¨ê±Æ÷4PWM3õê¼»ˉ
                                                     
#endif

#include "pwm.h"

//TIM4 PB6 PB7  TIM3 PA6 PA7
void TIM3_PWM_Init(u16 psc,u16 arr)
{
        GPIO_InitTypeDef GPIO_TIME3_PWM;
        TIM_TimeBaseInitTypeDef TIM_Time3_Init;
        TIM_OCInitTypeDef TIM3_OC_Init;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//PBê±Öóê1Äü ¸′óÃê±Öóê1Äü
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//¶¨ê±Æ÷3ê±Öóê1Äü
        
        GPIO_TIME3_PWM.GPIO_Mode=GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
        GPIO_TIME3_PWM.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//PB4 PB5
        GPIO_TIME3_PWM.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_TIME3_PWM);
        
        TIM_Time3_Init.TIM_Prescaler=psc;
        TIM_Time3_Init.TIM_Period=arr;
        TIM_Time3_Init.TIM_CounterMode=TIM_CounterMode_Down;//ÏòϼÆêy
        TIM_Time3_Init.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM3,&TIM_Time3_Init);//¶¨ê±Æ÷33õê¼»ˉ
        
        TIM3_OC_Init.TIM_OCMode=TIM_OCMode_PWM1;//PWMÄ£ê½1
        TIM3_OC_Init.TIM_OutputState=TIM_OutputState_Enable;//PWMêä3öí¨μàê1Äü
        TIM3_OC_Init.TIM_OCPolarity=TIM_OCPolarity_Low;//±è½Ïêä3ö¼«DÔ ¸ß μí
        
        TIM_OC1Init(TIM3,&TIM3_OC_Init);//OC1êä3ö±è½Ï2Îêy3õê¼»ˉ
        TIM_OC2Init(TIM3,&TIM3_OC_Init);//OC2êä3ö±è½Ï2Îêy3õê¼»ˉ
        
        TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//OC1
        TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//OC2ê1ÄüÔ¤×°ÔØ¼Ä′æÆ÷
        TIM_ARRPreloadConfig(TIM3,ENABLE);//×Ô¶ˉÖØ×°ÔØÔ¤×°ÔØ
        
        TIM_Cmd(TIM3,ENABLE);//ê1ÄüTIM3
}

void TIM4_PWM_Init(u16 psc,u16 arr)
{
        GPIO_InitTypeDef GPIO_TIME4_PWM;
        TIM_TimeBaseInitTypeDef TIM_Time4_Init;
        TIM_OCInitTypeDef TIM4_OC_Init;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//PBê±Öóê1Äü ¸′óÃê±Öóê1Äü
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//¶¨ê±Æ÷4ê±Öóê1Äü
        
        GPIO_TIME4_PWM.GPIO_Mode=GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
        GPIO_TIME4_PWM.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//PB6 PB7
        GPIO_TIME4_PWM.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_TIME4_PWM);
        
        TIM_Time4_Init.TIM_Prescaler=psc;
        TIM_Time4_Init.TIM_Period=arr;
        TIM_Time4_Init.TIM_CounterMode=TIM_CounterMode_Down;//ÏòϼÆêy
        TIM_Time4_Init.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM4,&TIM_Time4_Init);//¶¨ê±Æ÷43õê¼»ˉ
        
        TIM4_OC_Init.TIM_OCMode=TIM_OCMode_PWM1;//PWMÄ£ê½1
        TIM4_OC_Init.TIM_OutputState=TIM_OutputState_Enable;//PWMêä3öí¨μàê1Äü
        TIM4_OC_Init.TIM_OCPolarity=TIM_OCPolarity_Low;//±è½Ïêä3ö¼«DÔ ¸ß μí

        TIM_OC1Init(TIM4,&TIM4_OC_Init);//OC1êä3ö±è½Ï2Îêy3õê¼»ˉ
        TIM_OC2Init(TIM4,&TIM4_OC_Init);//OC2êä3ö±è½Ï2Îêy3õê¼»ˉ
        
        TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);//OC1
        TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);//OC2ê1ÄüÔ¤×°ÔØ¼Ä′æÆ÷
        TIM_ARRPreloadConfig(TIM4,ENABLE);//×Ô¶ˉÖØ×°ÔØÔ¤×°ÔØ
        
        TIM_Cmd(TIM4,ENABLE);//ê1ÄüTIM3
}
#include "sys.h"
#include "delay.h"
#include "pwm.h"
#include "drive.h"
#include "elude.h"
#include "tracking.h"

int main(void)
{
        DRIVE_Init();
        ELUDE_Init();
        TRACKING_Init();
        delay_init();
        TIM3_PWM_Init(99,719);
        TIM4_PWM_Init(99,719);
        TIM_SetCompare1(TIM3,400);
        TIM_SetCompare1(TIM4,400);
        TIM_SetCompare2(TIM3,400);
        TIM_SetCompare2(TIM4,400);
        while(1)
        {
                DRIVE_Go();
                if(elude3==0&&elude4==0)
                {
                        DRIVE_Left();
                        delay_ms(1000);
                }
                if(elude1==0&&elude2==0)
                {
                        DRIVE_Right();
                        delay_ms(1000);
                }
                if(elude2==0&&elude3==0)
                {
                        DRIVE_Stop();
                        delay_ms(50);
                        DRIVE_Back();
                        delay_ms(1500);
                        DRIVE_Right();
                        delay_ms(1000);
                }
//                if(elude1==0&&elude2==0&&elude3==0&&elude4==0)
//                        DRIVE_Stop();
//                if(tracking1==1&&tracking2==1&&tracking3==1&&tracking4==1&&tracking5==1)
//                        DRIVE_Stop();
        }
}


我贴给你看看 我不知道怎么传文件
回复

使用道具 举报

4

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2017-1-18
在线时间
80 小时
发表于 2017-2-5 12:57:37 | 显示全部楼层
用一个定时器输出两个不相关的PWM是不可能的,虽然有4个通道,但只有一套寄存器。另外在执行TIM_OC1PreloadConfig和TIM_OC2PreloadConfig时都会对CCMR1先复位。结果是只有最后一个有效。
回复

使用道具 举报

14

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-8-5
在线时间
22 小时
发表于 2017-2-5 14:22:00 | 显示全部楼层
七年 发表于 2017-2-5 11:28
bingo老哥, 我现在把PA组空出来了 ,去研究了下功能表 ,发现A口很多都是定时器的, 我开始用来输出高地 ...

嗯嗯,加油吧!但是一个定时器输出的PWM波肯定频率是一样的,所以只能调节占空比。当初也栽过跟头
回复

使用道具 举报

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2292
金钱
2292
注册时间
2013-8-26
在线时间
229 小时
发表于 2017-2-5 14:59:05 | 显示全部楼层
七年 发表于 2017-2-5 11:31
#ifndef __PWM_H
#define __PWM_H         
#include "sys.h"

多谢了!!!
回复

使用道具 举报

3

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
447
金钱
447
注册时间
2017-1-14
在线时间
86 小时
 楼主| 发表于 2017-2-8 09:53:53 | 显示全部楼层
xdzhang 发表于 2017-2-5 12:57
用一个定时器输出两个不相关的PWM是不可能的,虽然有4个通道,但只有一套寄存器。另外在执行TIM_OC1Preload ...

哥们 确定就最后一个有效吗 我感觉2个占空比可以一起调的啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 22:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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