STM8L151C8学习笔记4:ADC驱动

STM8L151C8学习笔记4:ADC驱动


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

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

  1. 开启ADC1/2对应时钟
  2. 配置ADC初始化参数
  3. 使能ADC通道
  4. 等待ADC转换
  5. 读取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采集部分跟其他单片机开发一样的流程,不是很难。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值