STM32F030 ADC采样序列中包括IN0,IN1,IN2三个通道,采用单次转换模式,软件触发启动,但是发现采样转换到最后一个通道IN2时,EOC不会置位,程序进入超时状态。有哪位朋友碰到过此问题?6 z- V" t) n9 _! d6 _0 X 主要代码如下: uint16_t ADCValue[3;+ n( L$ l" Z/ |- D0 R, }( } void MX_ADC_Init(void) { ADC_ChannelConfTypeDef sConfig; 2 c* d. Y# V7 w X- r! a" C; v hadc.Instance = ADC1; 2 u# @) G! f+ E" { hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc.Init.Resolution = ADC_RESOLUTION_12B; ) H) A6 [; K1 p. T, f hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; # @ V5 A3 J i8 _9 I hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; ( _* n4 W. T8 h1 O7 x" p u hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; 4 W( _ T( \% s5 d0 \' _ hadc.Init.LowPowerAutoWait = DISABLE; ; E9 f9 {" |) b$ \% _ hadc.Init.LowPowerAutoPowerOff = DISABLE; # q9 T+ Q& P: I: k* U0 U8 h hadc.Init.ContinuousConvMode = DISABLE; % @7 j- {2 L% U: \/ i. U4 r2 `7 S: i hadc.Init.DiscontinuousConvMode = DISABLE; 6 E# v4 J6 ]- [2 M0 n& E hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; 3 B5 m6 H" n# D5 [2 Y0 ]; x3 T hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.DMAContinuousRequests = DISABLE; hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED; 6 y$ ]! b) H, n2 ?4 m3 w if (HAL_ADC_Init(&hadc) != HAL_OK) + ~3 y( ^2 n/ a5 ]9 E { 6 l$ A: q" l. y) s _Error_Handler(__FILE__, __LINE__); : K- b6 b/ J- I7 v: J- D$ T } sConfig.Channel = ADC_CHANNEL_0; & Z& L# S8 l$ [/ U sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; ! ~9 G' ]7 G6 r3 A9 c sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5; / L, Z# S7 z# b, G1 \ if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) {$ t: r. b: o' a% m3 o _Error_Handler(__FILE__, __LINE__); ( g/ b; u H! T3 j4 y0 _5 E } ! R) O" e# W4 X6 S' W# L! B3 _ sConfig.Channel = ADC_CHANNEL_1; ; R" Z" H4 N3 }$ n/ t if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } " B7 v) M2 D# p; [4 A sConfig.Channel = ADC_CHANNEL_2; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) 6 Y+ D7 w0 S4 T! S Z. Q {) }' C9 s. C! g+ H$ T7 a6 } _Error_Handler(__FILE__, __LINE__); }9 [( p* a+ ~. o% K6 I+ {4 k: W, { }3 z6 z8 ^ @% x7 w- w: v H1 J1 q ( @4 G" n) s8 V5 b/ l- U3 R; V void Get_ADCVal(void) { uint8_t i; - b) ^, b+ `. r3 G 8 F3 U: S2 H; \# {* ^: Z$ y7 r" C if (HAL_ADC_Start(&hadc) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); % k. a3 n; w# x, T7 F* k0 V& l } " J+ Y) }7 C1 u2 J9 p) z for ( i=0; i<3; i++ ) { if (HAL_ADC_PollForConversion(&hadc, 20) != HAL_OK) _Error_Handler(__FILE__, __LINE__); // ********** 当 i 递增到2时,程序执行死在这里!!!!!!!!!! + _1 i. W, i+ p$ n6 a1 p5 N7 ~+ ` else 5 w v4 d* i9 l# W ADCValue[i = HAL_ADC_GetValue(&hadc); ! G3 d; e: q5 ^$ r* J; t/ p } // HAL_ADC_Stop(&hadc); } |
STM32固件库分享,超全系列整理
三创电子(Tcreate)-STM32F030核心板代码
STM32F0 ADC(DMA中断)多通道,注释超详细
FreeRTOS在STM32F030上的移植
基于STM32移植而引发的疑问经验分享
分享STM32F051中文参考手册(重制书签版)
游名:STM32F0+Trinamic智能步进驱动芯片TMC5160(最高20A)参考原...
【MCU实战经验】+STM32F030的步进电机加减速
STM32F0的中文技术参考手册(标签处理过)
基于STM32F030硬件SPI经验分享