历史上的今天
返回首页

历史上的今天

今天是:2025年02月08日(星期六)

正在发生

2020年02月08日 | 使用STM8S105K4T6C 模数转换器的12通道

2020-02-08 来源:eefocus

分享今天遇到的一个stm8s模数转换的小问题~~~


这款单片机一共提供了7个模数转换通道,他们分别是AIN0-AIN5和AIN12。

stm8s105k4t6c的管脚图


其中AIN0-AIN5的配置和使用方法如下,配置为连续转换、扫描模式(代码写的不好,大神请见谅~):

[mw_shl_code=c,true]/*---------------------------------包含头文件---------------------------------*/

#include "adc.h"

 

#define        ADC        60                                                                                                                                  //滤波深度,不宜过高,防止越界 u16

 

/*---------------------------------全局标志位---------------------------------*/

 

/*----------------------------------函数定义----------------------------------*/

 

//*----------------ADC1端口初始化函数---------------*/

static void Adc_Gpio_Init(void)                                                                                                                //使用第12通道

{

        GPIO_Init(GPIOF, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);

}

 

/*------------------ADC1初始化函数-----------------*/

void Adc1_Init(void)

{   

        Adc_Gpio_Init();

        ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,                                                                          //连续转换

                         (ADC1_Channel_TypeDef)(ADC1_CHANNEL_12),                                                          //开启12通道

                         ADC1_PRESSEL_FCPU_D2,                                                                                          //2分频

                         ADC1_EXTTRIG_TIM,

                         DISABLE,                                                                                                              //关闭外部触发

                         ADC1_ALIGN_RIGHT,                                                                                                  //右对齐

                         (ADC1_SchmittTrigg_TypeDef)(ADC1_SCHMITTTRIG_CHANNEL12),                        

                         DISABLE);                                                                                                           //关闭施密特触发器

        ADC1_Cmd(ENABLE);                                                                                                                          //使能ADC1

        ADC1_DataBufferCmd(ENABLE);                                                                                                  //开启缓存

        ADC1_ScanModeCmd(ENABLE);                                                                                                          //启用扫描模式

        ADC1_StartConversion();                                                                                                          //开始转换

}

 

/*-------------------ADC获取AD值------------------*/

uint16_t Get_Adc1_Value(ADC1_Channel_TypeDef channel)  

