From cbc4bfd877ab7efefe281b29575aa7dcb93863a0 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 12 Sep 2024 09:36:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dadc=E9=87=87=E9=9B=86?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E4=BB=A3=E7=A0=81=E5=8D=A1=E6=AD=BB?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zadc.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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);