原创 STM32设备之温度传感器程序设计(二)

2009-10-25 16:14 4633 3 4 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2009/10/25/9743459c-84be-49cf-b184-8dcdd37a7ffd.rar现在支持六个命令了:使用help可显示其他五个命令


STM32设备之温度传感器程序设计(二)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


一、程序流程设计


通过边看书,边记录,对应ADC已经有了大概的掌握。下面是程序编写流程。


1、添加命令处理


   主要是在命令表中添加字符串命令和对应的处理程序、在help命令处理中显示相应的命令。


2、命令处理程序的编写:CmdTemp()


   软件激活温度传感器AD转换;


       等到AD转换完成;


       将数字量转换为温度;


    对温度进行格式化字符串处理;


显示温度值;


3、为了使用AD转换,必须进行初始化


   配置ADC,非连续转换,扫描模式一个通道,(一个通道、单次转换)右对齐,软件触发。


   选择通道、配置采样时间。启用温度传感器。


 


二、设计过程记录


1、添加命令:过程比较简单,很快实现了。


2、编写命令处理程序CmdTemp()


  


   void CmdTemp(void){


  u16 TempData;


  float TempVoltage;  // 实际模拟电压值


  float TempValue;        //温度值,为浮点数


 


  ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件启动AD转换


  while ( ADC_GetFlagStatus ( ADC1, ADC_FLAG_EOC ) == RESET ); //等待转换完成


 


  TempData= ADC_GetConversionValue ( ADC1 );   //获取转换值


  TempVoltage = ( TempData * 3.3 )/0xFFF ;         //转换为实际模拟电压值


  TempValue = ( 1000 * TempVoltage - 1430 )/4.3 + 25; //根据温度与电压关系获得温度值


  /*将浮点数格式化为2.1格式*/


  sprintf ( (char*)s , "Temp:%<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.1f C\n" , TempValue );


  Shell_PutString ( s );   //在屏幕上显示


}


 


3、初始化ADC


首先在stm32f103x_conf文件中定义ADCADC1


还要使能ADC1的时钟。然后进行配置。


void ADC_Config(void){


 


  ADC_InitTypeDef ADC_InitStructure;  //进行ADC设置的数据结构


 


  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent ; //独立模式,只有一个ADC


  ADC_InitStructure.ADC_ScanConvMode = ENABLE ; //扫描模式


  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE ; //一次性扫描


  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None ;//软件触发


  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right ;  //数据右对齐


  ADC_InitStructure.ADC_NbrOfChannel = 1 ;  //只用温度传感器通道


  ADC_Init ( ADC1, &ADC_InitStructure );


  /*使用通道16,排在第一位,采样周期55.5个周期*/


  ADC_RegularChannelConfig ( ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5 );


  ADC_TempSensorVrefintCmd ( ENABLE );     //使能温度传感器


  ADC_Cmd ( ADC1, ENABLE );  //使能ADC1


 


}


 


四、编写过程中的总结


1、开始没有使能ADC的时钟。


2、然后又忘了使能ADC1本身。


3sprinf用法不对,现在还显示不出来。去查c语言的书。


  TempData= ADC_GetConversionValue ( ADC1 );   //获取转换值


  TempVoltage = ( TempData * 3.3 )/0xFFF ;         //转换为实际模拟电压值


  TempValue =(u8)( ( 1430-1000 * TempVoltage )/4.3 + 25 ); //根据温度与电压关系获得温度值


  /*将整数转变为02d格式,不会超过100度的*/


  sprintf ( (char*)s , "Temp:%02d" , TempValue );


  Shell_PutString ( s );   //在屏幕上显示


Shell_PutString ("\n");


浮点格式老不对,改成u8或者s16数据类型,显示成功。是什么原因呢?

文章评论1条评论)

登录后参与讨论

用户1569399 2010-11-10 16:52

学习下
相关推荐阅读
nthq2004 2010-05-08 20:04
USB自定义设备驱动02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  本来还想编写应用程序测试一下自定...
nthq2004 2010-05-07 21:35
USB自定义设备驱动01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、USB设备驱动入门1、学习目...
nthq2004 2010-05-04 21:01
智林开发板上实现自定义的USB HID设备
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、自定义HID设备的相关概念1...
nthq2004 2010-05-01 21:58
U盘例程在智林开发板上的移植
 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一、移植前的准备工作1、有哪些操...
nthq2004 2010-04-30 19:19
U盘实现流程跟踪分析02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   二、追踪USB大容量设备的实现...
nthq2004 2010-04-27 21:51
U盘实现流程跟踪分析01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   一、追踪USB大容量设备的实现...
我要评论
1
3
关闭 站长推荐上一条 /2 下一条