{

uint8_t t;

uint16_t data = 0;

for(t=0;t{

   data+=ADC1_GetBufferValue(channel);

}

   return (uint16_t)(data/ADC);             //返回转换平均值

}

/*--------------Write-by-xiao-kai2017561714----QQ-850637704------------*/

/*-------------------------Always have a nice day-----------------------------*/[/mw_shl_code]


当我们想使用AIN12的时候,如果使用上面的代码就不能正确使用这个通道了。为什么呢?  看下图

stm8s105k4t6c ADC1简介


注意大红框中的NOTE:大概的意思是说:额外的AIN12通道不能用于ADC扫描模式和模拟看门狗模式,而且AIN12通道转换结果只会存在 ADC_DRH/ADC_DRL这两个寄存器中!  


既然是这样:那我们应该去stm8s的固件库中去寻找可以操作AIN12的函数咯,要注意库寄存器的风格,查找的格式应该是“ADC1->DRL”或"ADC1->DRH",就会找到uint16_t ADC1_GetConversionValue(void),而且就只有这个函数使用到了这两个寄存器,就是它了!!!


然后把上面操作AIN0-AIN5的初始化函数注释掉ADC1_ScanModeCmd(ENABLE); //启用扫描模式,调用ADC1_GetConversionValue()就可以了,STM8S好用没毛病!!! 

推荐阅读

史海拾趣

康奈特(CNNT)公司的发展小趣事

在光学镜片领域,产品质量是企业的生命线。康奈特深知这一点,因此从原材料采购到生产制造的每一个环节都建立了严格的品控体系。公司引进了先进的检测设备和技术手段,对每一片镜片都进行严格的检测和筛选。这种对质量的执着追求不仅赢得了消费者的信赖和认可,也为公司赢得了良好的口碑和市场份额。

EBG RESISTORS LLC公司的发展小趣事

为了进一步扩大市场份额,EBG RESISTORS LLC公司开始实施国际化战略。他们积极参加国际电子展会,与全球各地的客户建立联系。同时,公司还积极寻求与国际知名企业的合作,共同开发新产品。在XXXX年,公司成功打入欧洲市场,并在随后几年内陆续进入亚洲和北美市场。

Hifn Inc公司的发展小趣事

随着技术的不断进步,EBG RESISTORS LLC公司不断投入研发,致力于推动电阻器技术的创新。在XXXX年,公司成功研发出一种新型高精度电阻器,具有更高的稳定性和更低的温度系数。这一创新产品迅速在市场上获得了广泛应用,极大地提升了公司的市场竞争力。

富瀚(Fullhan)公司的发展小趣事
记录测试过程中的数据,包括过载电流值、保护动作时间等,以便后续分析和评估。
ABL Aluminum Components公司的发展小趣事

随着全球环保意识的提高,ABL公司开始注重绿色环保和可持续发展。公司研发出了一种环保型铝合金材料,这种材料在生产和使用过程中对环境的影响较小。同时,ABL公司还加大了对生产废料的回收利用力度,降低了生产过程中的资源浪费。通过践行绿色环保理念,ABL公司赢得了社会的广泛认可和支持,为公司的长远发展奠定了坚实基础。

这些故事虽然是以虚构的形式呈现的,但它们基于电子行业中的常见发展路径和趋势,因此具有一定的参考价值。希望这些故事能够满足您的需求。

Hitachi (Renesas )公司的发展小趣事

ABL Aluminum Components公司自成立以来,一直注重技术创新。早期,公司研发出了一种新型铝合金材料,这种材料具有优异的导电性和轻量化特点,迅速在电子行业引起关注。随着技术的不断迭代,ABL公司逐步将这种材料应用于手机、电脑等消费电子产品的内部组件,大大提高了产品的性能和用户体验。凭借这一技术优势,ABL公司逐渐在电子行业中占据了一席之地。

问答坊 | AI 解惑

低频数字式相位测量仪

本帖最后由 paulhyde 于 2014-9-15 04:14 编辑 低频数字式相位测量仪 大赛作品  …

查看全部问答>

整理:安防常用英语单词英中对照表

A Auto Iris Mount自动光圈接口 Auto white balance自动白平衡 Auto gain control自动增益 Aperture 孔径 Auto Iris           自动光圈 Auto Iris Mount 自动光圈接口 Auto white balance 自动白 ...…

查看全部问答>

典型IGBT EX841接线图

典型接线方法如图2,使用时注意如下几点: a、 IGBT栅-射极驱动回路往返接线不能太长(一般应该小于1m),并且应该采用双绞线接法,防止干扰. b、 由于IGBT集电极产生较大的电压尖脉冲,增加IGBT栅极串联电阻RG有利于其安全工作.但是栅极电阻RG不能太 ...…

查看全部问答>

想请教大家一个比较简单的问题(汇编语言的调用子程序)

汇编语言中调用子程序 CALLA #FUU   和 CALL FUU 而FUU只是在头文件中声明是一个函数定义,。想请教大家一下,这2句话有什么区别呢?谢谢各位~…

查看全部问答>

关于进程通信问题

我用 mapirule 拦截短信,把拦截到得信息交给我自己的客户端处理,mapirule是tmail自己加载的,我希望在我的程序启动和关闭时都通知到mapirule,这样mapirule可以在我的程序运行时才做一些处理。 我现在的做法是在mapirule程序里面设置了一个标记b ...…

查看全部问答>

wince下GPRS拨号!

嘿 各位:我做了一个WINCE下面的GPRS拨号程序,采用的是WINCE RAS函数,但是现在遇到一个问题,由于RAS函数占用了串口,所以当有电话来时(通过硬件侦测到然后要OS通知),我需要将GPRS连接断开,调用RASHANGUP这个函数断开。然后打开串口接起电话。 ...…

查看全部问答>

单片机显示gif动画

不知有哪位弄过,在LED屏幕上显示gif动画的项目,现在准备弄这个,但还没什么思路,之前已经通过PC读取BMP位图数据用串口发送给单片机,能够在LED上正常显示,现在我知道应该是要将gif动画进行解码,解码之后发给单片机,但是单片机怎么来正常显示 ...…

查看全部问答>

应用于无线传感网的CC2430芯片问题?

最近碰到个问题,很纠结! 最近正在使用一种芯片CC2430,通过阅读说明书了解到有128KB的存储空间,但是为什么现在我发现我只能使用其中的64KB的存储空间,想请教一下高人问题可能出在什么地方?因为只会用64KB的存储空间,因此不得不想法解决,比 ...…

查看全部问答>

基于嵌入式系统的协议转换器

在大型工业控制系统,军事和航天系统,智能家居管理系统等较为复杂的系统中,许多情况下系统中存在着大量遵循不同协议的设备,例如遵循RS232、RS485、UDP、TCP/IP等协议的设备共同存在于系统中。多种协议并存时,要求系统能识别不同的协议信息,通 ...…

查看全部问答>

我的LED应急灯制作过程(1)人家都拿到奖品了,我才开始制作!请你看好戏在后面

人家都拿到奖品了,我才开始制作!请你看好戏在后面!   我买回的元件进行分类,检测!看图! [ 本帖最后由 qwertyuiop11111 于 2010-12-30 10:19 编辑 ]…

查看全部问答>