4.N32G452_ADC

简述

N32G452的12位ADC使用的是逐次逼近的高速模数转换器。他有多个通道,每个通道的A/D转换有四种执行模式:

  • 单次
  • 连续
  • 扫描
  • 间断
    ADC转换值储存(左对齐/右对齐)在16位数据寄存器中。可以通过模拟看门狗检测输入电压是否在用户定义的高/低阈值内,并且ADC的输入时钟的最大频率为72MHZ。

在这里插入图片描述
在这里插入图片描述
ADC框图

在这里插入图片描述
ADC引脚

在这里插入图片描述
ADC时钟

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ADC转换的四种模式:

  • 单次转换模式:在该模式下,外部触发或者ADC_CTRL2.ON=1(仅适用于规则通道)启动ADC转化,ADC只进行一次转换,转换完成后ADC停止。
void ADC_Initl()
{
	/*打开ADC1引脚时钟*/
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
	/*打开ADC1总线时钟*/
    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC1 ,ENABLE);
    /*将ADCHCLK配置为DIV16*/
    ADC_ConfigClk(ADC_CTRL3_CKMOD_AHB,RCC_ADCHCLK_DIV16);
    /*设置ADC1M时钟来源为HSE*/
    RCC_ConfigAdc1mClk(RCC_ADC1MCLK_SRC_HSE, RCC_ADC1MCLK_DIV8); 
    /*初始化ADC引脚*/
    GPIO_InitType GPIO_InitStructure;
     /* PC0 PC1  -------------------------*/
    GPIO_InitStructure.Pin       = GPIO_PIN_0 | GPIO_PIN_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);
    /* ADC初始化 -----------------------*/
    ADC_InitType ADC_InitStructure;	
    ADC_InitStructure.WorkMode       = ADC_WORKMODE_INDEPENDENT;//独立输入模式
    ADC_InitStructure.MultiChEn      = DISABLE;//多通道禁用
    ADC_InitStructure.ContinueConvEn = DISABLE;//连续转化禁用
    ADC_InitStructure.ExtTrigSelect  = ADC_EXT_TRIGCONV_NONE;//外部触发选择
    ADC_InitStructure.DatAlign       = ADC_DAT_ALIGN_R;//数据右对齐
    ADC_InitStructure.ChsNumber      = 1;//通道数
    ADC_Init(ADCx, &ADC_InitStructure);	
    
    /* 使能 ADC */
    ADC_Enable(ADCx, ENABLE);
    while(ADC_GetFlagStatusNew(ADCx,ADC_FLAG_RDY) == RESET);
    /* ADC校准 */
    ADC_StartCalibration(ADCx);
    while (ADC_GetCalibrationStatus(ADCx));
}

uint16_t ADC_GetData(ADC_Module* ADCx, uint8_t ADC_Channel)
{
    uint16_t dat;
    
    ADC_ConfigRegularChannel(ADCx, ADC_Channel, 1,ADC_SAMP_TIME_239CYCLES5);
    /* Start ADC Software Conversion */
    ADC_EnableSoftwareStartConv(ADCx, ENABLE);
    while(ADC_GetFlagStatus(ADCx, ADC_FLAG_ENDC)==0){
    }
    ADC_ClearFlag(ADCx, ADC_FLAG_ENDC);
    ADC_ClearFlag(ADCx, ADC_FLAG_STR);
    dat=ADC_GetDat(ADCx);
    return dat;
}
  • 连续转换模式:ADC 可以通过配置 ADC_CTRL2.CTU 为 1 进入连续转换模式。在该模式下,外部触发或设置ADC_CTRL2.ON 为 1 可以启动 ADC 开始转换,ADC 会持续转换选择的通道。连续模式仅对规则通道有
    效,对注入通道无效。
