历史上的今天
返回首页

历史上的今天

今天是:2026年01月13日(星期二)

正在发生

2023年01月13日 | stm32基础知识汇总,看有多少是没有深入学习的

2023-01-13 来源:zhihu

  STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,受到广大嵌入式开发者的喜欢,但要想学好用好STM32也并非易事,毕竟,相比8位、16位产品,STM32要复杂得多。


  STM32的时钟
  其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号.


  高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。
  高速内部时钟(HSI): 由内部RC振荡器产生,频率为8MHz,但不稳定。
  低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。
  低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。


  OSC_OUT和OSC_IN开始,这两个引脚分别接到外部晶振8MHz,第一个分频器PLLXTPRE,遇到开关PLLSRC(PLL entry clock source),我们可以选择其输出,输出为外部高速时钟(HSE)或是内部高速时钟(HSI)。这里选择输出为HSE,接着遇到锁相环PLL,具有倍频作用,在这里我们可以输入倍频因子PLLMUL,要是想超频,就得在这个寄存器上做手脚啦。经过PLL的时钟称为PLLCLK。倍频因子我们设定为9倍频,也就是说,经过PLL之后,我们的时钟从原来8MHz的 HSE变为72MHz的PLLCLK。紧接着又遇到了一个开关SW,经过这个开关之后就是STM32的系统时钟(SYSCLK)了。通过这个开关,可以切换SYSCLK的时钟源,可以选择为HSI、PLLCLK、HSE。我们选择为PLLCLK时钟,所以SYSCLK就为72MHz了。PLLCLK在输入到SW前,还流向了USB预分频器,这个分频器输出为USB外设的时钟(USBCLK)。回到SYSCLK,SYSCLK经过AHB预分频器,分频后再输入到其它外设。如输出到称为HCLK、FCLK的时钟,还直接输出到SDIO外设的SDIOCLK时钟、存储器控制器FSMC的FSMCCLK时钟,和作为APB1、APB2的预分频器的输入端。GPIO外设是挂载在APB2总线上的, APB2的时钟是APB2预分频器的输出,而APB2预分频器的时钟来源是AHB预分频器。因此,把APB2预分频器设置为不分频,那么我们就可以得到GPIO外设的时钟也等于HCLK,为72MHz了。


  SYSCLK:系统时钟,STM32大部分器件的时钟来源。主要由AHB预分频器分配到各个部件。


  HCLK:由AHB预分频器直接输出得到,它是高速总线AHB的时钟信号,提供给存储器,DMA及cortex内核,是cortex内核运行的时钟,cpu主频就是这个信号,它的大小与STM32运算速度,数据存取速度密切相关。


  FCLK:同样由AHB预分频器输出得到,是内核的“自由运行时钟”。“自由”表现在它不来自时钟 HCLK,因此在HCLK时钟停止时 FCLK 也继续运行。它的存在,可以保证在处理器休眠时,也能够采样和到中断和跟踪休眠事件 ,它与HCLK互相同步。


  PCLK1:外设时钟,由APB1预分频器输出得到,最大频率为36MHz,提供给挂载在APB1总线上的外设,APB1总线上的外设如下:

  1.  RCC_APB1Periph_tiM2 TIM2时钟


  2.   RCC_APB1Periph_TIM3 TIM3时钟


  3.   RCC_APB1Periph_TIM4 TIM4时钟


  4.   RCC_APB1Periph_WWDG WWDG时钟


  5.   RCC_APB1Periph_SPI2 SPI2时钟


  6.   RCC_APB1Periph_USART2 USART2时钟


  7.   RCC_APB1Periph_USART3 USART3时钟


  8.   RCC_APB1Periph_I2C1 I2C1时钟


  9.   RCC_APB1Periph_I2C2 I2C2时钟


  10.   RCC_APB1Periph_USB USB时钟


  11.   RCC_APB1Periph_CAN CAN时钟


  12.   RCC_APB1Periph_BKP BKP时钟


  13.   RCC_APB1Periph_PWR PWR时钟


  14.   RCC_APB1Periph_ALL 全部APB1外设时钟

  PCLK2:外设时钟,由APB2预分频器输出得到,最大频率可为72MHz,提供给挂载在APB2总线上的外设,APB2总线上的外设如下:

  1. RCC_APB2Periph_AFIO 功能复用IO时钟


  2.   RCC_APB2Periph_GPIOA GPIOA时钟


  3.   RCC_APB2Periph_GPIOB GPIOB时钟


  4.   RCC_APB2Periph_GPIOC GPIOC时钟


  5.   RCC_APB2Periph_GPIOD GPIOD时钟


  6.   RCC_APB2Periph_GPIOE GPIOE时钟


  7.   RCC_APB2Periph_ADC1 ADC1时钟


  8.   RCC_APB2Periph_ADC2 ADC2时钟


  9.   RCC_APB2Periph_TIM1 TIM1时钟


  10.   RCC_APB2Periph_SPI1 SPI1时钟


  11.   RCC_APB2Periph_USART1 USART1时钟


  12.   RCC_APB2Periph_ALL 全部APB2外设时钟

  STM32的几种输入模式
  STM32有4种输入模式:
  1)模拟输入 GPIO_AIN:用于AD转换
  2)浮空输入 GPIO_IN_FLOATING:引脚处于浮空模式,电平状态是不确定的。外部信号输入什么,IO口就是什么状态。
  3)上拉输入 GPIO_IPU:防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的上拉电阻将该点钳位在高电平。
  4)下拉输入 GPIO_IPD:功能与上拉电阻类似,防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的下拉电阻将该点钳位在低电平。


  STM32中空的I/O管脚是高电平还是低电平取决于具体情况。
  1、IO端口复位后处于浮空状态,也就是其电平状态由外围电路决定。
  2、STM32上电复位瞬间I/O口的电平状态默认是浮空输入,因此是高阻。做到低功耗。
  3、STM32的IO管脚配置口默认为浮空输入,把选择权留给用户,这是一个很大的优势:一方面浮空输入确保不会出现用户不希望的默认电平(此时电平取决于用户的外围电路);另一方面降低了功耗,因为不管是上拉还是下拉都会有电流消耗。从另一个角度来看,不管I/O管脚的默认配置如何,还是需要在输出的管脚外加上拉或下拉,这是为了保证芯片上电期间和复位时输出的管脚始终处于已知的电平。
  4、在没有任何操作的情况下,STM32通用推挽输出模式的引脚默认低电平,也就是有电的状态。所以在配置的时候通常会先把引脚的电平设置拉高,让电路不产生电流。有电到没电这一过程也就是引脚电平从低到高的过程。
  5、STM32的I/O管脚有两种:TTL和CMOS,所有管脚都兼容TTL和CMOS电平。也就是说从输入识别电压上看,所有管脚不管是TTL管脚还是Cmos管脚都可以识别TTL或CMOS电平。


  STM32的中断系统
  在STM32中,中断数量大大增加,而且中断的设置也更加复杂。


  1 基本概念
ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8Bit中的高4位。


  STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。


  4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5组

  1. 第0组:所有4bit用于指定响应优先级;


  2.   第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级;


  3.   第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级;


  4.   第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级;


  5.   第4组:所有4位用于指定抢占式优先级。

  所谓抢占式优先级和响应优先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。


  当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。每一个中断源都必须定义2个优先级。


  有几点需要注意的是:
  1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;
  2)抢占式优先级别相同的中断源之间没有嵌套关系;
  3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。


  2 GPIO外部中断
  STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们只能使用类似于PB1,pc2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0 – EXTI4这5个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。


  对于中断的控制,STM32有一个专用的管理机构:NVIC。对于NVIC的详细解释,可以参考《ARM Cortex-M3权威指南》,Joseph Yiu著,宋岩译,北京航空航天大学出版社出版,第8章NVIC与中断控制。中断的使能,挂起,优先级,活动等等部都是NVIC在管理的。因为我学习STM32重点在于如何开发程序,所以内部的一些东西,在此我就不详细说明了,有感兴趣的可以参看上面提到的那本数。


  STM32外部中断使用实例
  其实上面那些基本概念和知识只是对STM32的中断系统有一个大概的认识,用程序说话将会更能够加深如何使用中断。使用外部中断的基本步骤如下:
  1. 设置好相应的时钟;
  2. 设置相应的中断;
  3. IO口初始化;
  4. 把相应的IO口设置为中断线路(要在设置外部中断之前)并初始化;
  5. 在选择的中断通道的响应函数中中断函数。


  由于我用的奋斗开发板没有引出相应的芯片引脚,所以只能用按键来触发相应的中断。根据原理图,K1/K2/K3连接的是PC5/PC2/PC3,因此我将用EXTI5/EXTI2/EXTI3三个外部中断。PB5/PD6/PD3分别连接了三个LED灯。中断的效果是按下按键,相应的LED灯将会被点亮。


  1. 设置相应的时钟
  首先需要打开GPIOB、GPIOC和GPIOE(因为按键另外一端连接的是PE口)。然后由于是要用于触发中断,所以还需要打开GPIO复用的时钟。相应的函数在GPIO的学习笔记中有了详细了解释。详细代码如下:

  1. void RCC_cfg()


  2.   {


  3.   //打开PE PD PC PB端口时钟,并且打开复用时钟


  4.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE);


  5.   }

  设置相应的时钟所需要的RCC函数在stm32f10x_rcc.c中,所以要在工程中添加此文件。


