Jump to content

    

Регистры калибровки STM32F4

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

 

Share this post


Link to post
Share on other sites
Потерял доку, где были описаны регистры и их адреса с колибровочными зоводскими значениями для VREF и температуры. Однодневный поиск по ST почему то ничего не дал.

Может, поискать в семействе STM32F3?...

DS на STM32F372/373

6.3.20 Temperature sensor characteristics

6.3.21 VBAT monitoring characteristics

6.3.22 Timer characteristics

The parameters given in Table 68 are guaranteed by design.

Refer to Section 6.3.14: I/O port characteristics for details on the input/output alternate

function characteristics (output compare, input capture, external clock, PWM output).

Table 65. Temperature sensor calibration values

Calibration value name Description Memory address

TS_CAL1 TS ADC raw data acquired at temperature of 30 °C, VDDA= 3.3 V 0x1FFF F7B8 - 0x1FFF F7B9

TS_CAL2 TS ADC raw data acquired at temperature of 110 °C VDDA= 3.3 V 0x1FFF F7C2 - 0x1FFF F7C3

Share this post


Link to post
Share on other sites

На STM32F4 То же было. Похоже они новый мэнуал выложили и тут же убрали. Я оттуда успел только калибровку Vref выдрать.

0x1FFF7A2A - значение short при 3,3V и температуре в 30С.

 

 

Проверил. Не совпадает F3 и F4:(

 

Нашел. Для F4 в электрических параметрах на STM32F427xx-STM32F429xx, хотя во всех F4xx присутствует :)

 

VREFIN_CAL Raw data acquired at temperature of 30 °C VDDA = 3.3 V 0x1FFF 7A2A - 0x1FFF 7A2B

TS_CAL1 TS ADC raw data acquired at temperature of 30 °C, VDDA= 3.3 V 0x1FFF 7A2C - 0x1FFF 7A2D

TS_CAL2 TS ADC raw data acquired at temperature of 110 °C, VDDA= 3.3 V 0x1FFF 7A2E - 0x1FFF 7A2F

 

Edited by vlad_new

Share this post


Link to post
Share on other sites
На STM32F4 То же было. Похоже они новый мэнуал выложили и тут же убрали.

 

 

Погугли RM0090 reference manual там все должно быть. Сам его долго искал...

Share this post


Link to post
Share on other sites
Погугли RM0090 reference manual там все должно быть. Сам его долго искал...

Обычно такое (конкретные значения) указывают в DS.

Share this post


Link to post
Share on other sites
On 9/14/2013 at 10:07 PM, vlad_new said:

На STM32F4 То же было. Похоже они новый мэнуал выложили и тут же убрали. Я оттуда успел только калибровку Vref выдрать.

0x1FFF7A2A - значение short при 3,3V и температуре в 30С.

 

 

Проверил. Не совпадает F3 и F4:(

 

Нашел. Для F4 в электрических параметрах на STM32F427xx-STM32F429xx, хотя во всех F4xx присутствует :)

 

VREFIN_CAL Raw data acquired at temperature of 30 °C VDDA = 3.3 V 0x1FFF 7A2A - 0x1FFF 7A2B

TS_CAL1 TS ADC raw data acquired at temperature of 30 °C, VDDA= 3.3 V 0x1FFF 7A2C - 0x1FFF 7A2D

TS_CAL2 TS ADC raw data acquired at temperature of 110 °C, VDDA= 3.3 V 0x1FFF 7A2E - 0x1FFF 7A2F

 

 

Кто знает, почему для хранения калибровочных данных используется диапазон адресов 0x1FFF 7A2C - 0x1FFF 7A2D, в двух регистрах это значение хранится что-ли?

Share this post


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

Кто знает, почему для хранения калибровочных данных используется диапазон адресов 0x1FFF 7A2C - 0x1FFF 7A2D, в двух регистрах это значение хранится что-ли?

А сколько разрядов в АЦП и сколько в байте? :clapping:

Share this post


Link to post
Share on other sites
18 hours ago, ViKo said:

А сколько разрядов в АЦП и сколько в байте? :clapping:

Я, по крайней мере, использую в АЦП 12 разрядов, ну а в байте их, конечно же, 8)) Хотите сказать, что это как-то связано с организацией памяти в STM32 ?, правда не читал об этом еще. Я представляю, что раз 32 разрядные МК, то и по адресу располагается 32-разрядный регистр, включая, зарезервированный системой биты. В примерах, которые находил в инете, хоть и используют 12 разрядный АЦП, но ссылаются по младшему адресу из двух, зачем нужен тогда второй? 