UINT16 	adc_value;
void ADC_Initl()
{
	 RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA1, ENABLE);//使能DMA时钟
	 /* DMA1 通道配置 ----------------------------------------------*/
	DMA_InitType DMA_InitStructure;
    DMA_DeInit(DMA1_CH1);
    DMA_InitStructure.PeriphAddr     = (uint32_t)&ADC1->DAT;//外设地址
    DMA_InitStructure.MemAddr        = (uint32_t)&adc_value;//内存地址
    DMA_InitStructure.Direction      = DMA_DIR_PERIPH_SRC;//外设到内存
    DMA_InitStructure.BufSize        = 1;//缓存区大小
    DMA_InitStructure.PeriphInc      = DMA_PERIPH_INC_DISABLE;
    DMA_InitStructure.DMA_MemoryInc  = DMA_MEM_INC_DISABLE;
    DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_HALFWORD;
    DMA_InitStructure.MemDataSize    = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.CircularMode   = DMA_MODE_CIRCULAR;
    DMA_InitStructure.Priority       = DMA_PRIORITY_HIGH;
    DMA_InitStructure.Mem2Mem        = DMA_M2M_DISABLE;
    DMA_Init(DMA1_CH1, &DMA_InitStructure);
    /* Enable DMA1 channel1 */
    DMA_EnableChannel(DMA1_CH1, ENABLE);
	
	
	
	/*打开ADC1总线时钟*/
    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC1 ,ENABLE);
    /*将ADCHCLK配置为DIV16*/
    ADC_ConfigClk(ADC_CTRL3_CKMOD_AHB,RCC_ADCHCLK_DIV16);
    /*设置ADC1M时钟来源为HSE*/
    RCC_ConfigAdc1mClk(RCC_ADC1MCLK_SRC_HSE, RCC_ADC1MCLK_DIV8); 
		
		
    /* ADC初始化 -----------------------*/
    ADC_InitType ADC_InitStructure;	
    ADC_InitStructure.WorkMode       = ADC_WORKMODE_INDEPENDENT;//独立输入模式
    ADC_InitStructure.MultiChEn      = DISABLE;//多通道禁用
    ADC_InitStructure.ContinueConvEn = ENABLE;//连续转化禁用
    ADC_InitStructure.ExtTrigSelect  = ADC_EXT_TRIGCONV_NONE;//外部触发选择
    ADC_InitStructure.DatAlign       = ADC_DAT_ALIGN_R;//数据右对齐
    ADC_InitStructure.ChsNumber      = 1;//通道数
    ADC_Init(ADC1, &ADC_InitStructure);	
    /*配置ADC1通道*/
	ADC_ConfigRegularChannel(ADC1, ADC1_Channel_01_PA0, 1, ADC_SAMP_TIME_55CYCLES5);
	/*使能DMA*/
	ADC_EnableDMA(ADC1, ENABLE);
		
    /* 使能 ADC */
    ADC_Enable(ADC1, ENABLE);
    while(ADC_GetFlagStatusNew(ADC1,ADC_FLAG_RDY) == RESET);
    /* ADC校准 */
    ADC_StartCalibration(ADC1);
    while (ADC_GetCalibrationStatus(ADC1));
	/*开启连续转化*/	
	ADC_EnableSoftwareStartConv(ADC1, ENABLE);	
}
  • 扫描模式:通过配置 ADC_CTRL1.SCAMD 为 1 可以开启扫描转换模式,通过配置四个寄存器 ADC_RSEQ1、ADC_RSEQ2、ADC_RSEQ3、ADC_JSEQ 可以选择转换通道序列,ADC 会对所有选择的规则或注入通道进行扫描转换。转换开始后,通道将一个一个转换。如果此时 ADC_CTRL2.CTU 为 1,则在所有选中的规则
    通道的转换完成后,将从转换序列的第一个通道重新开始转换。
void ADC_Initl()
{
	RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA1, ENABLE);
	 /* DMA1 channel1 configuration ----------------------------------------------*/
	DMA_InitType DMA_InitStructure;
    DMA_DeInit(DMA1_CH1);
    DMA_InitStructure.PeriphAddr     = (uint32_t)&ADC1->DAT;
    DMA_InitStructure.MemAddr        = (uint32_t)&adc_value;
    DMA_InitStructure.Direction      = DMA_DIR_PERIPH_SRC;
    DMA_InitStructure.BufSize        = 2;
    DMA_InitStructure.PeriphInc      = DMA_PERIPH_INC_DISABLE;
    DMA_InitStructure.DMA_MemoryInc  = DMA_MEM_INC_ENABLE;
    DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_HALFWORD;
    DMA_InitStructure.MemDataSize    = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.CircularMode   = DMA_MODE_CIRCULAR;
    DMA_InitStructure.Priority       = DMA_PRIORITY_HIGH;
    DMA_InitStructure.Mem2Mem        = DMA_M2M_DISABLE;
    DMA_Init(DMA1_CH1, &DMA_InitStructure);
    /* Enable DMA1 channel1 */
    DMA_EnableChannel(DMA1_CH1, ENABLE);
	
	
	
	/*打开ADC1总线时钟*/
    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC1 ,ENABLE);
    /*将ADCHCLK配置为DIV16*/
    ADC_ConfigClk(ADC_CTRL3_CKMOD_AHB,RCC_ADCHCLK_DIV16);
    /*设置ADC1M时钟来源为HSE*/
    RCC_ConfigAdc1mClk(RCC_ADC1MCLK_SRC_HSE, RCC_ADC1MCLK_DIV8); 
		
		
    /* ADC初始化 -----------------------*/
    ADC_InitType ADC_InitStructure;	
    ADC_InitStructure.WorkMode       = ADC_WORKMODE_INDEPENDENT;//独立输入模式
    ADC_InitStructure.MultiChEn      = ENABLE;//多通道禁用
    ADC_InitStructure.ContinueConvEn = ENABLE;//连续转化禁用
    ADC_InitStructure.ExtTrigSelect  = ADC_EXT_TRIGCONV_NONE;//外部触发选择
    ADC_InitStructure.DatAlign       = ADC_DAT_ALIGN_R;//数据右对齐
    ADC_InitStructure.ChsNumber      = 2;//通道数
    ADC_Init(ADC1, &ADC_InitStructure);	
    
	ADC_ConfigRegularChannel(ADC1, ADC1_Channel_01_PA0, 1, ADC_SAMP_TIME_55CYCLES5);
	ADC_ConfigRegularChannel(ADC1, ADC1_Channel_02_PA1, 2, ADC_SAMP_TIME_55CYCLES5);
	ADC_EnableDMA(ADC1, ENABLE);
		
    /* 使能 ADC */
    ADC_Enable(ADC1, ENABLE);
    while(ADC_GetFlagStatusNew(ADC1,ADC_FLAG_RDY) == RESET);
    /* ADC校准 */
    ADC_StartCalibration(ADC1);
    while (ADC_GetCalibrationStatus(ADC1));
		
	ADC_EnableSoftwareStartConv(ADC1, ENABLE);
		
}

  • 间断模式:
