这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » laotui ST L053试用进程帖

共9条 1/1 1 跳转至

laotui ST L053试用进程帖

菜鸟
2015-12-12 13:55:17     打赏

STM32L053.rar

先自己建个工程模板用,只添加了IO翻转用于测试,MDK5以上。




关键词: laotui     进程    

菜鸟
2015-12-12 14:40:59     打赏
2楼

建模板时忘记一些定义添加步骤如下第一步第二步

添加    STM32L053xx,USE_STM32L0XX_NUCLEO,USE_HAL_DRIVER

接下来添加LCD驱动程序,LCD分辨率96*64控制ST7585.


菜鸟
2015-12-12 15:43:27     打赏
3楼
LCD驱动移植完成,另外图片有点变形不过能看清。屏幕是自己做废的一块不影响显示。显示STM32L053_LCD.rar

菜鸟
2015-12-12 23:54:20     打赏
4楼
今天看了一下新的HAL库和之前外设库变化较大,封的太死之前都是库加寄存器的方式写程序。还是使用了旧库的思路外设逐个初始化,ADC已经调的差不多了,明天整理出来。

菜鸟
2015-12-13 19:56:27     打赏
5楼

ADC部分设置

void ADC_Init(void)
{
  AdcHandle.Instance = ADC1;
  AdcHandle.Init.OversamplingMode      = DISABLE;
  AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV1;
  AdcHandle.Init.LowPowerAutoPowerOff  = DISABLE;
  AdcHandle.Init.LowPowerFrequencyMode = ENABLE;
  AdcHandle.Init.LowPowerAutoWait      = DISABLE;  
  AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;
  AdcHandle.Init.SamplingTime          = ADC_SAMPLETIME_7CYCLES_5;
  AdcHandle.Init.ScanConvMode          = ADC_SCAN_DIRECTION_FORWARD;
  AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
  AdcHandle.Init.ContinuousConvMode    = ENABLE;
  AdcHandle.Init.DiscontinuousConvMode = DISABLE;
  AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
  AdcHandle.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;
  AdcHandle.Init.DMAContinuousRequests = DISABLE;
  HAL_ADC_Init(&AdcHandle);
  HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED);
}
主函数添加
	sConfig.Channel = ADC_CHANNEL_0;  
	HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
	HAL_ADC_Start(&AdcHandle); 
读转换结果
uint32_t READ_ADC(void)
{
	uint32_t num;
	HAL_ADC_PollForConversion(&AdcHandle, 10);
	if ((HAL_ADC_GetState(&AdcHandle) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC)
		num=HAL_ADC_GetValue(&AdcHandle);
	return num;
}

 


 


院士
2015-12-15 21:43:44     打赏
6楼
还是使用HAL函数相对简单一些呀~~

菜鸟
2015-12-17 23:43:01     打赏
7楼

NTC测温思路,电源、NTC、10K电阻、地 连接AD测中点excel按NTC的B值算出电阻值,为了方便存储记录起始值与之后的差值,转换过程中将温度放大10倍处理回避浮点数。

const int tempoffset=282;//初始值
const unsigned char tempt[155]={
16,16,17,17,19,18,20,21,21,21,23,23,25,24
,26,26,27,28,29,29,30,31,31,33,32,34,34,35
,35,36,36,37,37,38,39,38,39,40,39,40,40,41
,40,41,40,41,41,41,40,41,40,41,40,40,39,40
,39,39,38,38,38,38,36,37,36,35,36,34,34,34
,33,32,32,31,31,31,29,30,28,28,28,27,26,26
,25,25,24,24,23,23,22,22,21,21,20,20,19,19
,18,18,17,17,17,16,16,16,15,14,15,14,13,14
,12,13,12,12,12,11,12,10,11,10,10,10,9,10
,9,9,8,9,8,8,7,8,7,7,7,7,7,6,7,6,6,6,6,5,6
,5,5,5,5,5,5,4,5 
};

 

int32_t search(void)
{
  static int32_t temp;
  unsigned char i,m,n;
  for(i=0;i<10;i++)
  {
    ADCNUM[i]=READ_ADC();
  }
  for(m=0;m<9;m++)
    for(n=m+1;n<10;n++)
    {
      if(ADCNUM[m]<ADCNUM[n])
      {
        ADCNUM[10]=ADCNUM[n];
        ADCNUM[n]=ADCNUM[m];
        ADCNUM[m]=ADCNUM[10];
      }
    }
  ADCm=ADCNUM[1]+ADCNUM[2]+ADCNUM[3]+ADCNUM[4]+ADCNUM[5]+ADCNUM[6]+ADCNUM[7]+ADCNUM[8];
  ADCm=ADCm/8;
  ADCm=ADCm-tempoffset;
  temp=0-300;

    for(i=0;i<155;i++)
    {
      if(ADCm>=tempt[i])
      {
        ADCm=ADCm-tempt[i];
        temp+=10;
      }
      else
      {
        temp+=(ADCm*10)/tempt[i];
        break;
      }
    }
  
  return temp;
}

对AD的处理采用中值滤波的方法初步测试基本满意,为了加快速度可以将取样的次数减少。


菜鸟
2015-12-28 12:27:36     打赏
8楼
上传一个测温图片

助工
2015-12-29 16:45:15     打赏
9楼
楼主继续加油

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]