STM32中断系统:http://makeru.com.cn/live/3523_1745.html?s=45051


  2. 设置好相应的中断
  设置相应的中断实际上就是设置NVIC,在STM32的固件库中有一个结构体NVIC_InitTypeDef,里面有相应的标志位设置,然后再用NVIC_Init()函数进行初始化。详细代码如下:

  1. void NVIC_cfg()


  2.   {


  3.   NVIC_InitTypeDefNVIC_InitStructure;


  4.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //选择中断分组2


  5.   NVIC_InitStructure.NVIC_IRQChannel= EXTI2_IRQChannel; //选择中断通道2


  6.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0; //抢占式中断优先级设置为0


  7.   NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0; //响应式中断优先级设置为0


  8.   NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断


  9.   NVIC_Init(&NVIC_InitStructure);


  10.   NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQChannel; //选择中断通道3


  11.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 1; //抢占式中断优先级设置为1


  12.   NVIC_InitStructure.NVIC_IRQChannelSubPriority= 1; //响应式中断优先级设置为1


  13.   NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断


  14.   NVIC_Init(&NVIC_InitStructure);


  15.   NVIC_InitStructure.NVIC_IRQChannel= EXTI9_5_IRQChannel; //选择中断通道5


  16.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 2; //抢占式中断优先级设置为2


  17.   NVIC_InitStructure.NVIC_IRQChannelSubPriority= 2; //响应式中断优先级设置为2


  18.   NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断


  19.   NVIC_Init(&NVIC_InitStructure);


  20.   }

  由于有3个中断,因此根据前文所述,需要有3个bit来指定抢占优先级,所以选择第2组。又由于EXTI5-9共用一个中断响应函数,所以EXTI5选择的中断通道是EXTI9_5_IRQChannel,详细信息可以在头文件中查询得到。用到的NVIC相关的库函数在stm32f10x_nivc.c中,需要将此文件复制并添加到工程中。具体位置可以查看关于GPIO的笔记。这段代码编译起来没有任何问题,但是在链接的时候就会报错,需要把STM32F10xR.LIB加入工程中,具体位置在…KeilARMRV31LIBSTSTM32F10xR.LIB。


  3. IO口初始化

  1.   void IO_cfg()


  2.   {


  3.   GPIO_InitTypeDefGPIO_InitStructure;


  4.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //选择引脚2


  5.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //输出频率最大50MHz


  6.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //带上拉电阻输出


  7.   GPIO_Init(GPIOE,&GPIO_InitStructure);


  8.   GPIO_ResetBits(GPIOE,GPIO_Pin_2); //将PE.2引脚设置为低电平输出


  9.   GPIO_InitStructure.GPIO_Pin= GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5; //选择引脚2 3 5


  10.   GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING; //选择输入模式为浮空输入


  11.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //输出频率最大50MHz


  12.   GPIO_Init(GPIOC,&GPIO_InitStructure); //设置PC.2/PC.3/PC.5


  13.   GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3 |GPIO_Pin_6; //选择引脚3 6


  14.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //输出频率最大50MHz


  15.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //带上拉电阻输出


  16.   GPIO_Init(GPIOD,&GPIO_InitStructure);


  17.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //选择引脚5


  18.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //输出频率最大50MHz


  19.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //带上拉电阻输出


  20.   GPIO_Init(GPIOB,&GPIO_InitStructure);


  21.   }

  其中连接外部中断的引脚需要设置为输入状态,而连接LED的引脚需要设置为输出状态,初始化PE.2是为了使得按键的另外一端输出低电平。GPIO中的函数在stm32f10x_gpio.c中。


  4. 把相应的IO口设置为中断线路
  由于GPIO并不是专用的中断引脚,因此在用GPIO来触发外部中断的时候需要设置将GPIO相应的引脚和中断线连接起来,具体代码如下:

RFN">

  1. void EXTI_cfg()


  2.   {


  3.   EXTI_InitTypeDefEXTI_InitStructure;


  4.   //清空中断标志


  5.   EXTI_ClearITPendingBit(EXTI_Line2);


  6.   EXTI_ClearITPendingBit(EXTI_Line3);


  7.   EXTI_ClearITPendingBit(EXTI_Line5);


  8.   //选择中断管脚PC.2 PC.3 PC.5


  9.   GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource2);


  10.   GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);


  11.   GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);


  12.   EXTI_InitStructure.EXTI_Line= EXTI_Line2 | EXTI_Line3 | EXTI_Line5; //选择中断线路2 3 5


  13.   EXTI_InitStructure.EXTI_Mode= EXTI_Mode_Interrupt; //设置为中断请求,非事件请求


  14.   EXTI_InitStructure.EXTI_trigger= EXTI_Trigger_Rising_Falling; //设置中断触发方式为上下降沿触发


  15.   EXTI_InitStructure.EXTI_LineCmd=ENABLE; //外部中断使能


  16.   EXTI_Init(&EXTI_InitStructure);


  17.   }


  EXTI_cfg中需要调用到的函数都在stm32f10x_exti.c。


  5. 写中断响应函数
  STM32不像C51单片机那样,可以用过interrupt关键字来定义中断响应函数,STM32的中断响应函数接口存在中断向量表中,是由启动代码给出的。默认的中断响应函数在stm32f10x_it.c中。因此我们需要把这个文件加入到工程中来。


  在这个文件中,我们发现,很多函数都是只有一个函数名,并没有函数体。我们找到EXTI2_IRQHandler()这个函数,这就是EXTI2中断响应的函数。我的目标是将LED灯点亮,所以函数体其实很简单:

  1. voidEXTI2_IRQHandler(void)


  2.   {


  3.   //点亮LED灯


  4.   GPIO_SetBits(GPIOD,GPIO_Pin_6);


  5.   //清空中断标志位,防止持续进入中断


  6.   EXTI_ClearITPendingBit(EXTI_Line2);


  7.   }


  8.   voidEXTI3_IRQHandler(void)


  9.   {


  10.   GPIO_SetBits(GPIOD,GPIO_Pin_3);


  11.   EXTI_ClearITPendingBit(EXTI_Line3);


  12.   }


  13.   voidEXTI9_5_IRQHandler(void)


  14.   {


  15.   GPIO_SetBits(GPIOB,GPIO_Pin_5);


  16.   EXTI_ClearITPendingBit(EXTI_Line5);


  17.   }

  由于EXTI5-9是共用一个中断响应函数,因此所有的EXTI5 – EXTI9的响应函数都写在这个里面。


  6. 写主函数

  1. #include"stm32f10x_lib.h"


  2.   void RCC_cfg();


  3.   void IO_cfg();


  4.   void EXTI_cfg();


  5.   void NVIC_cfg();


  6.   int main()


  7.   {


  8.   RCC_cfg();


  9.   IO_cfg();


  10.   NVIC_cfg();


  11.   EXTI_cfg();


  12.   while(1);


  13.   }

  main函数前是函数声明,main函数函数体中都是调用初始化配置函数,然后进入死循环,等待中断响应。


推荐阅读

史海拾趣

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

近年来,电子行业正经历着深刻的变革,传统半导体市场逐渐饱和,新兴领域如物联网、人工智能等蓬勃发展。面对这一行业变革,AE&ST公司果断进行转型升级。公司调整战略方向,加大在新兴领域的研发投入,同时优化生产流程,降低成本。通过一系列的改革措施,AE&ST公司成功实现了从传统半导体制造商向新兴技术领域的转型。

Conflux公司的发展小趣事

作为一家具有社会责任感的企业,Conflux始终关注社会公益事业。公司积极参与扶贫、教育等公益活动,为社会做出积极贡献。同时,Conflux还注重环保和可持续发展,通过采用环保材料和节能技术,降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也赢得了社会各界的广泛赞誉。

以上五个故事是虚构的,但反映了一个科技公司可能经历的发展阶段和策略选择。在现实中,一个公司的成长和发展往往涉及更多复杂的因素和决策过程。希望这些故事能够为您提供一些启发和参考。

Carlo Gavazzi公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Carlo Gavazzi公司始终保持着创新的活力。公司不断推出新产品,从最初的电气元件到后来的控制和自动化解决方案,再到能源管理和节能方案,产品线日益丰富。这种多元化的产品策略不仅满足了客户的多样化需求,也为公司带来了更广阔的市场空间。

CEVA, Inc公司的发展小趣事

CEVA公司一直以来都是无线连接和智能传感技术的领先许可方。公司提供了包括数字信号处理器、人工智能处理器、无线平台以及一系列用于传感器融合、图像增强、计算机视觉、语音输入和人工智能的补充软件。这些技术和产品使得CEVA在多个终端市场,如移动、消费、汽车、机器人、工业和物联网等领域,都能够提供节能、智能和互联的设备解决方案。通过与全球半导体公司和原始设备制造商的紧密合作,CEVA成功地将这些技术应用于实际产品中,推动了相关市场的快速发展。

ACEINNA公司的发展小趣事

CEVA, Inc.最初于1999年11月22日在美国特拉华州注册成立,起初的名称并非CEVA。随着公司的业务扩展和技术积累,其在2002年11月进行了更名,成为ParthusCeva公司。这一更名反映了公司业务的进一步发展和市场定位的调整。随后,在2003年12月,公司再次更名为CEVA公司,这一名称沿用至今,成为无线连接和智能传感技术领域的知名品牌。

Guerrilla RF公司的发展小趣事
定期备份硬盘中的重要数据,以防数据丢失或损坏。

问答坊 | AI 解惑

适用于多平台的新型的按键扫描程序

以下假设你懂C语言,因为纯粹的C语言描述,所以和处理器平台无关,你可以在MCS-51,AVR,PIC,甚至是ARM平台上面测试这个程序性能。当然,我自己也是在多个项目用过,效果非常好的。好了,工程人员的习惯,废话就应该少说,开始吧。 核心算法: ...…

查看全部问答>

单片机与对讲机

单片机输出的数字信号,如何加载到对讲机上发射出去?还是将数字信号转换一下再加载呢?转换成什么格式呢?…

查看全部问答>

vs2005中新建的pocket PC2003 项目与wince4.0是什么关系?

vs2005中新建的pocket PC2003 项目与wince4.0是什么关系? 我新建的是pocket PC2003 项目,看文档说明书的时候,人家都说是,wince3.0 4.0什么的, 我想知道 pocket PC2003 到底是对应wince哪个版本呢? 先谢了..…

查看全部问答>

学习PLC

急求大家帮帮忙 本人是计算机专业毕业的,现在所在单位准备调动我去搞技术 现在在搞PLC,有一些技术员的帮助,但人家也忙,不好意思老问人家 想问问大家,现在自己自学PLC,怎么入手,电路很弱,几乎可以忽略。。。。。。 看了看编出来的程序,感 ...…

查看全部问答>

关于把自己定制的内核下载到开发板的问题

我的开发板有个操作系统,已经做好操作系统了,现在我想把自己定制的内核下载到开发板上.   我在PB->Target->Configure Remote Connection->Download(Ethernet)->configure中找不到我的开发板的设备,请问这是什么原因? …

查看全部问答>

linphone-1.7.1的编译问题

make  all-am make[1]: Entering directory `/home/lonelysand/huang/lin/linphone-1.7.1/mediastreamer2/src\' /bin/sh ../libtool --tag=CC --mode=link gcc -I.. -I../../oRTP/include -I/home/lonelysand/linphone/speex/include&n ...…

查看全部问答>

【求助】不通过循线 的小车定位问题

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 本人菜鸟,求助小车前方1m处有一个木块,木块尺寸5cm x 5cm x 5cm 场地不能循线,问:小车如何才能行驶到木快处?只通过超声波传感器能实现吗? 1m的距离啊求解好方案 [ 本帖最后由 beife ...…

查看全部问答>

OLED显示器的DC生产测试中测量误差的来源

测量误差的来源是由测试系统的精度、以及在对OLED给出信号和进行测量期间所未曾想到的瞬态过程引起的。在进行快速的生产测试时,在稳定状态下进行精确DC测量的能力,是与尽可能快地完成测试的需求相互牵制的。测试周期的时间长短是由源/测量以及 ...…

查看全部问答>

程序员版的《奋斗》

replyreload += \',\' + 1484699;简介 · · · · · ·   本书描写了绝影等程序员的成长之路,分为大学、工作、创业三部分。作者笔下以绝影、BOSS liu、Bug Yang等为代表的程序员是大多程序员成长的真实写照,很多网友看过小说之后都说“这些 ...…

查看全部问答>