历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2019年03月13日 | STM32 关于ADC采交直流问题探讨

2019-03-13 来源:eefocus

前沿

关于STM32采样问题,相信很多人曾遇到过这样的问题,无论是关于ADC底层相关的配置还是ADC采样方案的抉择,或者是ADC软硬件滤波算法,这里博主就自己曾做过的训练题为引申,探讨ADC采样过程中的问题。


1.ADC的认识

1.1 ADC初始化参数

/* Exported types ------------------------------------------------------------*/


/**

  * @brief   ADC Init structure definition  

  */

typedef struct

{

  uint32_t ADC_Resolution;                                 /*!< Configures the ADC resolution dual mode. This parameter can be a value of @ref ADC_resolution */                                   

  FunctionalState ADC_ScanConvMode;             /*!< Specifies whether the conversion is performed in Scan (multichannels)or Single (one channel) mode.

                                                                                   This parameter can be set to ENABLE or DISABLE */

  FunctionalState ADC_ContinuousConvMode;  /*!< Specifies whether the conversion is performed in Continuous or Single mode.

                                                                                   This parameter can be set to ENABLE or DISABLE. */

  uint32_t ADC_ExternalTrigConvEdge;          /*!< Select the external trigger edge and enable the trigger of a regular group.

                                                                           This parameter can be a value of

                                                                       @ref ADC_external_trigger_edge_for_regular_channels_conversion */

  uint32_t ADC_ExternalTrigConv;                  /*!< Select the external event used to trigger the start of conversion of a regular group.

                                                                           This parameter can be a value of

                                                                       @ref ADC_extrenal_trigger_sources_for_regular_channels_conversion */

  uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data  alignment is left or right. This parameter can be

                                                                       a value of @ref ADC_data_align */

  uint8_t  ADC_NbrOfConversion;           /*!< Specifies the number of ADC conversions  that will be done using the sequencer for

                                                                       regular channel group.This parameter must range from 1 to 16. */

}ADC_InitTypeDef;



涉及的相关参数:ADC分辨率(6/8/10/12位)、扫描或非扫描模式、连续或不连续转换、触发方式、对齐方式等。 

       这里值得注意的是规则组转化序列不能超过16。


1.2 ADC通用初始化参数

/**

  * @brief   ADC Common Init structure definition  

  */

typedef struct

{

  uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in

                                               independent or multi mode.

                                               This parameter can be a value of @ref ADC_Common_mode */                                              

  uint32_t ADC_Prescaler;                 /*!< Select the frequency of the clock

                                               to the ADC. The clock is common for all the ADCs.

                                               This parameter can be a value of @ref ADC_Prescaler */

  uint32_t ADC_DMAAccessMode;             /*!< Configures the Direct memory access

                                              mode for multi ADC mode.

                                               This parameter can be a value of

                                               @ref ADC_Direct_memory_access_mode_for_multi_mode */

  uint32_t ADC_TwoSamplingDelay;          /*!< Configures the Delay between 2 sampling phases.

                                               This parameter can be a value of

                                               @ref ADC_delay_between_2_sampling_phases */


}ADC_CommonInitTypeDef;


这里涉及相关ADC单独/多重模式选择,两采样阶段采样间隔,DMA使能/失能,ADC分屏系数(注意ADC的时钟频率不超过36Mhz)


1.3 ADC相关配置库函数

/*  Function used to set the ADC configuration to the default reset state *****/  

void ADC_DeInit(void);


/* Initialization and Configuration functions *********************************/

void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);

void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);

void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);

void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);

void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);


/* Analog Watchdog configuration functions ************************************/

void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);

void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold);

void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);


/* Temperature Sensor, Vrefint and VBAT management functions ******************/

void ADC_TempSensorVrefintCmd(FunctionalState NewState);

void ADC_VBATCmd(FunctionalState NewState);


/* Regular Channels Configuration functions ***********************************/

void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);

void ADC_SoftwareStartConv(ADC_TypeDef* ADCx);

FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);

void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);

void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);

uint32_t ADC_GetMultiModeConversionValue(void);


/* Regular Channels DMA Configuration functions *******************************/

void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState);


/* Injected channels Configuration functions **********************************/

void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);

void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);

void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);

void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);

void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge);

void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx);

FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);

void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);


/* Interrupts and flags management functions **********************************/

void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);

FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);

void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);

ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);

void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);


2.定时器捕获模式

定时器功能:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和pwm)


2.1 初始化基本定时参数