Share this post


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

Хотите сказать, что это как-то связано с организацией памяти в STM32

Во всех микроконтроллерах, памяти и вообще адресуются именно байты.

P.S. Если не во всех, то в большинстве.

Share this post


Link to post
Share on other sites
2 hours ago, ViKo said:

Во всех микроконтроллерах, памяти и вообще адресуются именно байты.

P.S. Если не во всех, то в большинстве.

Попробовал с разными типами данных и выводил по UART

1) #define TS_cal_110 ((uint8_t*) 0x1FF800FE)

   sprintf (txt_buf, "TS_cal_110=%d ",  *TS_cal_110);

    в терминалку вывелось значение 87 (согласен)

2)    #define TS_cal_110 ((uint16_t*) 0x1FF800FE)

   sprintf (txt_buf, "TS_cal_110=%d ",  *TS_cal_110);

    в терминалку вывелось значение 855 ( как такое может быть, если по адресу может храниться только 1 байт, десятичное число до 255)

3) 

#define TS_cal_110 ((uint32_t*) 0x1FF800FE)

   sprintf (txt_buf, "TS_cal_110=%d ",  *TS_cal_110);

    в терминалку ничего не вывелось ( ???)

 

Чего я не понимаю? Объясните, пожалуйста, если знаете. 

Share this post


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

как такое может быть, если по адресу может храниться только 1 байт

А вы читаете и выводите не байт, а 16 битовое число, начинающееся с указанного адреса (uint16_t*) 0x1FF800FE.

В третьем случае, скорее всего, невозможно прочитать 4-байтовое слово. А так: (uint32_t) 0x1FF800FC  ?

 

 

Share this post


Link to post
Share on other sites

в ST для хранения калибровочных данных используются разные адреса в зависимости от чипа

 

Chip CAL1 CAL2
L15+[CRUV]C 0x1FF800FA 0x1FF800FE
L162[RV]C 0x1FF800FA 0x1FF800FE
L15[12]+[68B] 0x1FF8007A 0x1FF8007E

Share this post


Link to post
Share on other sites
31 minutes ago, ViKo said:

А вы читаете и выводите не байт, а 16 битовое число, начинающееся с указанного адреса (uint16_t*) 0x1FF800FE.

В третьем случае, скорее всего, невозможно прочитать 4-байтовое слово. А так: (uint32_t) 0x1FF800FC  ?

 

 

Да вроде нет, вывожу только то, что передал в массив uint8_t txt_buf[200], то есть значение, которое содержится по адресу 0x1FF800FE.  Или не так?

Вот моя функция передачи строки:

void SendUSART (uint8_t *text)
{
    while(*text)
    {
        while(!(USART2->SR & USART_SR_TC)); //Transmission is complete
        USART2->DR = *text;    //write data
        text++;        
    }
}

 

Если пробовать так (uint32_t) 0x1FF800FC, то выдаст TS_cal_110=56033280 ( в принципе подходит под тип uint32_t).

 

Share this post


Link to post
Share on other sites
36 minutes ago, dsl2640free said:

в ST для хранения калибровочных данных используются разные адреса в зависимости от чипа

 

Chip CAL1 CAL2
L15+[CRUV]C 0x1FF800FA 0x1FF800FE
L162[RV]C 0x1FF800FA 0x1FF800FE
L15[12]+[68B] 0x1FF8007A 0x1FF8007E

Хотите сказать, что все-таки для хранения каллибровочных констант используется один адрес, а не диапазон из двух соседних,

например для cal2 0x1FF8 00FE - 0x1FF8 00FF. И,мол, производители указали диапазон для целого семейства МК? Тогда почему нигде в даташите или рефмане об этом не сказано и не указано?

Share this post


Link to post
Share on other sites

56033280 dec = 00000011 01010111 00000000 00000000 bin

Посмотрите, не находите здесь чисел 855 и 87?

9 минут назад, izolenta сказал:

Да вроде нет

Точно "да"!

10 минут назад, izolenta сказал:

Если пробовать так (uint32_t) 0x1FF800FC

Не так. А так:

(uint32_t *) 0x1FF800FC

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this