Перейти к содержанию
    

izolenta

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Посетители профиля

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

  1. Всё разобрался. Я пользовался указателями, но не вникал. Указатель типа uint16_t указывает на адрес, где хранится первый байт (один из двух) данных, по идеологии little endian format младший значащий байт. Тогда всё сходится, получается для хранения 12 разрядной калибровочной константы нужно минимум 2 байта, соответственно расположенных по двум адресам, то есть мой диапазон из двух соседних адресов 0x1FF8 00FE - 0x1FF8 00FF. ViKo, спасибо за наводки!
  2. Как, я не понимаю?) Не так. А так: (uint32_t *) 0x1FF800FC. Ну да так, Я просто забыл звездочку написать в форуме) TS_cal_110=56033280
  3. Хотите сказать, что все-таки для хранения каллибровочных констант используется один адрес, а не диапазон из двух соседних, например для cal2 0x1FF8 00FE - 0x1FF8 00FF. И,мол, производители указали диапазон для целого семейства МК? Тогда почему нигде в даташите или рефмане об этом не сказано и не указано?
  4. Да вроде нет, вывожу только то, что передал в массив 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. Попробовал с разными типами данных и выводил по 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. Я, по крайней мере, использую в АЦП 12 разрядов, ну а в байте их, конечно же, 8)) Хотите сказать, что это как-то связано с организацией памяти в STM32 ?, правда не читал об этом еще. Я представляю, что раз 32 разрядные МК, то и по адресу располагается 32-разрядный регистр, включая, зарезервированный системой биты. В примерах, которые находил в инете, хоть и используют 12 разрядный АЦП, но ссылаются по младшему адресу из двух, зачем нужен тогда второй?
  7. Кто знает, почему для хранения калибровочных данных используется диапазон адресов 0x1FFF 7A2C - 0x1FFF 7A2D, в двух регистрах это значение хранится что-ли?
×
×
  • Создать...