|
STM32F030 ADC采样序列中包括IN0,IN1,IN2三个通道,采用单次转换模式,软件触发启动,但是发现采样转换到最后一个通道IN2时,EOC不会置位,程序进入超时状态。有哪位朋友碰到过此问题? 主要代码如下:% S5 A+ m4 U I- | uint16_t ADCValue[3; void MX_ADC_Init(void) { ADC_ChannelConfTypeDef sConfig; hadc.Instance = ADC1; hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc.Init.Resolution = ADC_RESOLUTION_12B; ' c# R3 x" g9 M1 o7 `# | hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; ' I8 ~9 e8 f* `9 y hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; $ S4 }) N" z% \5 ^8 D" ^5 i hadc.Init.LowPowerAutoWait = DISABLE; ; u, u: Y$ w+ V; z! Z: {& X hadc.Init.LowPowerAutoPowerOff = DISABLE; hadc.Init.ContinuousConvMode = DISABLE; |5 {4 X# R7 H8 y. H hadc.Init.DiscontinuousConvMode = DISABLE; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; ( [, M" k7 R" L0 @- P hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; / K; w* k& D( t) \- O hadc.Init.DMAContinuousRequests = DISABLE; 0 v5 X5 J7 r( u3 Y7 {4 R/ c hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED; ' R' {% H, ^) M0 M+ c; K Q if (HAL_ADC_Init(&hadc) != HAL_OK) 9 s: G1 h0 l$ @ _ { ; H C/ s; F$ G ]( T- t. ?4 ~$ f _Error_Handler(__FILE__, __LINE__); 5 V+ E- M- M' i( c+ [! ^. G; | } 7 r* S9 A5 S, u4 L9 F+ G sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); 9 D4 `4 S( B: h7 ^ } : @+ p* x$ y4 A6 }0 u# W sConfig.Channel = ADC_CHANNEL_1; , _1 J( {$ H' c& F' x if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) ' Z( y4 g+ _, Q; ?; ]2 f7 E3 K, W/ X { _Error_Handler(__FILE__, __LINE__); 6 m3 r' x- w7 D( k } % O1 h8 h6 z" n+ c( b $ d& o# V5 s6 D0 H sConfig.Channel = ADC_CHANNEL_2; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) ' Z! A% O P& j/ h2 z3 K {" ?' g8 _# V$ S$ M, a9 X/ g3 V _Error_Handler(__FILE__, __LINE__); ) X& N" F: B4 S0 J }) X/ q( S* S% G: s } void Get_ADCVal(void)8 f8 |. p7 s/ o" V: k5 b3 v { uint8_t i; , x7 i B1 a9 L2 p 3 J8 ]6 B3 o" l9 c if (HAL_ADC_Start(&hadc) != HAL_OK) { 6 J- B& U% c% F( R0 m _Error_Handler(__FILE__, __LINE__); 2 m$ {# F4 L/ h" x% b) i } for ( i=0; i<3; i++ ) { if (HAL_ADC_PollForConversion(&hadc, 20) != HAL_OK) , O/ p7 `; E) V) o8 N: A0 U% I _Error_Handler(__FILE__, __LINE__); // ********** 当 i 递增到2时,程序执行死在这里!!!!!!!!!! & T9 ~& S f Q else 2 n. M, S+ O; M# p- W ADCValue[i = HAL_ADC_GetValue(&hadc); `/ f, y5 t: K% L9 `7 N }5 W1 l V. R! }9 S. z- M: ? // HAL_ADC_Stop(&hadc); H+ ?* ]$ w6 S7 M9 E/ t } |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
小白也能明白的STM32的低功耗与唤醒机制
STM32系统中2种数据掉电保护的方法
分享STM32F051中文参考手册(重制书签版)
AI工具训练营-用ChatGPT解决HID Keyboard实现的问题
STM32固件库分享,超全系列整理
STM32小白入门指南:从基础到OTA实现方案
STM32超详细学习笔记
新手必看!STM32单片机应该怎么学?
如果你解决了这些问题,就可以直接学STM32
微信公众号
手机版