/**

  * @brief  TIM Time Base Init structure definition  

  * @note   This structure is used with all TIMx except for TIM6 and TIM7.  

  */


typedef struct

{

  uint16_t TIM_Prescaler;         /*!< Specifies the prescaler value used to divide the TIM clock.

                                       This parameter can be a number between 0x0000 and 0xFFFF */


  uint16_t TIM_CounterMode;       /*!< Specifies the counter mode.

                                       This parameter can be a value of @ref TIM_Counter_Mode */


  uint32_t TIM_Period;            /*!< Specifies the period value to be loaded into the active

                                       Auto-Reload Register at the next update event.

                                       This parameter must be a number between 0x0000 and 0xFFFF.  */


  uint16_t TIM_ClockDivision;     /*!< Specifies the clock division.

                                      This parameter can be a value of @ref TIM_Clock_Division_CKD */


  uint8_t TIM_RepetitionCounter;  /*!< Specifies the repetition counter value. Each time the RCR downcounter

                                       reaches zero, an update event is generated and counting restarts

                                       from the RCR value (N).

                                       This means in PWM mode that (N+1) corresponds to:

                                          - the number of PWM periods in edge-aligned mode

                                          - the number of half PWM period in center-aligned mode

                                       This parameter must be a number between 0x00 and 0xFF.

                                       @note This parameter is valid only for TIM1 and TIM8. */

} TIM_TimeBaseInitTypeDef;


2.2 输入比较参数初始化

/**

  * @brief  TIM Input Capture Init structure definition  

  */


typedef struct

{


  uint16_t TIM_Channel;      /*!< Specifies the TIM channel.

                                  This parameter can be a value of @ref TIM_Channel */


  uint16_t TIM_ICPolarity;   /*!< Specifies the active edge of the input signal.

                                  This parameter can be a value of @ref TIM_Input_Capture_Polarity */


  uint16_t TIM_ICSelection;  /*!< Specifies the input.

                                  This parameter can be a value of @ref TIM_Input_Capture_Selection */


  uint16_t TIM_ICPrescaler;  /*!< Specifies the Input Capture Prescaler.

                                  This parameter can be a value of @ref TIM_Input_Capture_Prescaler */


  uint16_t TIM_ICFilter;     /*!< Specifies the input capture filter.

                                  This parameter can be a number between 0x0 and 0xF */

} TIM_ICInitTypeDef;


定时器输入捕获模式可以来测量脉冲宽度或者测量频率 


1

3.相关训练题及测试要求

3.1 信号采集模块

× 测量直流信号幅值:


输入可调直流信号0~1V,测量相应的信号幅值并在LCD上显示测量值。

× 测量方波信号频率:


输入方波信号频率50~1KHz, 测量其频率并在LCD上显示频率值。 


2

3.2发挥部分

信号源产生正弦交流信号(50~1KHz),幅值在-1v~+1v范围内可调。STM32测量正弦波信号的幅值和频率,并将测量值显示在LCD上。


显示信号幅值和频率外,在LCD上显示正弦波信号曲线。


4.总体方案流程图

 3 

对应软件总体框架


/*****************************************************

*   函数功能:主函数模块

*     作者:klaus 邮箱:xcf2016a@outlook.com

*     功能介绍:集成各功能模块

*   版本:1.1(暂无改动)

******************************************************/

int main(void)

{    

    TIM3_Int_Init(1000-1,840-1);

    TIM4_Int_Init(Tim4SetCnt-1,84-1);

    TIM2_pwm_input(0xffffffff,84-1); 

    BSP_ADC_Init();              

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    KEY_Init();

    LED_Init();    

    delay_init(168);

    OLED_Init();


    while(1)

    {

        if(flag_10ms)

        {

            key_action();//按键函数

            if(delay%50==0)    

                Oled_show();//显示函数

            system_maintain();

            sample_process();//采样函数

            flag_10ms=0;

        }

    }

}

5. 硬件电路设计

5.1 电压比较器电路

电压比较器的功能是对两个输入电压的大小进行比较,并根据比较结果输出高低电平。 

       通常用阈值电压和传输特性来描述比较器的工作特性。 阈值电压(又称门槛电平)是使比较器输出电 压发生跳变时的输入电压值,简称为阈值,用符号UTH表示。估算阈值主要应抓住输入信号使输出电压发生跳变时的临界条件。这个临界条件 是集成运放两个输入端的电位相等(两个输入端的电流也视为零),即U+=U–。


5.1.1 零电平比较器(过零比较器)

