Jump to content

    

izolenta

Участник
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Обычный

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

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

    Всё разобрался. Я пользовался указателями, но не вникал. Указатель типа uint16_t указывает на адрес, где хранится первый байт (один из двух) данных, по идеологии little endian format младший значащий байт. Тогда всё сходится, получается для хранения 12 разрядной калибровочной константы нужно минимум 2 байта, соответственно расположенных по двум адресам, то есть мой диапазон из двух соседних адресов 0x1FF8 00FE - 0x1FF8 00FF. ViKo, спасибо за наводки!
  2. Регистры калибровки STM32F4

    Как, я не понимаю?) Не так. А так: (uint32_t *) 0x1FF800FC. Ну да так, Я просто забыл звездочку написать в форуме) TS_cal_110=56033280
  3. Регистры калибровки STM32F4

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

    Да вроде нет, вывожу только то, что передал в массив 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).
  5. Регистры калибровки STM32F4

    Попробовал с разными типами данных и выводил по 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); в терминалку ничего не вывелось ( ???) Чего я не понимаю? Объясните, пожалуйста, если знаете.
  6. Регистры калибровки STM32F4

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

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