CubeIED Generate Code Bug of ADC for LL Library
問題
在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讀取順序。
讀取順序為
Rank1: Channel 3
Rank2: Channel 3
Rank3: Channel 15
Rank4: Channel 15
這時候打開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,無論外加電壓為何。
解決方法
在void MX_ADC2_Init(void)裡面的LL_ADC_INJ_ConfigQueueContext,
手動填入
Rank1_Channel, Rank2_Channel, Rank3_Channel, Rank4_Channel
如下圖,即可解決,只是礙於CubeMX的設定,以後有重新Generate Code的話就必須重做這一步驟。
修改好後重新執行即可看到ADC讀值正常了。