历史上的今天
返回首页

历史上的今天

今天是:2025年01月12日(星期日)

2020年01月12日 | STM8S AD转换

2020-01-12 来源:eefocus

//不说那么多了,直接上程序

void ADC1_DeInit(void)

{

    ADC1->CSR  = ADC1_CSR_RESET_VALUE;

    ADC1->CR1  = ADC1_CR1_RESET_VALUE;

    ADC1->CR2  = ADC1_CR2_RESET_VALUE;

    ADC1->CR3  = ADC1_CR3_RESET_VALUE;

    ADC1->TDRH = ADC1_TDRH_RESET_VALUE;

    ADC1->TDRL = ADC1_TDRL_RESET_VALUE;

    ADC1->HTRH = ADC1_HTRH_RESET_VALUE;

    ADC1->HTRL = ADC1_HTRL_RESET_VALUE;

    ADC1->LTRH = ADC1_LTRH_RESET_VALUE;

    ADC1->LTRL = ADC1_LTRL_RESET_VALUE;

    ADC1->AWCRH = ADC1_AWCRH_RESET_VALUE;

    ADC1->AWCRL = ADC1_AWCRL_RESET_VALUE;

}

 

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)

{

 

    /* Check the parameters */

    assert_param(IS_ADC1_CONVERSIONMODE_OK(ADC1_ConversionMode));//单次还

 

是连续转换

    assert_param(IS_ADC1_CHANNEL_OK(ADC1_Channel));

    assert_param(IS_ADC1_PRESSEL_OK(ADC1_PrescalerSelection));

    assert_param(IS_ADC1_EXTTRIG_OK(ADC1_ExtTrigger));

    assert_param(IS_FUNCTIONALSTATE_OK(((ADC1_ExtTriggerState))));

    assert_param(IS_ADC1_ALIGN_OK(ADC1_Align));

    assert_param(IS_ADC1_SCHMITTTRIG_OK(ADC1_SchmittTriggerChannel));

    assert_param(IS_FUNCTIONALSTATE_OK(ADC1_SchmittTriggerState));

 

    /*-----------------CR1 & CSR configuration --------------------*/

    /* Configure the conversion mode and the channel to convert

    respectively according to ADC1_ConversionMode & ADC1_Channel values  

&  ADC1_Align values */

    ADC1_ConversionConfig(ADC1_ConversionMode, ADC1_Channel, ADC1_Align);

    /* Select the prescaler division factor according to 

ADC1_PrescalerSelection values */

    ADC1_PrescalerConfig(ADC1_PrescalerSelection);

 

    /*-----------------CR2 configuration --------------------*/

    /* Configure the external trigger state and event respectively

    according to NewState, ADC1_ExtTrigger */

    ADC1_ExternalTriggerConfig(ADC1_ExtTrigger, ADC1_ExtTriggerState);

 

    /*------------------TDR configuration ---------------------------*/

    /* Configure the schmitt trigger channel and state respectively

    according to ADC1_SchmittTriggerChannel & ADC1_SchmittTriggerNewState 

 values */

    ADC1_SchmittTriggerConfig(ADC1_SchmittTriggerChannel, 

 

ADC1_SchmittTriggerState);

 

    /* Enable the ADC1 peripheral */

    ADC1->CR1 |= ADC1_CR1_ADON;

 

}

 

void ADC1_Cmd(FunctionalState NewState)

{

 

    /* Check the parameters */

    assert_param(IS_FUNCTIONALSTATE_OK(NewState));

 

    if (NewState != DISABLE)

    {

        ADC1->CR1 |= ADC1_CR1_ADON;

    }

    else /* NewState == DISABLE */

    {

        ADC1->CR1 &= (u8)(~ADC1_CR1_ADON);

    }

 

}

 

void ADC1_StartConversion(void)

{

    ADC1->CR1 |= ADC1_CR1_ADON;

}

 

FlagStatus ADC1_GetFlagStatus(ADC1_Flag_TypeDef Flag)

{

    u8 flagstatus = 0;

    u8 temp = 0;

 

    /* Check the parameters */

    assert_param(IS_ADC1_FLAG_OK(Flag));

  

    if ((Flag & 0x0F) == 0x01)

    {

        /* Get OVR flag status */

        flagstatus = (u8)(ADC1->CR3 & ADC1_CR3_OVR);

    }

    else if ((Flag & 0xF0) == 0x10)

    {

        /* Get analog watchdog channel status */

        temp = (u8)(Flag & 0x0F);

        if (temp < 8)

        {

            flagstatus = (u8)(ADC1->AWSRL & (1 << temp));

        }

        else

        {

            flagstatus = (u8)(ADC1->AWSRH & (1 << (temp - 8)));

        }

    }

    else  /* Get EOC | AWD flag status */

    {

        flagstatus = (u8)(ADC1->CSR & Flag);

    }

    return ((FlagStatus)flagstatus);

 

}

 

u16 ADC1_GetConversionValue(void)

{

 

    u16 temph = 0;

    u8 templ = 0;

 

    if (ADC1->CR2 & ADC1_CR2_ALIGN) /* Right alignment */

    {

        /* Read LSB first */

        templ = ADC1->DRL;

        /* Then read MSB */

        temph = ADC1->DRH;

 

        temph = (u16)(templ | (u16)(temph << (u8)8));

    }

    else /* Left alignment */

    {

        /* Read MSB firts*/

        temph = ADC1->DRH;

        /* Then read LSB */

        templ = ADC1->DRL;

 

        temph = (u16)((u16)(templ << (u8)6) | (u16)(temph << (u8)8));

    }

 

    return ((u16)temph);

 

}

 

//以下程序是用AN3即PB3进行AD转换,并将AD值放在 u16 ADVal

 

//初始化时调用:

   GPIO_DeInit(GPIOB);

  GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//设置IO为悬浮输入

 

  ADC1_DeInit();

  ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_3,

            ADC1_PRESSEL_FCPU_D6,ADC1_EXTTRIG_TIM,DISABLE,

            ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL3,DISABLE);

    /*单次转换*/ /*PB3/AN3*/ /*6分频*/  /*内部定时器1 TRG事件*/  

  /*禁止外部触发转换*/ /*数据右对齐  (低8字节在ADC_DRL寄存器,其余高字节

位在ADC_DRH寄存器)读顺序

应先读低位,再读高位字节*/

  ADC1_Cmd(ENABLE);//允许进行AD转换

 

 

//进行AD取值时调用:

 

      ADC1_StartConversion();//开始AD转换

      while(0==ADC1_GetFlagStatus(ADC1_FLAG_EOC));//等待转换完成      

      ADC1_ClearFlag(ADC1_FLAG_EOC);  //清除AD完成标志位

      ADVal = ADC1_GetConversionValue();//读AD值

推荐阅读

史海拾趣

HP(Keysight)公司的发展小趣事

HP(Keysight)公司发展故事

故事一:初创时期的艰辛与突破

HP(惠普)的起源可以追溯到1939年,由威廉·惠普(William Hewlett)和戴维·欧文(David Packard)在美国加州的一个小车库内创立。最初,他们专注于生产音频振荡器,这是一种用于测试音频设备的设备。尽管条件简陋,但凭借过人的技术和敏锐的市场洞察力,他们的产品很快获得了市场的认可。这一成功为公司奠定了坚实的基础,也为后续进入电子仪器和计算机领域铺平了道路。

故事二:半导体技术的先驱

1940年,HP公司开发出了第一台采用半导体技术的电子计算机,这在当时是一项革命性的成就。这台计算机不仅能够执行复杂的计算任务,还标志着HP在半导体技术领域的领先地位。这一突破不仅为公司赢得了业界的尊重,也为后续的微型计算机和个人计算机的发展奠定了基础。

故事三:微型计算机市场的开拓者

1960年,HP公司再次引领行业潮流,开发出了世界上第一台商用微型计算机。这台计算机采用了更小的集成电路,比之前的计算机更加小巧、便宜且易于使用。这一创新不仅降低了计算机的门槛,使得更多人能够接触到计算机,也推动了计算机技术的普及和应用。HP在微型计算机市场的成功,进一步巩固了其在电子行业的领导地位。

故事四:个人电脑市场的崛起

进入70年代,HP公司开始涉足个人电脑市场。1970年,HP发布了第一台商业个人计算机(PC),这一举措标志着公司正式进入了一个全新的业务领域。随着个人电脑市场的迅速发展,HP不断推出新产品,满足消费者的多样化需求。从早期的台式机到后来的笔记本电脑,HP始终保持着技术领先优势,为用户带来更加便捷、高效的计算体验。

故事五:并购与多元化发展的战略

在发展过程中,HP公司也通过并购等方式不断拓展业务领域。2002年,HP以250亿美元收购了康柏(Compaq),这是当时科技行业最大的一笔收购。这次并购不仅增强了HP在个人电脑市场的竞争力,也推动了公司在服务器、存储设备等多个领域的发展。此外,HP还涉足软件及服务等多个领域,成为一个多元化的科技巨头。通过不断并购和业务拓展,HP在全球科技行业的地位日益稳固。

请注意,虽然问题中提到了Keysight,但Keysight实际上是惠普在2014年从惠普科技公司(HP Inc.)分拆出来的一家独立公司,专注于电子测量和测试解决方案。因此,上述故事主要围绕HP(惠普)公司的发展历史进行描述,并未直接涉及Keysight公司。

E-Z-HOOK公司的发展小趣事

