STM8L151C8学习笔记4:ADC驱动

发布者:码字狂人最新更新时间:2022-01-12 来源: eefocus关键字:ADC驱动 手机看文章 扫描二维码
随时随地手机看文章

启用ADC采集功能,通过PB1口采集模拟电压。

ADC驱动配置大致分为以下步骤:


开启ADC1/2对应时钟

配置ADC初始化参数

使能ADC通道

等待ADC转换

读取ADC转换的数值

硬件电路

原理图如下:

ADC 硬件

数据手册上PB1对应的ADC通道:

PB1

编写程序

1.ADC初始化函数

/*ADC Init - PB1*/

void Adc_Init(void)

{

//  /* Enable ADC1 clock */

//  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);

  

   /* Initialise and configure ADC1 */

  ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);

  ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);


  /* Enable ADC1 */

  ADC_Cmd(ADC1, ENABLE);


  /* Enable ADC1 Channel 17 */

  ADC_ChannelCmd(ADC1, ADC_Channel_17, ENABLE);

  

  /* Start ADC1 Conversion using Software trigger*/

  ADC_SoftwareStartConv(ADC1);

}


2.ADC读取转换值函数

uint16_t Adc_GetValue(void)

{

  /* Start ADC1 Conversion using Software trigger*/

  ADC_SoftwareStartConv(ADC1);

  while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);

  return ADC_GetConversionValue(ADC1);

}


功能实现

这里我使用OLED屏来显示采集到的ADC值,并通过相应的关系来换算出电压值。


/**

  * @brief  System display.

  * @param  None

  * @retval None

  */

void System_Display(void)

{

   uint8_t Buff[40];

   uint16_t Adc_Data;

   uint16_t Adc_Value;

   

   /*Adc Data*/

   Adc_Data = Adc_GetValue();

   sprintf((char *)Buff,"Dat: %-4d", Adc_Data);

   OLED_ShowString(0,1,Buff,12);

   /*Adc Value*/

   Adc_Value = 3300 * Adc_Data / 4096;

   sprintf((char *)Buff,"Val: %-4d mV", Adc_Value);

   OLED_ShowString(0,2,Buff,12);

#if OLED_MODE == 0 //SPI   

   /*更新值*/

   OLED_Refresh_Gram();

#endif

}


总结

ADC采集部分跟其他单片机开发一样的流程,不是很难。

关键字:ADC驱动 引用地址:STM8L151C8学习笔记4:ADC驱动

上一篇:STM8L151C8学习笔记5:低功耗
下一篇:STM8L151C8学习笔记3:OLED驱动

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved