Jump to content

    
Sign in to follow this  
Allregia

Точность внутрених клоков в STM32L4

Recommended Posts

Товаришь попросил спросить, он тут не зарегистрирован, поэтому копи-паст с другого форума (там ему толком не ответили).

Quote

Проц STM32L462.

Вывожу через MCO с делителем 1:1 наружу сигнал с внутренних генераторов:


HSI = 8MHz, получаю 7.75, это -3.2%

MCI = 16MHz, получаю 14.2, это -12.6%

Где обещанный 1%? (к тому-же, ST в показаниях путаются - в одном месте пишут 1%, в другом 4%, а в третьем вообще 0.5%).

Еще: как понимать их заявления о Factory Calibrated?

В PIC я помню - на заводе калибровали внутренний генератор и записывали калибьровочную константу в последнеею ячейку флеша.
При старте она переписывалась в OCSCAL. А как в STM я пока не въехал - на автоматически (аппаратно) в регистр калибровки пападает, или ее надо самому туа писать?
Если самому, то куда писать понятно, а вот откуда ее считывать - я пока не нашел.

 

Share this post


Link to post
Share on other sites
Calibration
RC oscillator frequencies can vary from one chip to another due to manufacturing process
variations, this is why each device is factory calibrated by ST for 1 % accuracy at TA=25°C.
After reset, the factory calibration value is loaded in the HSICAL[7:0] bits in the Internal
clock sources calibration register (RCC_ICSCR).
If the application is subject to voltage or temperature variations this may affect the RC
oscillator speed. You can trim the HSI16 frequency in the application using the
HSITRIM[6:0] bits in the Internal clock sources calibration register (RCC_ICSCR).
For more details on how to measure the HSI16 frequency variation, refer to Section 6.2.17:
Internal/external clock measurement with TIM15/TIM16.
The HSIRDY flag in the Clock control register (RCC_CR) indicates if the HSI16 RC is stable
or not. At startup, the HSI16 RC output clock is not released until this bit is set by hardware.
The HSI16 RC can be switched on and off using the HSION bit in the Clock control register
(RCC_CR).

STM32L4 Reference Manual (RM0394 Rev 4), стр. 182

 

В частности:

After reset, the factory calibration value is loaded in the HSICAL[7:0] bits in the Internal
clock sources calibration register (RCC_ICSCR).

 

Товарищу передайте, чтобы не путал Datasheet и Reference Manual, у ST они имею разное назначение и ... размер :)

 

Share this post


Link to post
Share on other sites
Только что, Allregia сказал:

Товаришь попросил спросить, он тут не зарегистрирован, поэтому копи-паст с другого форума (там ему толком не ответили).

Открыл даташит на камень. Вижу, что HSI там на 16МГц, а не на 8, как Вы представили.

А второй не MCI, а MSI - он?

Да даже если так, очень странно, что такие измерения получили... Чем частоту меряли? Поверенным прибором или китайским осциллографом с алиэкспресс? МК - китай-подделка, или оригинал? Ведь, судя по даташиту, производитель гарантирует уровень характеристик в указанном диапазоне температур...

Share this post


Link to post
Share on other sites
4 hours ago, Arlleex said:

Открыл даташит на камень. Вижу, что HSI там на 16МГц, а не на 8, как Вы представили.

А второй не MCI, а MSI - он?

Он наверное когда писал, местами перепутал HSI и MSI.

Но это не суть важно, важно что ему надо реально получить 8Мгц на MCO и в 1% уложиться, хоть с того, хоть с того источника.

 

 

 

4 hours ago, Arlleex said:

Да даже если так, очень странно, что такие измерения получили... Чем частоту меряли? Поверенным прибором или китайским осциллографом с алиэкспресс? МК - китай-подделка, или оригинал?

Да какой нафиг алиэкспресс,  товаришь же не радиолюбитель, на али детали покупать.

Спросил - мерял он даже несколькими приборами, флюковским мультиметром и кейсайтовским осциллографом. Измеренное совпададет.

 

4 hours ago, Forger said:

Товарищу передайте, чтобы не путал Datasheet и Reference Manual, у ST они имею разное назначение и ... размер :)

Это как бы известно :) Он для краткости так написал,  но видимо в этом пункт до конца не въехал.

Т.е. получаается что калибровочная константа загружается автоматически при сбросе/старте, и самому ничего делать не надо?

4 hours ago, Arlleex said:

? Ведь, судя по даташиту, производитель гарантирует уровень характеристик в указанном диапазоне температур... 

Пока что он "на столе" получить точную частоту не может, не говоря уже о всем температурном диапазоне.

У меня к сожалению нет опыта с этом вопросе, т.к. я почти всегда STM32 с кварцем использовал, а где с внутренним - там мне было наплевать на его точность.

Share this post


Link to post
Share on other sites

У меня STM23L476 c часовым кварцем и потому MSI по нему подстраивается.

Но вот STM32F030 есть несколько применений без кварца. Причем работает UART. Там бы такие отклонения внутреннего генератора не позволяли бы иметь нормальную связь.

 

Share this post


Link to post
Share on other sites
3 hours ago, serglg said:

Там бы такие отклонения внутреннего генератора не позволяли бы иметь нормальную связь.

UART 5% допускает.

У меня когда-то было на другом семействе  - при комнатной температуре UART работал, а когда горяче или холодно - нет.

 

 

Share this post


Link to post
Share on other sites
5 часов назад, Allregia сказал:

Т.е. получаается что калибровочная константа загружается автоматически при сбросе/старте, и самому ничего делать не надо?

Достаточно ее случайно не затереть там, куда она загрузилась. Мне однажды по невнимательности это удалось. Симптомы были похожие.

Share this post


Link to post
Share on other sites

Смотрим еррату!

Option byte loading can fail if MSI frequency is greater than 8 MHz Description The option byte loading operation can fail if the MSI clock is ON with a frequency equal or greater than 8 MHz before performing an option byte loading by setting OBL_LAUNCH bit in the FLASH _CR register. Some options and engineering bytes values can be corrupted. Workaround If MSI is ON at a frequency equal or higher than 8MHz, It is mandatory to reduce MSI frequency to 4 MHz or less before launching the Option Byte loading operation by setting the OBL_LAUNCH bit in the FLASH_CR register.

Ну и т.д. :)

Share this post


Link to post
Share on other sites
On 12/9/2018 at 11:40 AM, vlad_new said:

Смотрим еррату!

Option byte loading can

А какое отношение Option Byte и функция Launch имеет к точности HSI/MSI и загрузке заводкой калибровки?

 

On 12/6/2018 at 5:24 PM, Сергей Борщ said:

Достаточно ее случайно не затереть там, куда она загрузилась. Мне однажды по невнимательности это удалось.

А каким образом удалось ее затереть, если она read only?

Я  сам немножко поисследовал эту тему.

Регист калибровки 32-х битный, старшее 16-юитное слово HSI а младшее - MSI (или наоборот, не важно, пишу по памяти).

В каждем 16-битном слове, старшиы байт - тримминг (точная подстройка) а младший - заводская калибровочная константа, она только на чтение.

Тримминг - 8 бит для MSI и дефолтом там 0 (это центр),  для HSI - 5 бибт с дефолтом 0х10 - это центр.

Младший байт загруается автоматически при сбросе, а байте - при изменении тримминга, в младший пишется сумма тримминга и заводкой калибровки.

 

Теперь самое интересное - у кого-нибудь есть именно L462, как у моего товарища?

У меня есть только L476, и на нем с дефолтными значениями этих регистров с частотами все точно, а у него на 462 пока нет.

Может в самом деле глюк конкретного камня? Причем не одного экщемпляра - у него штук 5-6 плат с ними, и все себя так ведут.

В эррате на 462  про это ни слова.

Он обещал сегодня сделать еще несколько экпериментов (раньше не мог, он чем-то другим был занят), как расскажет я доложу.

Share this post


Link to post
Share on other sites
13 минут назад, Allregia сказал:

для HSI - 5 бит с дефолтом 0х10 - это центр.

Ну вот я по невнимательности писал туда 0. Правда "не в лотерею, а в очко, не выиграл, а проиграл, не "Волгу" а червонец, но суть верная", т.е. проц у меня был другой, но тоже из STM32.

Share this post


Link to post
Share on other sites
29 minutes ago, Сергей Борщ said:

Ну вот я по невнимательности писал туда 0.

Т.е. в тримм а не калибровку.

 

Кстати, если кто пользуется калокубом, то там путанница в терминологии - хотя они и все делают правильно, но то что они называют

MSICalibrationValue и т.п., относящееся в MSI/HSI со  словом "Calibration" - на самом деле не калибровка а трим.

Я пробовал и с халом и без, результат одинаковый, но их обозначения меня слегка запутали.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this