问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用STM8S微控制器中的AD转换

发布网友 发布时间:2022-04-26 18:41

我来回答

1个回答

热心网友 时间:2023-10-21 14:01

STM8S单片机的A/D结构简介:
具有ADC1 ADC2(部分型号没有ADC2)最多提供16个转换通道,A/D转换的各个通道可以执行单次和连续的转换模式。
1.电压0到Vdda;
2.在64和80引脚封装的有独立的Vref,其他的封装形式Vref连接在Vdda
3.续转换形式;
4.时间14个时钟周期;
5.10位转换精度;
6.产生转换结束中断;
编程中注意的知识点:
过置位ADC_CR1寄存器的 ADON位来开启ADC。当首次置位ADON位时,ADC从低功耗模式唤醒。为了启动转换必须第二次使用写指令来置ADC_CR1寄存器的ADON 位。在转换结束时ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次的转换。
如果长时间没有使用ADC,推荐将ADC模块切换到低功耗模式来降低功耗,这可以通过清零 ADON 位来实现。ADC模块上电后,所选通道对应的I/O口输出模块是被禁用的。因此推荐在ADC上电之前要选择合适的ADC转换通道。
如果单次模式在单次转换模式中,ADC仅在由ADC_CSR寄存器的CH[3:0]选定的通道上完成一次转换。该模式是在当CONT位为0时通过置位ADC_CR1寄存器的ADON位来启动的。
一旦转换完成,转换后的数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置EOCIE 被置位将产生一个中断。
代码如下:
#include "adc.h"
u16 TempADC;
void ADC_Config(void)
{
ADC_CR1 |= 0x01; //开始启动初始化必须启动一次
//第一次写1,ADC从低功耗唤醒,第二次写1,启动ADC转换
//ADC_CR1 |= 0x20; //使能转换结束中断,本例中采用的查询方式。
}

uint16_t Get_ADCCH_Value(ADC1_Channel_TypeDef ADC_Channel)
{
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,ADC_Channel, ADC1_PRESSEL_FCPU_D2,
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);
//你也可以用操作寄存器的方式代码如下,但未验证。
#if 0
ADC_CR2 = 0x00; // A/D结果数据左对齐
CLK_PCKENR2 |= 0x08; // 使能fMASTER与ADC的连接
ADC_CR1 = 0x00;// ADC时钟=主时钟/2=8MHz,单次转换模式
ADC_CSR = 0x01; // 选择通道2
ADC_TDRL = 0x01; // 禁止施密特触发功能
ADC_TDRH = 0x01;
ADC_CR1 = 0x03; //2分频,连续转换,启动ADC
ADC_CR2 = 0x31; //外部事件保留,数据右对齐,禁止扫描模式,
ADC_CSR|= 0x01; //选择通道1
#endif
ADC1_ConversionConfig(ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel,ADC1_ALIGN_RIGHT);
ADC_CR1 |= 0x01; //开始启动转换
while(!(ADC_CSR & 0x80)); //等待转换结束
return ADC1_GetConversionValue(); //返回ADC结果
}
//这个初始化代码很重要,不能省,每次切换通道都要初始化一次!
在main函数中直接调用即可:
TempADC=Get_ADCCH_Value(ADC1_CHANNEL_1); //获取AD转化值
WetADC=Get_ADCCH_Value(ADC1_CHANNEL_3; //获取AD转化值
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
青椒炒肉丝家常做法 QQ空间背景覆盖了自定义栏,那又要怎么取消 QQ空间自定义时不小心把模块隐藏了,要怎么找回来? 海底的火山存在吗? vue中路由跳转的三种方式 简洁易懂 vue路由调转的四种方式 ...状态详解介绍_拳击俱乐部Punch Club属性状态详解是什么 夜经济新业态是什么 南昌为什么要搞夜经济 夏天天热,不用冰箱的话,肉怎么保鲜?有没有比较专业的方法呢? 关于STM8S awu的问题 如何使用STM8S单片机的多通道AD转换 stm8s单片机nrst脚能作输出吗 stm8s单片机,掉电存储 stm8s207是什么集成电路? stm8s的变量tiny和near有什么区别 如何对STM8S的闪存存储器和数据EEPROM编程 如何将录屏转换为gif 为什么iPhone6录不了指纹? iPhone6为什么无法添加指纹?还有那个Touch ID和密码不在设置通用里面, 为什么iPhone6无法录入指纹? 苹果6为什么设置不了指纹? 苹果手机指纹没有了怎么办呀 word插入怎么做 请问下自动取款机跨行转账要多久到帐 关于c/c++中多线程的使用 C# 关于多线程和CPU的问题 VC++多线程问题 C语言多线程问题:如何让下面两段代码同时运行 就是播放生日歌的同时输出文字 C++ 多线程多进程问题 STM8S系列单片机如何使用printf函数 stm8s207是什么集成电路 怎样编程操作stm8的option byte 微信身份证怎么认证? 微信实名认证 怎么用身份证号码验证 还没有银行卡 只能用身份证号 但是不知道在哪? 江苏2019上半年自学考试? 江苏省2019年自学考试报名时间和考试时间 2019年江苏成人高考和自学考试是一回事儿吗? 2019年下半年江苏省自学考试报名时间是什么时候 2019年10月江苏省自学考试报名时间是什么时候 2019年江苏南通自学考试的报名时间? 江苏省自学考试网上报名了 要去现场确认吗??急! 江苏省高等教育自学考试2019年7月考试报名时间 2019年江苏自考在什么时候报名? 江苏2019年7月自学考试什么时候报名 江苏省连云港市2019年自学考试报名时间全年 关于江苏自学考试2019年1月增考的地点问题 2019年7月江苏自学考试本科段成绩什么时候公布 广西自考生能报名江苏2019年1月份的自考考试么 银行间同业拆借加权平均利率是什么意思