E-Z-HOOK公司非常重视与客户的关系建立与维护。他们始终坚持以客户为中心的经营理念,努力为客户提供高质量的产品和优质的服务。为了更好地了解客户需求和反馈,公司建立了完善的客户服务体系,包括售前咨询、售后服务和技术支持等。此外,公司还定期组织客户交流会和技术研讨会等活动,加强与客户的沟通与互动。这些努力使得E-Z-HOOK公司赢得了广大客户的信任和支持。

意瑞(COSEMITECH)公司的发展小趣事

随着技术的不断成熟和产品的不断优化,意瑞半导体的市场影响力逐渐扩大。其高集成度、高性能的芯片广泛应用于国内外主流OEM及全球知名Tier1厂商。在汽车电子领域,公司布局了动力总成、车身控制、电源管理和底盘安全等模块,其产品在多家主机厂成功导入并量产,性能超过了国外老牌芯片,成为该品类中本土鲜有的实现汽车市场大批量出货的产品。

Holy Stone公司的发展小趣事

在追求业务发展的同时,Holy Stone始终注重品质提升和环境管理。公司陆续通过了ISO9001、ISO14001、QS9000、ISO/TS16949等国际认证,确保了产品的高品质和环保性。这些认证不仅提升了公司的品牌形象和市场竞争力,还为客户提供了更加可靠的产品和服务。此外,公司还积极履行社会责任,在环境治理、社会参与等方面做出了具体贡献。

FLEX LTD公司的发展小趣事

经过多年的发展,Holy Stone成为国内少数涵盖主、被动双通路并拥有制造工厂的多元化公司。公司不仅代理多家国际知名半导体零组件,还通过自主研发和生产,为客户提供完整的解决方案及多样性零组件。这一双通路战略使得Holy Stone能够在激烈的市场竞争中保持领先地位,并成功实现全球布局。公司的产品广泛应用于消费电子、汽车电子等多个领域,满足了全球客户的多样化需求。

Array Microsystems Inc公司的发展小趣事

Array Microsystems Inc公司自创立之初,便专注于阵列传感器技术的研发。在成立初期,公司面临资金短缺和技术瓶颈的双重挑战。然而,通过不懈的努力和持续的技术创新,Array Microsystems Inc成功研发出了一款高灵敏度、低功耗的阵列传感器。这一突破性的技术不仅填补了市场的空白,还为公司带来了可观的利润。随着产品的推广和应用,Array Microsystems Inc逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

为什么红外线接收头一接上,电压就变很低,单片机无法工作?

为什么红外线接收头一接上,电压就变很低,单片机无法工作? …

查看全部问答>

整流二极管反向恢复时间与关断尖峰的关系(看高手的解释)

整流二极管反向恢复时间与关断尖峰的关系。    在一般的桥式整流电路中,整流后的电压波形是方波,工作中会有一个尖峰。现在问题是: 1、这个尖峰是如何产生的。 2、这个尖峰的大小跟二极管的反向恢复时间的关系是怎么样的? 3、如果 ...…

查看全部问答>

CE5 系统启动问题求助

ce5 系统镜像NK.nb0 是否一定要先加载到内存中才能运行?能否不加载到内存中,直接从flash中启动?…

查看全部问答>

如何完成设计文件

我编了个VHDL文件.在Quartus II 6.0里 1,建立新项目. 2,引入VHDL文件 3,编译时提示未定义顶层文件. 这是怎么回事?还需要建立什么样的文件?如何建?…

查看全部问答>

500元(不够可加)求文件驱动开发高手指点问题

问题很简单,我在irq_mj_read 中自己构造IRP 查询文件全路径,结果出错 0xc00000d 参数错误 请联系我:13791007364  张波, 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急…

查看全部问答>

借宝地一用,招聘DSP/ARM设计人才

1.计算机、电子或相关专业本科毕业 2.熟悉TI DSP结构 3.熟悉C与C++ 4.1年以上TI DSP软件开发工作经验 5.具有高度的责任心,有团队合作精神 即将成立新的公司,公司需要以下人员:图象处理和模式识别,DSP+ARM软硬开发,音视频编解码,音 ...…

查看全部问答>

请问哪位大侠有F427的中文资料

由于本人洋文很差,也不想再学了,看不了洋文资料,哪位大侠有的话提供个方便啊…

查看全部问答>

想用MSP430的板子作量測功率的疑問

因為我用MSP430的板子做的作品想要加入量測功率的功能我聽說MSP430內就有可以做功率量測的功能但是我不知道該如何使用?所以想說買一顆功率量測IC來實現 ,可是不知道用哪顆IC比較適合?所以希望有人能提供要如何用MSP430來做功率量測的方法或方向或 ...…

查看全部问答>

CC2430:FFD与RFD通信?

问一下,在一个树形或者网型网络中,相邻两个FFD路由能够同时收到多个RFD的数据,?正常一个RFD只能与其父节点通信,这要实现跳网吗?大侠们看看。…

查看全部问答>