电压比较器是将一个模拟输入信号ui与一个固定的参考电压UR进行比较和鉴别的电路。   

       参考电压为零的比较器称为零 电平比较器。按输入方式的不同可分为反相输入和同相输入两种零电位比较器 


4

5.1.2 任意电平比较器(俘零比较器)

将零电平比较器中的接地端改接为一个参考电压UR(设 为直流电压),由于UR的大小和极性均可调整,电路成为任意电平比较器或称俘零比较器。 


5

5.1.3 滞回电压比较器

滞回比较器又称施密特触发器,迟滞比较器。这种比较器的特点是当输入信号ui逐渐增大或逐渐减小时,它有两个阈值,且不相等,其传输特性具有“滞回”曲线的形状。 

       滞回比较器也有反相输入和同相输入两种方式。    

       UR是某一固定电压,改变UR值能改变阈值及回差大小。 

 6 

本次中,我们选择电力电子中常用的LM393比较芯片,下图为比较原理图 

7

在输入端,我们直接输入交流正弦型号,,Dz稳压二极管会将电压抬至一定高度,供芯片比较。 

       如下图所示 


8

5.2 交流采样电路

当输出电压、电流是双极性的交流信号,AD只能采单极性的交流信号。采用如下图所示的直流偏移电路可以把信号转换一下。 

9

电解电容C取470uF/16V,R1、R2取2k,这样高通截止频率为2Hz左右,用于采样20Hz以上的信号。 

 10 

计算过程中,先用求平均的方式把直流偏置算出来,然后扣除该值就得到交流信号的实际值了。不过要注意这部分电路要放尽量在单片机那头。


6.软件设计

根据题目要求,我们配置ADC成ADC1和ADC2双重模式,即由主ADC1带动从ADC2进行交替采样,详细代码见源文件,具体配置过程参照前面博客,这里是链接。


6.1 直流采样问题

直流采样,让ADC一直循环取值,相关程序如下


    double adc_getvalue[10];

    u32 adSumDC[10];


    memset(&adSumDC,0,sizeof(adSumDC));

    for(k=0;k<10;k++){

            for(j=0;j<40;j++)

                adSumDC[k] += aADCConvertedValue[2];

            adc_getvalue[k]=(double)adSumDC[k]*33/(4096*400);

    }

    memset(&adSumDC,0,sizeof(adSumDC));

    AdLight=adc_filter(10,adc_getvalue);


同时为直流采样设计滤波函数,代码如下


double adc_filter(u32 num,double *adc_num_value)

{

  u8 i,j,k;

  u8 noswap=1;

    double adc_sum_tmp=0,adc_ave_tmp=0;


  for(i=0;i


      for(j=0;j

      {

          if(adc_num_value[j]>adc_num_value[j+1]){

              adc_num_value[j]=adc_num_value[j]+adc_num_value[j+1];

              adc_num_value[j+1]=adc_num_value[j]-adc_num_value[j+1];

              adc_num_value[j]=adc_num_value[j]-adc_num_value[j+1];

              noswap=0;

          }

       }

      if(noswap) break;

  }

  for(k=2;k

  //adc_sum_tmp -= (adc_num_value[0]+adc_num_value[1]+adc_num_value[num-2]+adc_num_value[num-1]);    

  adc_ave_tmp=adc_sum_tmp/(num-4);


  adc_sum_tmp=0;


    return adc_ave_tmp;

}



我们直接将采样引脚连接到3.3v和0vde得到如下结果 


11

6.2 交流频率测量

对于测交流正弦波信号的频率,我们将双极性的正弦波通过电压比较整形成脉冲波供单片机采样。 

       这里利用定时器的输入捕获功能,相应定时器的底层配置可参照之前博客,这里是链接。


相关计算频率过程代码如下 

相关计算频率过程代


void TIM2_IRQHandler(void)

{

    if(TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)

    {

        TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); 

        //ADStartTim4Flag=1;

            TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);

    }

    IC2Value=TIM_GetCapture2(TIM2);

    IC1Value=TIM_GetCapture1(TIM2);

    //GPIO_SetBits(GPIOD,GPIO_Pin_1);

    if(IC2Value!=0){

        DutyCycle=(float)IC1Value*100/IC2Value;

        Frequency =(float)1000000/IC2Value;

    }

    else{

        GPIO_ResetBits(GPIOD,GPIO_Pin_1);

        DutyCycle=0;

        Frequency=0;

    }

    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

}


