STM32L4 FW_L4 V1.16.0でADC CPU温度取得のバグ?

 STM32 IDE MXのバージョンを5.xから6.0にアップしたことで、Firmware Packageのバージョンが FW_L4 V.1.15.1から V1.16.0へバージョンアップされたけれど、ADC1で取得していたCPU温度の取得値がおかしくなった。

 主にLL APIを使っていてADCに関するAPIの変更がされたのかと思い色々調べたけれど、呼び出す順序が違うぐらいで特にAPIが大きく変更されていない。ただ、呼び出し側の引数が変更されているが、定義を調べると明らかに値が違う。

 FW_L4 V1.15.1のadc.c内での初期化処理の一部

LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_2,LL_ADC_CHANNEL_TEMPSENSOR);
LL_ADC_SetChannelSamplingTime(ADC1, LL_ADC_CHANNEL_TEMPSENSOR,LL_ADC_SAMPLINGTIME_92CYCLES_5);
LL_ADC_SetChannelSingleDiff(ADC1,LL_ADC_CHANNEL_TEMPSENSOR,LL_ADC_SINGLE_ENDED);

FW_L4 V1.16.0のadc.c内での初期化処理の一部

LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_2,LL_ADC_PATH_INTERNAL_TEMPSENSOR);
LL_ADC_SetChannelSamplingTime(ADC1,LL_ADC_PATH_INTERNAL_TEMPSENSOR,LL_ADC_SAMPLINGTIME_92CYCLES_5);
LL_ADC_SetChannelSingleDiff(ADC1,LL_ADC_PATH_INTERNAL_TEMPSENSOR,LL_ADC_SINGLE_ENDED);

V1.16.0ではLL_ADC_REG_SetSequencerRanksの3番目の引数に設定すべきChannelの設定(LL_ADC_CHANNEL_TEMPSENSOR)にLL_ADC_SetCommonPathInternalChの2番目の引数(LL_ADC_PATH_INTERNAL_TEMPSENSOR)のPathInteranlで使用する定義が使われている。なぜ?

LL_ADC_PATH_INTERNAL_TEMPSENSOR を LL_ADC_CHANNEL_TEMPSENSORへ変更することで、正常な温度を取得することができた。けど、CubeMXで設定を変更してコード生成するとコードが戻って修正する必要があるので何とかしてほしい。

ちなみに

L4_FW 1.16.0ではUSBCDCでCDC_TransmitCplt_FS関数が実装された。(STM32F7とかでは既に実装されていた機能)。今まではこの送信完了のコールバック関数が実装されておらず、送信バッファがたまっている時に定期的に送信状態とバッファの有無をポーリングしていたけれど、これが呼ばれた時点でバッファの送信処理ができるので、改良されているところもある。

コメントを残す

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

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