Browse Source

修复adc采集导致的代码卡死问题

transmit_disinfection
zhaohe 11 months ago
parent
commit
cbc4bfd877
  1. 16
      zadc.cpp

16
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);

Loading…
Cancel
Save