CubeIED Generate Code Bug of ADC for LL Library

Hsueh-Ju Wu 吳學儒
STM32CubeIDE
Published in
Apr 1, 2021

問題

在CubeMX裡設定完ADC注入通道(Injected Channels)後,
執行程式開始獲取ADC讀值,這時候卻發現ADC讀值都在4095浮動?

環境

本文使用
STM32CubeIDE Version: 1.6.0
MCU:STM32F334
Low-Layer (LL) Library

發生原因

如下圖,筆者在CubeMX中已設定好ADC2 Injected Conversion觸發源與4個Injected Channels讀取順序。

CubeMX ADC2 Injected Channels 觸發源設定

讀取順序為
Rank1: Channel 3
Rank2: Channel 3
Rank3: Channel 15
Rank4: Channel 15

CubeMX ADC2 Injected Channels 順序設定

這時候打開ADC.c在void MX_ADC2_Init(void)裡面,可以找到Injected Channels 某行設定函式如下:

開啟 LL_ADC_INJ_ConfigQueueContext 的宣告來看,應要輸入甚麼參數

可看到要輸入的參數
Rank1_Channel, Rank2_Channel, Rank3_Channel, Rank4_Channel
在void MX_ADC2_Init(void)裡皆為0x0000,
理論上這裡應該填入通道的暫存器位置。

結果

此時運行程式可看到ADC讀取到的值皆是4095,無論外加電壓為何。

ADC2 Injected Channels 讀值異常

解決方法

在void MX_ADC2_Init(void)裡面的LL_ADC_INJ_ConfigQueueContext,
手動填入
Rank1_Channel, Rank2_Channel, Rank3_Channel, Rank4_Channel
如下圖,即可解決,只是礙於CubeMX的設定,以後有重新Generate Code的話就必須重做這一步驟。

修改好後重新執行即可看到ADC讀值正常了。

修改設定參數後,ADC2 Injected Channels 讀值正常

--

--