UART с буферами и прерываниями разобрался Еще такой вопрос Когда велючен RX receiver можно ли считывать значение этого пина обычным образом? Т.е. Можно ли знать ноль там сейчас или единица?
Карма: 1
Рейтинг сообщений: 7
Зарегистрирован: Чт май 14, 2015 15:11:39 Сообщений: 424 Откуда: Саратов
Рейтинг сообщения:0
Всем привет. В чем разница между функциями GPIO_ReadOutputData() и GPIO_ReadInputData()? Взято из библиотечного файла: Спойлер/** * @brief Reads the specified GPIO output data port. * @note The port must be configured in input mode. * @param GPIOx : Select the GPIO peripheral number (x = A to I). * @retval GPIO output data port value. */ uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) { return ((uint8_t)GPIOx->ODR); }
/** * @brief Reads the specified GPIO input data port. * @note The port must be configured in input mode. * @param GPIOx : Select the GPIO peripheral number (x = A to I). * @retval GPIO input data port value. */ uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) { return ((uint8_t)GPIOx->IDR); }
Карма: 1
Рейтинг сообщений: 7
Зарегистрирован: Чт май 14, 2015 15:11:39 Сообщений: 424 Откуда: Саратов
Рейтинг сообщения:0
Всем привет. В stm8s103 UART1 имеет пины: D4 - UART_CK, D5 - UART_TX, D6- UART_RX. Мне нужен D4 для других целей. Можно ли сделать так, чтоб UART не пользовался им?
Зарегистрирован: Сб май 07, 2016 16:19:58 Сообщений: 13
Рейтинг сообщения:0
Здравствуйте. Хочу использовать в своем проекте STM8f003. C STM никогда не работал. И не могу найти описание регистров и их назначения. Необходимо UART и SPI. Какие даташиты смотреть? У ATMEL даташиты мне очень понравились, а у STM ничего подобного найти не могу. Все разбросано. Подскажите, дайте пожалуйста ссылки)) И еще такой вопрос, как лучше, проще работать с STM на прямую с регистрами или использовать библиотеки SPL?
а у STM ничего подобного найти не могу. Все разбросано. Подскажите, дайте пожалуйста ссылки)) И еще такой вопрос, как лучше, проще работать с STM на прямую с регистрами или использовать библиотеки SPL?
http://www2.st.com/content/st_com/en/pr ... 003f3.html качать Datasheet, Reference Manual RM0016, Errata Sheet ES0102 в Datasheet информация о конкретном микроконтроллере, типа распиновка, количество флэша, памяти и пр. В Reference Manual информация о внутренностях (периферия и пр.) на всю линейку микроконтроллеров, потому что периферия у всех представителей линейки однообразна, в отличии от тех же AVR. В Errata Sheet понятно. Работать имхо лучше напрямую с регистрами, руководствуясь Reference Manual.
Casper17 STM8 не сложнее AVR, нужно только перестроиться на другую логику документации Про документы вам уже написали RM0016 описывает все многообразие переферии в линейке STM8S, а даташит на конкретный МК описывает корпуса, пины и то, какая конкретно переферия из всей имеющейся в линейке есть в данном конкретном МК
SPL это уровень абстракции, програмирование на нем не сильно приблизит к пониманию того как работает сам МК. Выбор за вами, но выбрав SPL будьте готовы к тому, что в итоге все равно придете к програмированию регистров, только позже, когда поймете, что с SPL ничего не понимаете) у меня было именно так, правда от SPL я отказался почти сразу
Зарегистрирован: Сб май 28, 2016 13:35:35 Сообщений: 4
Рейтинг сообщения:1
Добрый день. Подскажите, правильно ли я понимаю, что в STM8 не все пины можно переключать в push-pull или open-drain режим, так как у некоторых из них он жестко задаётся соответствующей периферией в обход регистра CR1 (нельзя, например, I2C-пины переключить в push-pull даже при отключенном I2C)? В ref. manual на схеме GPIO есть некий сигнал «alternate enable», о котором вообще нигде ничего не поясняется.
upd. Вопрос снят. Всё просто. Оказывается, просто не все пины поддерживают Push-Pull.
Зарегистрирован: Сб май 28, 2016 13:35:35 Сообщений: 4
Рейтинг сообщения:0
Пытаюсь теперь закодить на том же STM8L обмен данными с датчиком по I2C1. Вопрос: по какой причине может возникать Arbitration Lost (флаг I2C1_SR2_bit.ARLO), если на шине по определению нет других мастеров? Причём возникнуть он может даже на пустой линии (к портам подключены только подтягивающие резисторы) (иногда, как и должен, выскакивает AF, а иногда - ARLO). Линии SDA и SCL в нуле никто не удерживает (если судить по значениям в регистре IDR в отладчике). Ещё вопрос: как пользоваться флагом I2C1_CR2_bit.SWRST (software reset)? В документации нигде про него не расписано. Также неясно, а может ли I2C контроллер вообще работать от fsysclock, «запитанного» от LSI? Ref manual гласит:
Цитата:
The peripheral input clock frequency must be at least: 1 MHz in Standard mode, 4 MHz in Fast mode
То есть при работе контроллера от LSI 38 кГц I2C корректно завести вообще нельзя?
Standard mode имеет частоту I2C равную 100кГц, а fast -- 400кГц. Умножать тактовую STM8 не умеют, т.ч. способа из 38кГц тактовой получить 100кГц I2C просто не существует в природе.
Зарегистрирован: Сб май 28, 2016 13:35:35 Сообщений: 4
Рейтинг сообщения:0
Извиняюсь, что не отписался. Проблема оказалась не в I2C контроллере (всё нормально работает от LSI), а в неправильном использовании датчика Am2321. Оказалось, что чтобы его корректно разбудить, нужно обратиться к нему, получить NACK и… перед отправкой стопового бита уронить всю линию (и SDA, и SCL) в 0 на 0.8 мсек. Как вам такое? Естественно I2C контроллер не даёт просто так порулить пином SDA, наплевав на стандарты шины I2C. Остаётся вручную портами дрыгать, имитируя вышеперечисленные действия. А датчик пробуждать нужно каждый раз, перед каждым считыванием показаний - после чтения он опять засыпает.
a5021 писал(а):
Standard mode имеет частоту I2C равную 100кГц, а fast -- 400кГц. Умножать тактовую STM8 не умеют, т.ч. способа из 38кГц тактовой получить 100кГц I2C просто не существует в природе.
Просто по документации не совсем было понятно, что в том контексте означает это «must». Означало ли это, что при меньшей частоте sysclock просто шину нельзя будет разогнать до 100 и 400 кГц, или же что (вдруг) имеется некая нигде не описанная аппаратная защита, которая при недостаточной частоте весь контроллер сбрасывает/вырубает (multimaster ведь…). Иными словами, мне подумалось, что, быть может, этот «must» - своего рода «absolute maximum (в данном случае minimum) ratings». В любом случае, вопрос снят.
Впрочем, было бы всё-таки интересно для общего развития узнать, как пользоваться флагом I2C1_CR2_bit.SWRST (software reset).
А есть ли смысл работать от LSI в этом случае? Я понимаю, что чем ниже частота, тем меньше потребление. Но все операции становятся весьма долгими и в это время процессор потребляет больше, чем если бы он уже давно находился во сне, отработав по-быстрому на высокой частоте.
Знатоки STM проясните ремонтнику, можно ли STM8S прошить также легко и бесплатно как скажем atmega32 понипрогом через RS232. Если да то какая прога нужна, и какая схема подключения?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения