数字舵机 vs 模拟舵机 “数字舵机区别于传统的模拟舵机,模拟舵机需要给它不停的发送PWM信号,才能让它保持在规定的位置或者让它按照某个速度转动,数字舵机则只需要发送一次PWM信号就能保持在规定的某个位置。”

"到底模拟舵机与数码舵机在实际使用中有什么区别呢?我自己总结大致有以下几点:

1 数码舵机在位置准确度方面要高于模拟舵机。
2 在同样标称1.6公斤的舵机面前数码舵机在实际表现中会感觉更加“力气大”而模拟舵机就会“肉”点。
3 模拟舵机由于控制芯片是模拟电路,所以即便是相同型号的舵机会存在小小的性能差异,而数码舵机在一致性方面就非常好。
4 数码舵机一般均采用PID优化算法,所以,线性要好过模拟舵机。
5 对于高灵敏度的控制,建议选择数码舵机,如直升机的控制,高速固定翼飞机,高速滑翔机,比赛用车膜型,云台的控制等
6 对于不是特别需要灵敏度的场合,如低速固定翼(二战飞机,练习机,低速滑翔机等),船模,娱乐用车模等。可以考虑模拟舵机。

"(http://www.321mx.com/blog/548.html)

基本上参考《STM32不完全手册——库函数版本》

pwm.c 初始化函数

//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数void TIM_PWM_Init(u16 arr,u16 psc)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4, ENABLE);// 使能定时器时钟TIM2/TIM3/TIM4RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);  //使能GPIOA/GPIOB外设时钟使能//设置该引脚为复用输出功能,输出TIM2 CH3(PA2复用输出)、TIM2 CH4(PA3复用输出)的PWM脉冲波形GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //TIM2_CH3(PA2复用输出)、TIM2 CH4(PA3复用输出)GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9; //TIM3的3、4通道,TIM4的3、4通道GPIO_Init(GPIOB,&GPIO_InitStructure);     //B口的0、1对应TIM3的3、4通道,B口的8、9对应TIM4的3、4通道,设置为复用推挽输出TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值    50HZTIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC3Init(TIM2, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);  //CH3预装载使能   TIM_OC4Init(TIM2, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx   TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);  //CH4预装载使能TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //CH3预装载使能   TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx   TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //CH4预装载使能   TIM_OC3Init(TIM4, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx   TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  //CH3预装载使能   TIM_OC4Init(TIM4, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx   TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);  //CH4预装载使能TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_CtrlPWMOutputs(TIM2,ENABLE);   //MOE 主输出使能TIM_Cmd(TIM2, ENABLE);  //使能TIM2TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_CtrlPWMOutputs(TIM3,ENABLE); //MOE 主输出使能TIM_Cmd(TIM3, ENABLE);  //使能TIM3TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_CtrlPWMOutputs(TIM4,ENABLE); //MOE 主输出使能TIM_Cmd(TIM4, ENABLE);  //使能TIM4
}

int main(void)
{
u16 pwmval1=749;//1.5ms->90度

delay_init(); //延时函数初始化

TIM_PWM_Init(9999,143);//不分频。PWM 频率=72*10^6/(9999+1)/(143+1)=50Hz

while(1)
{
//调节占空比pwmval1/(9999+1)
TIM_SetCompare3(TIM2,pwmval1);TIM_SetCompare4(TIM2,pwmval1);
TIM_SetCompare3(TIM3,pwmval1);TIM_SetCompare4(TIM3,pwmval1);
TIM_SetCompare3(TIM4,pwmval1);TIM_SetCompare4(TIM4,pwmval1);
}

}

以下转自:http://www.cnblogs.com/ghdnui/articles/3429732.html

void TIM_Configuration(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;GPIO_InitTypeDef    GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 , ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //TIM3的1、2通道    ,产生PWMGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);       //PA的6,7口对应TIM3的1、2通道,设置为复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; //TIM4的1、2、3、4通道GPIO_Init(GPIOB,&GPIO_InitStructure);     //B口的6,7,8,9对应TIM4的1、2、3、4通道,设置为复用推挽输出TIM_TimeBaseStructure.TIM_Period =9999;           //自动重载周期值TIM_TimeBaseStructure.TIM_Prescaler =143;          //预分频值 ,这里是50HZTIM_TimeBaseStructure.TIM_ClockDivision = 0x0;        //时钟分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;      //计数摸式为向上计数TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);         //TIM3,和TIM4用的相同配置,写入配置  ,PWM频率为50HZ//设定占空比TIM_OCStructInit(& TIM_OCInitStructure);      //恢复初始TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //定时器模式为pwm模式1TIM_OCInitStructure.TIM_Pulse =0;              //脉冲值,即输出都是低电平TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;     //极性为高TIM_OC1Init(TIM3, &TIM_OCInitStructure);     //将配置数据写入TIM3的通道1TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);    //预装载使能TIM_OC2Init(TIM3, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_OC1Init(TIM4, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC2Init(TIM4, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC3Init(TIM4, &TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC4Init(TIM4, &TIM_OCInitStructure);TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);//TIM4的4个通道都用相同的配置TIM_Cmd(TIM3, ENABLE);TIM_CtrlPWMOutputs(TIM3, ENABLE);TIM_Cmd(TIM4, ENABLE);TIM_CtrlPWMOutputs(TIM4, ENABLE);          //使能PWM模式
}
void SetJointAngle(u8 ID, float angle)
{switch(ID){case 0:                                      //-90°~90°   angle=angle+90.0;                      angle=(u16)(50.0*angle/9.0+249.0);     TIM_SetCompare1(TIM3,angle);        break;//0°~180°case 1:angle=(u16)(4.175*angle+409.25);TIM_SetCompare2(TIM3,angle);          break;case 2:                                    //-150°~0°angle=-angle;angle=(u16)(4.175*angle+480.0);TIM_SetCompare1(TIM4,angle);break;case 3:angle=-180-angle;angle=-angle;angle=(u16)(4.175*angle+315.0);TIM_SetCompare2(TIM4,angle);break;//-90°~90°case 4:angle=90.0+angle;angle=(u16)(249.0+50.0*angle/9.0);TIM_SetCompare3(TIM4,angle);            break; default: break;}
}

舵机原理:http://blog.csdn.net/a2009374138/article/details/8772432

1、什么是舵机

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。

2、工作原理

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。

3、舵机的控制

舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:
      0.5ms-----------    0度
      1.0ms-----------  45度
      1.5ms-----------  90度
      2.0ms-----------135度
      2.5ms-----------180度       

小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速了。

舵机上有三根线,分别为VCC、GND、信号线。而不需要另外接驱动模块,直接用单片机的管脚控制就行了。控制信号一般要求周期为20ms的PWM信号。

如果要更为精确的控制舵机(转动角度差<=1度),则需要控制输出PWM信号的占空比,

例如:我可以把0~180分为1024份(可以任取,决定与定时器的时钟频率),范围为0.5ms~2.5ms

则可以得到0.09度/us,因此可以由 PWM=0.5+N*0.09(N是角度)控制舵机转动0~180度间的任意角度。

转自:http://blog.csdn.net/gtkknd/article/details/39296151

首先,本人虽然初学STM32但极力反对一种误人子弟的观点:“对于STM32这样级别的MCU,有库函数就不用去看寄存器怎么操作的了!”

好了,言归正传,最近总看到很多朋友对于PWM这个实验有很多的疑惑,看到原子也在极力的回复也挺累的(体谅一下幸苦的原子大神,(*^__^*) ),所以我打算写这么一篇文字来阐述一下我个人对STM32的PWM的理解。

首先来说,你要使用PWM模式你得先选择用那个定时器来输出PWM吧!除了TIM6、TIM7这两个普通的定时器无法输出PWM外,其余的定时器都可以输出PWM,每个通用定时器可以输出4路PWM,高级定时器TIM1、TIM8每个可输出7路PWM,这里为了方便起见,我们选择与实验相同的TIM3的通道2来说明。选好定时器及通道后,下一步就是要使能定时器的时钟,根据需要看看是否需要重映射IO,然后就是配置输出PWM的IO及定时器,到这里原子的视频及例程都有详细的介绍,这里只需要提一点有些网友疑惑的TIM_TimeBaseStructure.TIM_ClockDivision = 0;这句话是什么作用?其实仔细看过技术手册后发现这句话与PWM输出实验其实是没关系的,这句话是设置定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例的(与输入捕获相关),0表示滤波器的频率和定时器的频率是一样的。至于其余部分,我就不再赘述。做完这些准备工作后,我就针对大多数朋友疑惑的地方——PWM模式的初始化设置做一个详细的阐述:先贴代码

1       TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
     2       TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
     3       TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
     4       TIM_OC2Init(TIM3, &TIM_OCInitStructure);   //根据T指定的参数初始化外设TIM3 OC2
     5       TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
     6       TIM_Cmd(TIM3, ENABLE);  //使能TIM3
这6句话就把PWM的通道配置好了,一句句来解释:
这里原子选择的PWM2模式,为什么选择的是PWM2模式呢?为什么不选择PWM1模式呢?两者又有什么区别呢?下面我们就一探究竟,PWM1和PWM2模式是由CCMR1的OC1M和OC2M来决定的,因为我们选择的是是通道2,所以设置的是OC2M,再看相关介绍
OC1M[2:0]:输出比较1模式(Output compare 1 enable)

110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为
无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否
则为有效电平(OC1REF=1)。
111:PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为
有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电
平。

看到红色的“有效电平”了吧,那么这又是谁定义的呢?别急,再看手册,可知它是由CCER这个寄存器的CCxP来决定的这里是通道2,所以是CC2P,继续看介绍

CC1P:输入/捕获1输出极性(Capture/Compare 1 output polarity)  位1 
CC1通道配置为输出:
0:OC1高电平有效
1:OC1低电平有效
现在很清楚了吧,又因为第3句,TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高,所以这里我们设置的CC2P是0,也就是默认的OC2高电平有效。这样第3句话也捎带着解释了,哈哈!由于我们的战舰板的LED是低电平亮,而刚开始的给CC2P用来设置占空比的led0pwmval为0它是小于等于TIM3_CNT的,也就符合TIMx_CNT>=TIMx_CCR1时通道2输出有效电平,也就是高电平,所以你把原子的例程原封不动的Down到板子里,会看到刚上电,LED灯是不亮的。现在这块明白了吧!若你觉得还是不爽,我就非得用PWM1模式,那也可以,就像有个网友说“我拿原子的PWM Code就改了一个PWM1模式,按原子讲的PWM1和PWM2的输出是相反的啊,可是我上电发现LED是常亮的啊?怎么回事啊,求解释啊。。。”我们来分析一下这位朋友的代码,他把PWM2改成了PWM1,别的什么都没动,那么现在符合“PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平”
,否则为无效电平。“结果必然是就是LED长亮喽,要想得到跟原代妈一样的效果,那就把CC2P设置成1,OC2低电平有效,这样就可以了,有兴趣的朋友可以动手试试!(实践出真知吗!)
好了,废了这么多话,也不早了 洗洗睡吧!希望这篇文字对PWM有疑惑的朋友有所帮助!希望大家共同进步!分享是一种快乐,欢迎批评指正!

遗漏了一点,第5句还没解释呢,

5       TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
这句话是说,CCR2中的预装载值何时被传送到当前的CNT寄存器中,这里我们选择的是当更新事件到来的时候才装载,追踪寄存器的设置可知,原来设置的是CCMR1的OC2PE,其实还有一种方式是立即装载看手册:
OC1PE:输出比较1预装载使能(Output compare 1 preload enable)  位3 
0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数
值立即起作用。
1:开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1的
预装载值在更新事件到来时被传送至当前寄存器中。

注意:

舵机供电得特别注意;供电电流必须能够驱动舵机呢。 否则 结果不如人意。舵机的电一般是单独提供的呢。

STM32 PWM波驱动模拟舵机(库函数版)相关推荐

  1. 树莓派输出pwm波c语言,树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制

    树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制 树莓派Ubuntu18.04使用pigpio库产生PWM波实现舵机控制 一:pigpio库简介 pigpio是一个用于树莓派的库 ...

  2. PWM波控制舵机实验

    PWM波控制舵机实验 硬件连接 首先是舵机的引线,一般为三线控制(没有接触过不是三线的),红色为电源,棕色为地,橙黄色为信号.控制舵机的时候,需要不断的给PWM波才能使得舵机在某个角度有扭矩 控制原理 ...

  3. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  4. PWM波控制舵机总结

    文章转载自 https://www.cnblogs.com/zhoubatuo/p/6138033.html 一.关于舵机: 舵机(英文叫Servo):它由直流电机.减速齿轮组.传感器和控制电路组成的 ...

  5. 1-神舟IV号开发板STM32F107VCT6资料包(已购买)\STM32神舟IV号视频教程\第26集 CAN通信实验\双CAN收发测试(STM32神舟IV号-库函数版)

    **1.开发板上:con1放在右侧~走电脑USB烧写器供电 JP3&JP5均接2&3 2.STLINK烧写器USB线连接电脑,串口2 232线先不连 打开项目工程文件** 设置好参数后 ...

  6. STM32标准库函数之 TIM1定时器产生PWM波

    /* 函数功能:定时器1通道1 4产生PWM波 函数参数:无 函数返回值:无 函数描述:无 */ void Dingshiqi1_PWM_Init(void) {TIM_TimeBaseInitTyp ...

  7. STM32 PWM控制舵机

    目录 舵机简介 舵机工作原理 什么是PWM 硬件连线 代码 实现结果 总结 舵机简介 舵机是指在自动驾驶仪中操纵飞机舵面(操纵面)转动的一种执行部件.分有:①电动舵机,由电动机.传动部件和离合器组成. ...

  8. 【STM32】实战2—用STM32产生PWM信号驱动舵机MG996R(一)

    目录 0 参考资料出处 参考博客 1 实验预期效果 2 硬件学习 2.1 舵机MG996R 3 STM32CubeMX的相关配置与接线 3.1 配置定时器TIM3 3.2 stm32原理图 3.3 舵 ...

  9. STM32单片机:定时器TIM输出PWM波

    学习32单片机过程中使用的工具:MDK Keil5 + 正点原子精英版(STM32F103ZET6)+ STM32CubeMX + HAL开发 一.PWM的产生原理 关于PWM的产生原理网上有很多教程 ...

最新文章

  1. 导致甲骨文裁员的原因有哪些?
  2. android 6.0 自定义application,Android6.0之App中的资源管理对象创建
  3. jvm(13)-线程安全与锁优化
  4. 1063. 计算谱半径(20)
  5. layui导航栏页面滚动固定_帮你搞定长滚动网页的设计!这5种设计策略需谨记!...
  6. java comparable接口_浅谈程序接口
  7. 《代码大全2》高质量子程序的5个关键点
  8. linux防火墙多个 多个ip配置,iptables一次性封多个ip,使用ipset 工具
  9. css标准流/非标准流 盒子模型
  10. netcat 传输文件
  11. JavaScript中的静态函数
  12. 柏诚股份冲刺上交所:年营收27.4亿 拟募资4.7亿
  13. 微信小程序项目转换成uniapp项目
  14. 【测试】测试人员部署测试环境是什么意思
  15. 也许你会用到的58个硬件面试题!
  16. 三段式与四段式耳机插头的区别
  17. 海信电视微助手怎么连接电脑连接网络连接服务器,海信智能电视连接手机的教程详解!...
  18. avos win32 UI api 架构
  19. 关于学Linux的时候安装vmtools时遇到的坑
  20. css3遮盖,关于css3的阴影遮盖问题的小研究

热门文章

  1. 技术评论:明天,中间件在哪?
  2. Linux如何挂载USB、硬盘、光驱、软驱
  3. git基础教程(37) git push origin HEAD:refs/for/master 的意思
  4. 计算机毕业设计springboot精准扶贫项目管理系统q0y06源码+系统+程序+lw文档+部署
  5. 商业银行大数据之路三部曲1:去IOE
  6. FCC 成都社区·前端周刊 第 8 期
  7. Universal Language Model Fine-tuning for Text Classification
  8. 计算机考证word求和公式
  9. Zookeeper 入门,看这篇就够了
  10. Cable test 线材综合性能测试