मैं stm32 से "नया" HAL लाइब्रेरी का उपयोग करने का तरीका जानने की कोशिश कर रहा हूं।
जब मैं सरल एडीसी रूपांतरण करने की कोशिश करता हूं तो यह सिर्फ एक बार काम करता है, लेकिन फिर इसे परिवर्तित करना बंद हो जाता है। मुझे लगता है कि रूपांतरण ध्वज का अंत सेट नहीं होता है। मैं STM32f429I डिस्कवरी बोर्ड का उपयोग कर रहा हूं, जिसमें बोर्ड पर STM32f429ZI है।
ध्यान दें कि मुझे स्प्रिंटफ के बारे में पता है कि यह खराब अभ्यास है और बाधा के साथ एडीसी बनाना बेहतर है, मुझे पता है कि, कृपया इसे इंगित न करें, यह प्रश्न के लिए प्रासंगिक नहीं है, मैं यहां सिर्फ एचएएल का परीक्षण कर रहा हूं।
तो सवाल यह है कि ईओसी का झंडा क्यों नहीं लगाया गया है या मैं इसे काम करने के लिए क्या कर सकता हूं? वहाँ से एचएएल के बारे में बहुत कम सामग्री के बाद से गुग्लिंग बहुत मदद नहीं कर रहा है।
यहाँ कोड है:
__IO uint16_t ADCValue=0;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);
int main(void)
{
char str[15];
/* Various initializations */
HAL_ADC_Start(&hadc1);
while (1)
{
if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK)
{
ADCValue = HAL_ADC_GetValue(&hadc1);
sprintf(str, "%d", ADCValue);
BSP_LCD_DisplayStringAt(130,30, (uint8_t*)str, LEFT_MODE);
}
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
ADCValue = HAL_ADC_GetValue(&hadc1);
}
मैंने CubeMX के साथ प्रोजेक्ट भी बनाया, adc कॉन्फ़िगरेशन निम्नलिखित है:
EDIT 1
मैंने सब कुछ डिबग करने की कोशिश की और ऐसा लगता है कि कार्यक्रम EOC ध्वज के लिए जाँच में फंस गया है - यह देखता है कि यह नहीं दिखाया गया है और इसलिए टाइमर जारी करता है कि EOC को दिखाने के लिए इंतज़ार कर रहा है (लेकिन यह कभी सेट नहीं होता है) यहाँ कोड है जहां यह है डिबगर में फंस जाता है:
/* Check End of conversion flag */
while(!(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)))
{
/* Check for the Timeout */
if(Timeout != HAL_MAX_DELAY)
{
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
{
hadc->State= HAL_ADC_STATE_TIMEOUT;
/* Process unlocked */
__HAL_UNLOCK(hadc);
return HAL_TIMEOUT;
}
}