显示函数如下


    OLED_ShowString(0,0,"MeasureResult:",16);

    OLED_ShowString(0,16,"IC2Value:",16);

    OLED_ShowNum(72,16,IC2Value,7,16);

    OLED_ShowString(0,32,"DutyCycle:",16);

    OLED_ShowFloatNum(80,32,DutyCycle,7,16);

    OLED_ShowString(0,48,"Frequency:",16);

    OLED_ShowFloatNum(80,48,Frequency,7,16);


实验现象图 


12

6.3 交流采样问题

对于交流采样,采取的是同步采样过程,具体步骤是电压比较电路触发定时器TIM4实时,定时器根据输入信号频率计算定时间隔,等间隔采样。


6.3.1定时器中断程序

/*****************************************************

*   函数功能:TIM4中断程序,同步采样处理

*     作者:klaus 邮箱:xcf2016a@outlook.com

*     功能介绍:触发同步采样

*   版本:1.1(暂无改动)

******************************************************/

void TIM4_IRQHandler(void)

{

        if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) 

        {

                ADArrayStay[ArrayCnt]=aADCConvertedValue[3];

                ArrayCnt++;

                if(ArrayCnt>=ADPointGet){

                    ArrayCnt=0;ADGetDowmFlag=1;

                    TIM_ITConfig(TIM4,TIM_IT_Update,DISABLE); 

                    cnt_test++;

                    if(cnt_test%2==0)GPIO_ResetBits(GPIOD,GPIO_Pin_1);else GPIO_SetBits(GPIOD,GPIO_Pin_1);    

        }        

    }    

    TIM_ClearITPendingBit(TIM4,TIM_IT_Update); 

}


6.3.2 AD计算程序

