Заголовок сообщения: Объясните пожалуйста строчку на СИ(библеотека STM8s.h)
Добавлено: Чт апр 20, 2017 13:05:25
Первый раз сказал Мяу!
Зарегистрирован: Вс мар 08, 2015 11:29:17 Сообщений: 22
Рейтинг сообщения:0
Копаюсь в библиотеке stm8 и не могу понять как реализован SPI.
Вот эстэмщики определили структуру и новый тип данных typedef struct SPI_struct { __IO uint8_t CR1; /*!< SPI control register 1 */ __IO uint8_t CR2; /*!< SPI control register 2 */ __IO uint8_t ICR; /*!< SPI interrupt control register */ __IO uint8_t SR; /*!< SPI status register */ __IO uint8_t DR; /*!< SPI data I/O register */ __IO uint8_t CRCPR; /*!< SPI CRC polynomial register */ __IO uint8_t RXCRCR; /*!< SPI Rx CRC register */ __IO uint8_t TXCRCR; /*!< SPI Tx CRC register */ } SPI_TypeDef;
Но в коде они обращаются к элементам через вот такую штуку: #define SPI ((SPI_TypeDef *) SPI_BaseAddress)
То есть в коде пишут например: SPI->CR1 = SPI_CR1_RESET_VALUE;
Мой вопрос заключается в том, что я не понимаю как работает строка #define SPI ((SPI_TypeDef *) SPI_BaseAddress) SPI_BaseAddress = адресу с которого начинаются все регистры SPI. Спасибо.
#define SPI ((SPI_TypeDef *) SPI_BaseAddress) - это подмена явного привдения типа к простой записи SPI.
SPI_BaseAddress - это просто число. чтобы рассматривать это число, как адрес, надо явно привести его к типу УКАЗАТЕЛЬ. например, (void*)123 - это указатель, равный 123. но вам надо, чтобы указатель был равен SPI_BaseAddress, да еще и не просто так, а указывал бы на определенную структуру... вот вместо абстрактного void и указывается конкретный тип вашей структуры SPI_TypeDef.
получается длинная запись, которую заменяют на короткую SPI.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Это просто структура SPI_TypeDef у которой начальный адрес равен SPI_BaseAddress. Эта структура описывает карту регистров периферии SPI, можно найти карту в мануале. Просто упрощает запись, можете писать так ((SPI_TypeDef *) SPI1_BASE)->DR = 0xFF; SPI1->DR = 0xFF; Обе записи верны.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Заголовок сообщения: Re: Объясните пожалуйста строчку на СИ(библеотека STM8s.h)
Добавлено: Чт апр 20, 2017 15:15:54
Первый раз сказал Мяу!
Зарегистрирован: Вс мар 08, 2015 11:29:17 Сообщений: 22
Рейтинг сообщения:0
"Это просто структура SPI_TypeDef у которой начальный адрес равен SPI_BaseAddress" Тогда получается первый элемент структуры лежит по адресу SPI_BaseAddress, второй SPI_BaseAddress+1, тритий SPI_BaseAddress+2 . Так?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения