2959|1

51

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

使用STM8S105K4T6C 模数转换器的12通道 [复制链接]

本帖最后由 她叫小红 于 2017-9-20 22:27 编辑

今天真呀真高兴! 中了个TIMESS小闹钟,感谢论坛!

分享今天遇到的一个stm8s模数转换的小问题~~~
      这款单片机一共提供了7个模数转换通道,他们分别是AIN0-AIN5和AIN12。

stm8s105k4t6c的管脚图
     其中AIN0-AIN5的配置和使用方法如下,配置为连续转换、扫描模式(代码写的不好,大神请见谅~):
  1. /*---------------------------------包含头文件---------------------------------*/
  2. #include "adc.h"

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

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

  5. /*----------------------------------函数定义----------------------------------*/

  6. //*----------------ADC1端口初始化函数---------------*/
  7. static void Adc_Gpio_Init(void)                                                                                                                //使用第12通道
  8. {
  9.         GPIO_Init(GPIOF, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);
  10. }

  11. /*------------------ADC1初始化函数-----------------*/
  12. void Adc1_Init(void)
  13. {   
  14.         Adc_Gpio_Init();
  15.         ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,                                                                          //连续转换
  16.                          (ADC1_Channel_TypeDef)(ADC1_CHANNEL_12),                                                          //开启12通道
  17.                          ADC1_PRESSEL_FCPU_D2,                                                                                          //2分频
  18.                          ADC1_EXTTRIG_TIM,
  19.                          DISABLE,                                                                                                                   //关闭外部触发
  20.                          ADC1_ALIGN_RIGHT,                                                                                                  //右对齐
  21.                          (ADC1_SchmittTrigg_TypeDef)(ADC1_SCHMITTTRIG_CHANNEL12),                        
  22.                          DISABLE);                                                                                                                  //关闭施密特触发器
  23.         ADC1_Cmd(ENABLE);                                                                                                                          //使能ADC1
  24.         ADC1_DataBufferCmd(ENABLE);                                                                                                  //开启缓存
  25.         ADC1_ScanModeCmd(ENABLE);                                                                                                          //启用扫描模式
  26.         ADC1_StartConversion();                                                                                                          //开始转换
  27. }

  28. /*-------------------ADC获取AD值------------------*/
  29. uint16_t Get_Adc1_Value(ADC1_Channel_TypeDef channel)  
  30. {
  31. uint8_t t;
  32. uint16_t data = 0;
  33. for(t=0;t<ADC;t++)
  34. {
  35.    data+=ADC1_GetBufferValue(channel);
  36. }
  37.    return (uint16_t)(data/ADC);             //返回转换平均值
  38. }
  39. /*--------------Write-by-xiao-kai\2017\05\06\17\14----QQ-850637704------------*/
  40. /*-------------------------Always have a nice day-----------------------------*/
复制代码

当我们想使用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好用没毛病!!!
此帖出自stm32/stm8论坛
点赞 关注
个人签名
 

回复
举报

51

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
MARK
此帖出自stm32/stm8论坛
 
个人签名
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表