登录/注册

stm8s adc1 init

更多

在STM8S单片机中初始化ADC1(模数转换器1)需配置相关寄存器,以下是基本步骤及代码示例:

主要步骤:

  1. 开启ADC时钟
    CLK_PCKENR1寄存器中使能ADC时钟(通常为位0)。

  2. 配置ADC通道
    选择模拟输入通道(如AIN2对应PC3引脚)。

  3. 设置采样时间
    通过ADC1_SCHx寄存器配置通道采样时间(例如设置为55.5个时钟周期)。

  4. 配置控制寄存器

    • ADC1_CR1:选择ADC时钟分频(推荐F_MASTER/2)、设置单次模式。
    • ADC1_CR2:设置数据对齐方式(右对齐)。
  5. 启动ADC
    设置ADC1_CR1ADON位启动ADC,首次启动需延迟等待稳定。


代码示例(STM8S103F3为例):

#include "stm8s.h"

void ADC1_Init(void) {
  // 1. 开启ADC时钟 (PCKENR1的bit0)
  CLK->PCKENR1 |= (1 << CLK_PCKENR1_ADC);

  // 2. 关闭施密特触发器(降低功耗)
  ADC1->TDRL |= (1 << 2);  // 关闭AIN2(PC3)的施密特触发

  // 3. 设置采样时间(通道2采样时间=55.5周期)
  ADC1->SMPR = ADC1_SMPR_SMP_55DOT5; 

  // 4. 配置控制寄存器
  ADC1->CR1 = ADC1_CR1_ADON    // 开启ADC
            | ADC1_CR1_SPSEL_0; // F_MASTER/2(时钟分频)

  ADC1->CR2 = ADC1_CR2_ALIGN_RIGHT; // 数据右对齐

  // 首次启动ADC并延时稳定(约7us)
  ADC1->CR1 |= ADC1_CR1_ADON;
  for(uint16_t i = 0; i < 1000; i++); // 简单延时
}

uint16_t ADC1_ReadSingle(void) {
  ADC1->CSR &= ~ADC1_CSR_CH;     // 清除通道选择
  ADC1->CSR |=  ADC1_CSR_CH_AIN2; // 选择通道2(PC3)

  ADC1->CR1 |= ADC1_CR1_ADON;    // 启动转换(触发)
  while(!(ADC1->CSR & ADC1_CSR_EOC)); // 等待转换完成

  uint16_t adc_value = ADC1->DRL;      // 读取低8位
  adc_value |= (uint16_t)(ADC1->DRH << 8); // 组合高2位
  ADC1->CSR &= ~ADC1_CSR_EOC;     // 清除转换完成标志
  return adc_value;
}

关键点说明:

  1. 引脚配置
    确保使用的ADC引脚(如PC3)设为浮空输入模式(默认状态通常满足)。

  2. 采样时间
    根据信号源阻抗调整采样时间(阻抗高需更长时间)。

  3. 数据对齐
    结果存储在ADC1_DRH(高2位)和ADC1_DRL(低8位)中,需组合为10位值。

  4. 校准
    首次使用建议执行校准(通过ADC1_CR2寄存器的CAL位),参考手册操作流程。

详细寄存器定义请查阅对应型号的《STM8S参考手册》(Reference Manual)。

STM8AF5288T不带ADC1吗?

(ADC1) ADC1中没有STM8AF52Ax /** * @briefAnalog to Digital Converter (

2024-05-10 08:30:43

stm8s怎样把ADC 16位的值转换成10位的呀?

stm8s的ADC是10位的,但是ADC1_GetBufferValue传回的数据是16位的,

2024-05-09 07:05:04

STM8sADC通道采集,这个通道的概念是什么?要采集某个管脚的电压能做到吗?

请教一下大家,STM8s的ADC通道采集,这个通道的概念是什么?假如我要采集某个管脚的电压,能做到吗? 今天试了一下初始化如下 ADC1_Init

2024-05-06 09:07:55

STM8S单片机进行的光敏电阻ADC转换功能

使用STM8S单片机进行的光敏电阻ADC转换功能介绍。

资料下载 guo_mtdh 2022-04-06 14:27:38

STM8S低功耗电源管理

置顶/星标公众号,不错过每一条消息! 在后台陆续收到一些关于STM8S低功耗的问题,今天就写一下低功耗相关的内容。1STM8S功耗来源STM8S

资料下载 陈俊 2022-01-05 14:39:05

STM8s UART1数据异常

这里写自定义目录标题STM8s 库函数配置串口UART1,输出值与期望输出值不一致时钟配置UART1配置原因

资料下载 佚名 2021-12-28 19:01:25

STM8S(stm8s003F) ADC AIN7的使用

STM8S(stm8s003F) ADC AIN7的使用AIN7通道连接到内部稳压为1.22V,由此可以推算出供电电压,省去一路电源电压采集电路

资料下载 微风挽雨 2021-12-27 18:49:52

STM8S全解析之系列文章1---STM8S芯片项目需求与解决方案

STM8S全解析—系列文章1.STM8S芯片项目需求与解决方案提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:STM8S全

资料下载 佚名 2021-11-26 09:06:05

STM8 ADC1读出了16192数值是哪里的问题?

刚接触学习STM8 ADC 使用ADC1,AIN4通道 stm8s的VC

2024-04-17 07:59:45

STM8S tim1__ch3 trg触发不了adc中断怎么解决?

STM8S tim1__ch3 trg触发不了adc中断,请求讲解

2024-03-07 06:16:59

求助,谁有STM8S ADC1初始化的函数例程呢?

谁有STM8S ADC1初始化的函数例程呢?

2023-10-25 07:45:55

STM32U5系列片内ADC1ADC4实现过程(上)

有人使用STM32U5系列MCU开发产品,在用到ADC结合DMA传输时遇到点障碍,这里针对片内ADC1和ADC4基于DMA标准请求模式和链表模式

2023-07-30 09:27:24

如何使用TIM2触发ADC1注入通道?

_LP_MODE_NONE;LL_ADC_Init(ADC1, &amp;ADC_InitStruct);

2023-01-17 08:50:23

STM8S ADC AIN7该怎样去使用呢

STM8S(stm8s003F) ADC AIN7的使用AIN7通道连接到内部稳压为1.22V,由此可以推算出供电电压,省去一路电源电压采集电路

2022-02-21 06:39:31

STM8S是什么?

STM8S全解析—系列文章1.STM8S芯片项目需求与解决方案提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:STM8S全

2021-12-09 07:59:51
7天热门专题 换一换
相关标签