if(ADGetDowmFlag==1)

    {

        sampleMax=sampleMin=ADArrayStay[0];

        for(k=1;k

        {

                if(ADArrayStay[k]>=sampleMax)sampleMax=ADArrayStay[k];

                if(ADArrayStay[k]<=sampleMin && ADArrayStay[k]!=0)sampleMin=ADArrayStay[k];

        }

        sampleIndex=3.3f*(sampleMax-sampleMin)/4096;

        VppValue=sampleIndex;

        VoltageRms[AdCnt]=sampleIndex/2.828f;

        AdCnt++;

        if(AdCnt>=FILTER_POINTS){AdCnt=0;ADVoltage=adc_filter(FILTER_POINTS,VoltageRms);}

 }ADGetDowmFlag=0;


6.3.3 显示函数

OLED_ShowString(0,0,"ACModeTake:",16);

OLED_ShowString(0,16,"VppVal:",16);

OLED_ShowFloatNum(56,16,VppValue,7,16);

OLED_ShowString(104,16,"v",16);

OLED_ShowString(0,32,"RmsVal:",16);

OLED_ShowFloatNum(56,32,ADVoltage,7,16);

OLED_ShowString(104,32,"v",16);

OLED_ShowString(0,48,"Frequ:",16);

OLED_ShowFloatNum(48,48,Frequency,7,16);

OLED_ShowString(96,48,"Hz",16);


实验现象图 

13

至于造成峰峰值不准的原因是:没供地,即博主单片机是电脑jlink供电,电路是电源供电,输入信号是信号源供电,三者地没有连在一起。


6.4 正弦波画图函数

将AD采样回来的函数进行相应数值变化以适合OLED显示,先画点,连线成图 

程序代码如下


void sin_table_plot{

   OLED_ShowChar(0,0,'^',16,1);

   OLED_DrawLine(4,1,4,62,1);

   OLED_DrawLine(4,60,70,60,1);

   OLED_ShowChar(70,54,'>',12,1);


   for(i=4;i<66;i++){

       xi=i;

       yi=60*ADArrayStay[i-4]/4096;

       OLED_DrawLine(xn,yn,xi,yi,1);

       xn=i;

       yn=yi;

   }     

}   


实验现象图 


14

7.实验总图


15

推荐阅读

史海拾趣

ENTRELECUK公司的发展小趣事

随着业务的不断发展,ENTRELEC UK开始寻求全球市场的拓展。公司通过与国外代理商建立合作关系,将产品销往世界各地。同时,公司还在海外设立研发中心和生产基地,以便更好地了解当地市场需求,提供定制化的解决方案。这些举措使ENTRELEC UK在全球电子行业中树立了良好的品牌形象。

Hei Inc Optoelectronic Division公司的发展小趣事
无触点控制电路结构相对简单,维护更为方便,且随着电子技术的不断发展,易于进行功能升级和扩展。
C.K Magma公司的发展小趣事

随着技术的成熟,C.K Magma公司开始将产品推向市场。他们积极与各大电子厂商合作,为其提供高性能的半导体解决方案。同时,公司还注重品牌建设,通过参加行业展会、举办技术研讨会等方式,提升品牌知名度和影响力。随着市场份额的逐步扩大,C.K Magma公司逐渐在电子行业中树立起了自己的地位。

Ericsson公司的发展小趣事

Ericsson非常重视人才培养和团队建设。公司设立了专门的培训机构为员工提供全面的培训和发展机会帮助他们不断更新知识和技能以适应快速变化的市场环境。此外Ericsson还注重营造积极向上的企业文化鼓励员工创新创造和发挥潜力为公司的发展贡献自己的力量。这种注重人才培养和团队建设的策略也为Ericsson的长期发展提供了有力保障。

Advanced Thermal Solutions公司的发展小趣事

为了进一步扩大市场份额,ATS开始实施全球化战略。公司先后在北美、欧洲和亚洲等地设立了分公司或办事处,以便更好地服务全球客户。同时,ATS还积极参与国际展览和交流活动,与全球各地的合作伙伴建立紧密的合作关系。这些举措使ATS的产品和服务得以覆盖更广泛的地域,公司的知名度和影响力也不断提升。

ConnectBlue公司的发展小趣事

ConnectBlue公司成立于2000年,当时正值无线通信技术快速发展的时期。公司创始人凭借对无线技术的深刻理解和市场需求的敏锐洞察,决定专注于无线系统的研发和生产。起初,公司面临资金紧张和技术难题,但创始团队凭借坚韧不拔的精神,克服了一个又一个困难,成功开发出了一系列具有竞争力的无线模块产品。

问答坊 | AI 解惑

最强大的串口桥式转换芯片

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 我公司是JM系列IC的一级代理商,下面是JM IC的功能型号简介: JMicron智微科技主要产品研发方向为高速串行式连结(High Speed Serial Link)的相关技术,该技术现已广泛应用于Serial ATA、PCI E ...…

查看全部问答>

3.3 伏至 5 伏互联技巧

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 概述 我们对处理速度的需求日益增长,伴随着这种增长,用来构建单片机的晶体管尺寸则在持续减小。以更低的成本实现更高的集成度,也促进了对更小的几何尺寸的需求。随着尺寸的减小,晶体管击穿电压 ...…

查看全部问答>

C++.net硬件开发

请问各位大侠,C++.net能开发硬件程序吗,就是那种控制门口挡车杆升降的程序。 如果不能,那可以用VisualC++开发吗? 多种语言开发的程序可不可以组成一个软件上那? 谢谢各位。…

查看全部问答>

谁知道PROTEUS的第三方元件库怎么添加

有谁知道PROTEUS的第三方元件库怎么添加啊,我用的是7.5sp3的版本,我把.lib文件加到元件库里面但是还是以前那些元件,这是怎么回事啊?请大家帮帮忙!!!谢谢…

查看全部问答>

寻找西安写PDA软件的开发人员或公司。

要求:1、熟悉WINCE平台       2、有相关产品介绍       3、必须是西安的 联系QQ:112654 信箱:xclion@126.com 价格面谈。…

查看全部问答>

【重量级】使用RT-Thread RTOS及附属组件的LM3S8962评估板的例程

Introduction •这是使用RT-Thread RTOS及附属组件的LM3S8962评估板例程,对LM3S系列其他芯片也同样适用。所有例程源码来自开源实时操作系统RT-Thread的官方SVN源码服务器。这儿将例程做成了一个个单独的工程,目的是为了使刚接触RT-Thread的 ...…

查看全部问答>

07.28【每周讨论】相信大家都知道C语言了,那么E(易)语言呢?

第一次听说E语言听过,不了解最近刚刚知道一点点知道,感觉不错 [ 本帖最后由 longxtianya 于 2011-7-30 19:48 编辑 ]…

查看全部问答>

SimpliciTI-IAR-1.2.0>>CC430EM里的程序为何不能用了????

我用SimpliciTI-IAR-1.2.0里的cc430例程,用cc430F5137模块来测试程序AP_as_Data_Hub,为何AP和ED连接不上了,我的ED发送地址是0xFF,为何发不出去了???望各位老师能够解答我的难题 !在此谢过!…

查看全部问答>

LM3S9B96开发板里面怎么没有spiflash_rw例程?

    lm3s9b96开发板里面怎么没有spiflash_rw例程?   …

查看全部问答>