在这里插入代码片
### 回答1: N32G452是一款集成电路芯片,用户手册提供了关于该芯片的详细信息和使用指南。用户手册的目的是帮助用户了解和熟悉N32G452的功能、特点和操作方法,以便能够正确使用和应用这款芯片。 N32G452用户手册的内容包括了对芯片的基本介绍,包括芯片的型号、封装、引脚定义和电气特性等重要信息。同时,手册还提供了芯片的主要特点和功能介绍,例如支持的通信接口、内置的存储器、外设控制器以及特殊功能等。 用户手册还详细描述了N32G452的使用方法和操作流程。手册提供了芯片的引脚连接图和外设配置指南,帮助用户正确连接芯片到其他电路和设备。手册还提供了芯片的时钟设置、电源管理和复位管理等相关内容,以及对特殊功能和模式的详细介绍和使用说明。 此外,用户手册还包括了芯片的编程和调试方法,提供了编程模式、调试接口和软件开发工具的使用指南。手册还给出了一些常见问题的解答和故障排除方法,帮助用户解决在使用过程中可能遇到的一些常见问题。 总之,N32G452用户手册是一本详实的指南,为用户提供了关于该芯片的基本信息、操作方法以及问题解答。通过仔细阅读和理解用户手册,用户可以更好地了解和使用N32G452芯片,以满足各种不同的应用需求。 ### 回答2: N32G452用户手册是一本详细介绍N32G452微控制器的使用方法和相关规格的手册N32G452是一款由国内公司研发设计的低功耗、高性能的32位微控制器。 用户手册首先介绍了N32G452的硬件配置,包括处理器核心、外设、时钟、存储和引脚配置等。通过详细的硬件配置说明,用户能够了解到微控制器的各个部分的特性和功能。 接下来,用户手册详细介绍了N32G452的软件开发环境和工具链。用户可以了解到如何使用该环境进行程序编写、调试和下载。同时,用户手册还介绍了N32G452所支持的编程语言和开发工具,如C语言和Keil等。这些信息对于开发者来说非常重要,可以帮助他们更好地利用微控制器进行程序设计和调试。 此外,用户手册还提供了N32G452的功能模块的详细说明,包括通用IO口、串口、定时器、中断等。这些功能模块对于系统设计和应用开发至关重要。用户手册的详细说明可以帮助用户了解每个功能模块的详细特性和使用方法,提高系统设计的效率和可靠性。 最后,用户手册还包含了N32G452的电气参数、引脚布局、封装和物理特性等重要信息。这些信息对于硬件设计和系统集成来说是必不可少的,可以帮助开发者更好地了解和使用N32G452微控制器。 总之,N32G452用户手册是一本重要的参考资料,对于开发者来说是非常有价值的。通过阅读用户手册,用户可以全面了解N32G452微控制器的硬件和软件特性,掌握其使用方法和开发技巧,帮助用户更好地应用和开发N32G452微控制器所需的系统。 ### 回答3: N32G452是一款高性能的集成电路芯片,用户手册是为了提供给使用者有关该芯片的详细信息和操作指南。用户手册通常包含以下几个方面的内容: 1. 芯片介绍:用户手册会首先介绍N32G452芯片的主要特点和功能,以及适用的应用领域。这部分内容能够让用户对芯片有一个整体的了解。 2. 硬件设计指导:用户手册会给出关于N32G452芯片的硬件设计指导,包括电源和时钟的设计、芯片引脚的使用等。这些指导能够帮助用户正确地设计和连接芯片的硬件部分。 3. 软件开发指南:用户手册会详细介绍N32G452芯片的软件开发环境和工具链,并提供一些示例代码和开发流程指导。这部分内容能够帮助用户快速上手并进行软件开发。 4. 功能模块说明:用户手册会详细介绍N32G452芯片内部的各个功能模块,包括计时器、通信接口、模数转换器等。这些说明能够让用户了解每个功能模块的具体特性和使用方法。 5. 故障排除和常见问题解答:用户手册还会提供一些故障排除和常见问题解答的内容,让用户在使用芯片时能够快速解决一些常见的问题。 总之,N32G452用户手册是一本非常重要的参考资料,它能够帮助用户更好地了解和使用N32G452芯片,并提供了丰富的技术指导和开发支持,使用户能够高效地完成相关的应用开发工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值