[解決しました] STM32のADCで嵌った( MultiChannel 非連続 循環バッファ DMA TIM3駆動 )

DMAでADC開始した後にさらにADC開始をしていたために一回チャネルがずれてしまうことになったようだった。

pUart = &huart1;
HAL_ADC_MspInit(&hadc1);
HAL_UART_Receive_DMA(pUart, RdBuff, RCV_BUFF_SIZE); /* 受信開始 */
HAL_ADC_Start_DMA(&hadc1, ADC_BUFF, ADC_BUFF_SIZE*6);
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start(&hadc1);

修正にいたる過程では6chのうち一つだけを増やしてサンプリングしたいということなどの要望がありDMAを使うものと割り込み駆動をするものとでトライしたがままならずDMAのみでサンプルするチャネルを当該のみ10倍にすることにした。この際に、バッファ段数の動的切り替えなどをトライする過程でADCとDMAの停止・取り込み再開の検討をする中で上記の点について気づきなおすことでトリガ単位で一つのチャネルをADC取り込みがなされることを確認できた。

HAL_ADC_MspInit(&hadc1);
HAL_UART_Receive_DMA(pUart, RdBuff, RCV_BUFF_SIZE); /* 受信開始 */
HAL_TIM_Base_Start(&htim3);
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, ADC_BUFF, ADC_BUFF_SIZE*15);

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください