OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6678|回复: 2

使用STM8S的AD转换库函数的疑问

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
发表于 2019-8-28 13:08:53 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 紫气东升 于 2019-8-28 13:10 编辑

使用AD转换的初始化库函数时有个疑问,void ADC1_Init(ADC1_ConvMode_TypeDef ADC1_ConversionMode, ADC1_Channel_TypeDef ADC1_Channel,
ADC1_PresSel_TypeDef ADC1_PrescalerSelection,
ADC1_ExtTrig_TypeDef ADC1_ExtTrigger,
FunctionalState ADC1_ExtTriggerState,
ADC1_Align_TypeDef ADC1_Align,
ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel,
FunctionalState ADC1_SchmittTriggerState),
他这个函数的最后两个参数根据AD寄存器里的描述说是降低IO的静态功耗,如果我要把下面这个函数配置换成库函数,最后两个参数应该怎么配置?
void ADC_Init(void)
{
        // fADC = fMASTER/2,单次转换,禁止ADC转换并进入低功耗模式
        ADC1->CR1  = 0x00;   
        // 禁止外部触发转换,内部定时器1 trg事件,数据左对齐,禁止扫描
        ADC1->CR2  = 0x00;   
        // 转换未结束,无模拟看门狗事件,禁止转换结束中断,禁止AWD模拟看门狗中断,模拟通道AIN0
        ADC1->CSR  = 0x00;   
}


最佳答案

查看完整内容[请看2#楼]

你可以查查这个库函数具体配置了哪些寄存器的哪些位,根据手册查下定义。提供一个我自己写的ADC配置与注释: void ADC_Config(void) { ADGPIO_Config(); ADC2_DeInit(); /*ADC2初始化配置为: - 单次转换模式 - 通道4(PB4) PS:扫描模式下从AN0到选择的通道结束 - fadc=fmaster/2 - 外部触发为定时器 - 外部触发关 ...
天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-4-10
在线时间
4 小时
发表于 2019-8-28 13:08:54 | 显示全部楼层
你可以查查这个库函数具体配置了哪些寄存器的哪些位,根据手册查下定义。提供一个我自己写的ADC配置与注释:
void ADC_Config(void)
{
  ADGPIO_Config();
  ADC2_DeInit();
  /*ADC2初始化配置为:
               - 单次转换模式  
               - 通道4(PB4)       PS:扫描模式下从AN0到选择的通道结束
               - fadc=fmaster/2
               - 外部触发为定时器
               - 外部触发关
               - 转换数据右对其
               - 选择通道4上的施密特触发器
               - 施密特触发器关*/
  ADC2_Init(ADC2_CONVERSIONMODE_SINGLE, ADC2_CHANNEL_4, ADC2_PRESSEL_FCPU_D2, \
            ADC2_EXTTRIG_TIM, DISABLE, ADC2_ALIGN_RIGHT, ADC2_SCHMITTTRIG_CHANNEL4,\
            DISABLE);
//  ADC2->CSR &= (uint8_t)(~ADC2_CSR_CH);       //清除通道选择
//  ADC2->CSR |= AdChannel[1];                  //选择通道
//  ADC2->CR1 |= ADC2_CR1_ADON;                 //启动转换   
  ADC2->CR1 |= ADC2_CR1_ADON;                 //启动转换   
  nop();nop();nop();nop();nop();
  nop();nop();nop();nop();nop();
  while((ADC2->CSR & ADC2_CSR_EOC)==0)    continue;
  ADC2->CSR =ADC2->CSR & (~ADC2_CSR_EOC);
}

备注:我配置的时候直接忽略斯密特通道选择,因为最后一个参数关了施密特触发器。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-8-29 02:23:59 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 14:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表