|
|
@ -2,6 +2,9 @@ |
|
|
|
#ifdef HAL_ADC_MODULE_ENABLED
|
|
|
|
using namespace iflytop; |
|
|
|
#define TAG "ADC"
|
|
|
|
|
|
|
|
zmutex g_adc_mutex = {"G_ADC_MUTEX"}; |
|
|
|
|
|
|
|
void ZADC::initialize(const char* name, ADC_HandleTypeDef* hadc1, int32_t channel, int32_t samplingTime) { |
|
|
|
if (!hadc1) return; |
|
|
|
m_hadc1 = hadc1; |
|
|
@ -10,20 +13,29 @@ void ZADC::initialize(const char* name, ADC_HandleTypeDef* hadc1, int32_t channe |
|
|
|
inited = true; |
|
|
|
m_name = name; |
|
|
|
m_mutex.init(); |
|
|
|
if (!g_adc_mutex.isInit()) { |
|
|
|
g_adc_mutex.init(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int32_t ZADC::get_adc_value() { |
|
|
|
if (!inited) return 0; |
|
|
|
zlock_guard lck(g_adc_mutex); |
|
|
|
|
|
|
|
ADC_ChannelConfTypeDef sConfig = {0}; |
|
|
|
sConfig.Channel = m_channel; /* 通道 */ |
|
|
|
sConfig.Rank = 1; |
|
|
|
sConfig.SamplingTime = m_samplingTime; /* 采样时间 */ |
|
|
|
|
|
|
|
if (HAL_ADC_ConfigChannel(m_hadc1, &sConfig) != HAL_OK) { |
|
|
|
ZLOGE(TAG, "%s HAL_ADC_ConfigChannel failed", m_name); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if (HAL_ADC_Start(m_hadc1) != HAL_OK) { |
|
|
|
ZLOGE(TAG, "%s HAL_ADC_Start failed", m_name); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
HAL_ADC_Start(m_hadc1); |
|
|
|
HAL_ADC_PollForConversion(m_hadc1, HAL_MAX_DELAY); |
|
|
|
HAL_ADC_PollForConversion(m_hadc1, 10); |
|
|
|
uint16_t adcv = HAL_ADC_GetValue(m_hadc1); |
|
|
|
HAL_ADC_Stop(m_hadc1); |
|
|
|
|
|
|
|