Набрел на странные различия показаний внутреннего температурного датчика в STM32F051, а также расхождения в документации.
Итак, на F0 Discovery стоит процессор STM32F051R8T6, ревизия B, на корпусе есть надпись GH22N, в конце надписей - 214. Для вычисления температуры из значения ADC от внутреннего датчика с учетом калибровочных констант применил, не задумываясь, пример кода из приложения A.7.16. на странице 930 мануала к процу DocID018940 Rev 6 и получил вполне разумные значения. Каково было мое удивление, когда, запрограммировав пользовательское устройство с процессором того же типа, я начал получать откровенно левые температуры!
Сначала я обнаружил, что надпись на корпусе проца пользователя имеет строку GH22Q, а в конце 403, но ревизия по-прежнему B. Начал перечитывать мануал и в разделе 13.9 об ADC, стр. 234, нашел иную формулу. Ради эксперимента применил ее и получил правильные температуры! На F0 Discovery эта заливка, в свою очередь, показывает чушь.
Что имеем? В рамках одного мануала применяются разные формулы для вычисления температуры. Обе формулы оказываются рабочими, но на разных процессорах одной ревизии. В Errata об этом не упоминается.
P.S. Объясни другим, пойми сам. Раскопал. Итак, питание CPU на F0 Discovery, как оказалось, - 3.0V, а на пользовательской плате - тру 3.3V. Код в приложении мануала написан именно для F0 Discovery, хотя об этом ну нигде ни слова! Там есть коэффициенты 300 и 330, что и есть соотношение напряжений. Основная формула на странице 234 - общая, но нигде не упомянуто, что она работает только при 3.3V питания. Да, есть упоминание в DATA SHEET к процу (не RM), в главе 3.10.1, где описаны калибровки, что они выполнены при 3.3V, но пока 2 на 2 в уме перемножишь...