CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Source/ciu32l051_std_adc.c

136 lines
3.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************************/
/**
* @file ciu32l051_std_adc.c
* @author MCU Ecosystem Development Team
* @brief ADC STD库驱动。
* 实现ADC初始化配置等功能API。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @addtogroup ADC
* @{
*
*/
/************************************************************************************************/
/*-------------------------------------------includes-------------------------------------------*/
#include "ciu32l051_std.h"
#ifdef STD_ADC_PERIPHERAL_USED
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @addtogroup ADC_External_Functions
* @{
*
*/
/************************************************************************************************/
/**
* @brief ADC初始化
* @param adc_init_param ADC初始化结构体
* @note 若ADC时钟源配置为异步时钟则需要在std_adc_init外部配置ADC异步时钟源
* @retval 无
*/
void std_adc_init(std_adc_init_t *adc_init_param)
{
/* 时钟源配置 */
std_adc_clock_source_config(adc_init_param->clock_src);
/* 异步时钟分频配置 */
if(adc_init_param->clock_src == ADC_ASYNC_CLK_KCLK)
{
std_adc_asynchronous_clock_config(adc_init_param->clock_presc);
}
if(adc_init_param->trigger_edge != ADC_TRIG_SW)
{
/* 配置外部触发源 */
std_adc_external_trig_source_config(adc_init_param->trigger_source);
/* 触发方式和极性配置 */
std_adc_trig_edge_config(adc_init_param->trigger_edge);
}
else
{
/* 配置软件触发方式 */
std_adc_trig_edge_config(adc_init_param->trigger_edge);
}
/* 转换模式配置 */
std_adc_conversion_mode_config(adc_init_param->conver_mode);
/* 采样时间参数1配置 */
std_adc_sampt1_time_config(adc_init_param->sampt1);
/* 采样时间参数2配置 */
std_adc_sampt2_time_config(adc_init_param->sampt2);
/* 数据溢出管理 */
std_adc_ovrn_mode_config(adc_init_param->overrun_mode);
/* 扫描方向配置 */
std_adc_scan_direction_config(adc_init_param->scan_dir);
}
/**
* @brief ADC结构体初始化
* @param adc_init_struct ADC初始化结构体
* @retval 无
*/
void std_adc_struct_init(std_adc_init_t *adc_init_struct)
{
adc_init_struct->clock_src = ADC_SYNC_CLK_PCLK_DIV1;
adc_init_struct->clock_presc = ADC_ASYNC_CLK_DIV1;
adc_init_struct->conver_mode = ADC_SINGLE_CONVER_MODE;
adc_init_struct->overrun_mode = ADC_OVRN_MODE_OVERWRITTEN;
adc_init_struct->sampt1 = ADC_SAMPTIME_3CYCLES;
adc_init_struct->sampt2 = ADC_SAMPTIME_3CYCLES;
adc_init_struct->scan_dir = ADC_SCAN_DIR_FORWARD;
adc_init_struct->trigger_edge = ADC_TRIG_SW;
adc_init_struct->trigger_source = ADC_EXTRIG_EXTI11;
}
/**
* @brief ADC去初始化
* @note 执行去初始化前应停止转换
* @retval 无
*/
void std_adc_deinit(void)
{
/* 禁止ADC */
std_adc_disable();
/* 复位ADC外设 */
std_rcc_apb2_reset(RCC_PERIPH_RESET_ADC);
/* 禁止ADC外设时钟 */
std_rcc_apb2_clk_disable(RCC_PERIPH_CLK_ADC);
}
/**
* @}
*/
#endif /* STD_ADC_PERIPHERAL_USED */
/**
* @}
*/
/**
* @}
*/