历史上的今天
今天是: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-kai2017 5 61714----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好用没毛病!!!
上一篇:stm8——LED流水灯实现
史海拾趣
|
A Auto Iris Mount自动光圈接口 Auto white balance自动白平衡 Auto gain control自动增益 Aperture 孔径 Auto Iris 自动光圈 Auto Iris Mount 自动光圈接口 Auto white balance 自动白 ...… 查看全部问答> |
|
典型接线方法如图2,使用时注意如下几点: a、 IGBT栅-射极驱动回路往返接线不能太长(一般应该小于1m),并且应该采用双绞线接法,防止干扰. b、 由于IGBT集电极产生较大的电压尖脉冲,增加IGBT栅极串联电阻RG有利于其安全工作.但是栅极电阻RG不能太 ...… 查看全部问答> |
|
汇编语言中调用子程序 CALLA #FUU 和 CALL FUU 而FUU只是在头文件中声明是一个函数定义,。想请教大家一下,这2句话有什么区别呢?谢谢各位~… 查看全部问答> |
|
嘿 各位:我做了一个WINCE下面的GPRS拨号程序,采用的是WINCE RAS函数,但是现在遇到一个问题,由于RAS函数占用了串口,所以当有电话来时(通过硬件侦测到然后要OS通知),我需要将GPRS连接断开,调用RASHANGUP这个函数断开。然后打开串口接起电话。 ...… 查看全部问答> |
|
不知有哪位弄过,在LED屏幕上显示gif动画的项目,现在准备弄这个,但还没什么思路,之前已经通过PC读取BMP位图数据用串口发送给单片机,能够在LED上正常显示,现在我知道应该是要将gif动画进行解码,解码之后发给单片机,但是单片机怎么来正常显示 ...… 查看全部问答> |
|
最近碰到个问题,很纠结! 最近正在使用一种芯片CC2430,通过阅读说明书了解到有128KB的存储空间,但是为什么现在我发现我只能使用其中的64KB的存储空间,想请教一下高人问题可能出在什么地方?因为只会用64KB的存储空间,因此不得不想法解决,比 ...… 查看全部问答> |
|
在大型工业控制系统,军事和航天系统,智能家居管理系统等较为复杂的系统中,许多情况下系统中存在着大量遵循不同协议的设备,例如遵循RS232、RS485、UDP、TCP/IP等协议的设备共同存在于系统中。多种协议并存时,要求系统能识别不同的协议信息,通 ...… 查看全部问答> |
|
我的LED应急灯制作过程(1)人家都拿到奖品了,我才开始制作!请你看好戏在后面 人家都拿到奖品了,我才开始制作!请你看好戏在后面! 我买回的元件进行分类,检测!看图! [ 本帖最后由 qwertyuiop11111 于 2010-12-30 10:19 编辑 ]… 查看全部问答> |




