diff --git a/zadc.cpp b/zadc.cpp index 71440f4..a303965 100644 --- a/zadc.cpp +++ b/zadc.cpp @@ -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);