EFM32例程——ACMP

硬件:EFM32GG230512
工具:keil5

ACMP实验
ACMP测试,ACMP测量判断输入电压高低
输出ACM_OUT获得高低信号

初始化

/*********************************************Copyright (c)***********************************************
** File name:             	acmp.c
** Created by:				Gui              
** Version:               	V1.0.0
** Descriptions:         	ACMP测试,ACMP测量判断输入电压高低,可工作在EM0~EM3下
*********************************************************************************************************/
#include "acmp.h"

void ACMP0_IRQHandler (void){
	
    if (ACMP0->IF & ACMP_IF_EDGE) {
         ACMP0->IFC = ACMP_IFC_EDGE;
    }
}

void acmp_init(void){
	
    CMU_ClockEnable(cmuClock_ACMP0, true);
    
    ACMP_Init_TypeDef tAcmpInit = {
#if     ACMP_MODE == ACMP_CONSUME_FULL
        .fullBias                  = true,                              /* 全偏置电流开启               */
        .halfBias                  = false,                             /* 减半偏置电流关闭             */
        .biasProg                  = 15,                                /* 偏置电流配置                 */
#elif   ACMP_MODE == ACMP_CONSUME_GENERAL
        .fullBias                  = false,                             /* 全偏置电流关闭               */
        .halfBias                  = false,                             /* 减半偏置电流关闭             */
        .biasProg                  = 0,                                 /* 偏置电流配置                 */
#elif   ACMP_MODE == ACMP_CONSUME_LOW
        .fullBias                  = false,                             /* 全偏置电流关闭               */
        .halfBias                  = true,                              /* 减半偏置电流开启             */
        .biasProg                  = 0,                                 /* 偏置电流配置                 */
#endif
        .interruptOnFallingEdge    = true,                              /* 开启ACMP下降沿中断           */
        .interruptOnRisingEdge     = false,                             /* 关闭ACMP上升沿中断           */
        .warmTime                  = acmpWarmTime256,                   /* 配置ACMP预热时间             */
        .hysteresisLevel           = acmpHysteresisLevel0,              /* 配置ACMP滞回电压             */
        .inactiveValue             = 0,                                 /* 配置ACMP不可用时输出为0      */
#if     ACMP_MODE == ACMP_CONSUME_LOW
        .lowPowerReferenceEnabled  = true,                              /* 使能低功耗参考电压模式       */
#else
        .lowPowerReferenceEnabled  = false,                             /* 禁能低功耗参考电压模式       */
#endif

        .vddLevel                 = 0,                                  /* 配置VDD参考电压分压值        */
        .enable                   = true                                /* 使能ACMP                     */
    };
    ACMP_Init(ACMP0, &tAcmpInit);                                        /* 初始化ACMP                   */
    ACMP_ChannelSet(ACMP0, acmpChannel2V5, acmpChannel4);               /* 设置ACMP输入通道,PC4对应4号   */
	
	GPIO_PinModeSet(gpioPortE,13,gpioModePushPull,1);
    ACMP_GPIOSetup(ACMP0, 0, 1, 0);                                     /* 配置ACMP输出到GPIO口PE13      */
    
    while (!(ACMP0->STATUS & ACMP_STATUS_ACMPACT)) ;                    /* 等待ACMP预热完成             */
    
    ACMP_IntEnable(ACMP0, ACMP_IEN_EDGE);                               /* 使能ACMP边沿中断             */  
    NVIC_ClearPendingIRQ(ACMP0_IRQn);                                   /* 清除NVIC中ACMP挂起中断       */
    NVIC_EnableIRQ(ACMP0_IRQn);                                         /* 使能NVIC中ACMP总中断         */
}

main

/*********************************************Copyright (c)***********************************************
** File name:             	  	main.c
** Created by:					Gui              
** Version:               		V1.0.0        
** Descriptions:            	ACMP测试,ACMP测量判断输入电压高低
*********************************************************************************************************/
#include "system.h"
#include "em_device.h"
#include "em_chip.h"
#include "em_cmu.h"
#include "em_int.h"
#include "delay.h"
#include "acmp.h"
#include "bsp_led.h"

uint32_t g_chip_tick = 0;

int main(){
	
	int velue;
	
	CMU_ClockEnable(cmuClock_HFPER, true); //前置芯片设置
	CMU_ClockEnable(cmuClock_GPIO, true);
	if(SysTick_Config(SystemCoreClockGet()/1000))while(1);//1ms的systick中断
	led_init();//PD4 PD5
	acmp_init();//PC4输入 PE13输出
	
	g_chip_tick = g_rtc_rtcFreq;
	
	while(1){
		if(g_rtc_rtcFreq - g_chip_tick > 1000 || g_chip_tick > g_rtc_rtcFreq){
			velue = ACM_OUT;
			velue = velue;
		}
//		EMU_EnterEM2(false);
	}
}


### 回答1: EFM32开发套件(Energy Micro Family 32-bit)是一款由索菲亚半导体(Silicon Labs)推出的集成化开发工具,旨在帮助开发者更轻松地设计和开发低功耗嵌入式系统。 其例程是一系列编写好的示例代码,旨在展示EFM32开发套件的各种功能和特性,可以帮助开发者快速入门和学习如何在EFM32芯片上开发代码。这些例程涵盖了许多常见的应用领域,如无线通信、传感器数据采集、电源管理等。 通过使用EFM32开发套件例程,开发者可以快速了解和学习EFM32芯片的特性和功能,避免从零开始编写代码。这些例程包含了完整的源代码和详细的文档,使得开发者能够快速上手并进行自己的应用开发。 除了提供例程代码,EFM32开发套件还提供了一套完整的开发环境,包括集成开发环境(IDE)、调试器等工具。开发者可以使用这些工具来编写、调试和测试他们的应用程序,并且与EFM32开发套件实现无缝的集成。 总之,EFM32开发套件例程提供了一种简便的学习和开发方式,通过使用它们,开发者可以更快地上手和掌握EFM32芯片,从而加速低功耗嵌入式系统的开发过程。 ### 回答2: EFM32开发套件例程是用来演示和说明EFM32微控制器的各种功能和特性的代码示例集合。它们被设计用作新用户学习和评估EFM32系列微控制器的工具。 EFM32开发套件例程提供了丰富的代码实现,包括了各种外设,如GPIO、USART、SPI、I2C等。这些例程覆盖了从基本的IO控制到高级的通信和数据处理功能的各个方面。 通过运行这些例程,用户可以学习如何初始化和配置各个外设,并使用它们完成各种任务。这些例程还包含了详细的代码注释和使用说明,使用户能够轻松理解和修改代码以适应自己的需求。 除了提供例程代码外,EFM32开发套件还提供了开发工具和文档,以帮助用户更好地使用例程。用户可以使用官方的开发工具和配套的IDE进行代码编译、调试和下载,同时,官方的技术文档也提供了对开发套件和例程的详细介绍和解释。 总之,EFM32开发套件例程是一套非常有价值的资源,可帮助用户快速上手和了解EFM32系列微控制器的各种功能和特性。无论是初学者还是有经验的开发人员,都可以通过使用这些例程来加快自己的开发速度并提高自己的技术水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值