Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Программирование STM8

Сообщение GARMIN »

Я экспериментировал с таким методом.
Вот здесь:
http://forum.easyelectronics.ru/viewtopic.php?f=33&t=20021
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Программирование STM8

Сообщение axillent »

UART с буферами и прерываниями разобрался
Еще такой вопрос
Когда велючен RX receiver можно ли считывать значение этого пина обычным образом? Т.е. Можно ли знать ноль там сейчас или единица?
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Программирование STM8

Сообщение FireProoF »

Всем привет. В чем разница между функциями 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);
}
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Программирование STM8

Сообщение dosikus »

FireProoF, читать RM на тему портов, Там и найдете различия регистров ODR и IDR ...
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Программирование STM8

Сообщение FireProoF »

Всем привет. В stm8s103 UART1 имеет пины: D4 - UART_CK, D5 - UART_TX, D6- UART_RX. Мне нужен D4 для других целей. Можно ли сделать так, чтоб UART не пользовался им?
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Программирование STM8

Сообщение GARMIN »

Control register 3 (UART_CR3)
Bit 3 CLKEN: Clock enable
This bit allows the user to enable the SCLK pin.
0: SLK pin disabled
1: SLK pin enabled
Casper17
Родился
Сообщения: 13
Зарегистрирован: Сб май 07, 2016 16:19:58

Re: Программирование STM8

Сообщение Casper17 »

Здравствуйте. Хочу использовать в своем проекте STM8f003. C STM никогда не работал. И не могу найти описание регистров и их назначения. Необходимо UART и SPI. Какие даташиты смотреть? У ATMEL даташиты мне очень понравились, а у STM ничего подобного найти не могу. Все разбросано. Подскажите, дайте пожалуйста ссылки)) И еще такой вопрос, как лучше, проще работать с STM на прямую с регистрами или использовать библиотеки SPL?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

Casper17 писал(а): а у 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.
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Программирование STM8

Сообщение axillent »

Casper17 STM8 не сложнее AVR, нужно только перестроиться на другую логику документации
Про документы вам уже написали
RM0016 описывает все многообразие переферии в линейке STM8S, а даташит на конкретный МК описывает корпуса, пины и то, какая конкретно переферия из всей имеющейся в линейке есть в данном конкретном МК

SPL это уровень абстракции, програмирование на нем не сильно приблизит к пониманию того как работает сам МК. Выбор за вами, но выбрав SPL будьте готовы к тому, что в итоге все равно придете к програмированию регистров, только позже, когда поймете, что с SPL ничего не понимаете) у меня было именно так, правда от SPL я отказался почти сразу
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Программирование STM8

Сообщение axillent »

пытаюсь запустить 2й канал TIM1 с PWM
затер RM до дыр, но почему-то не получается

что я упускаю?

Спойлер

Код: Выделить всё

   // PC4
   PC_DDR_bit.DDR4 = 1;
   PC_CR1 |= MASK_PC_CR1_C14;

   // TIM1
   TIM1_CR1   = MASK_TIM1_CR1_ARPE;
   TIM1_CR1_bit.CMS   = 0;         // 00 - edge aligned, 01 - center aligned1
   TIM1_CR2   = 0;
   TIM1_IER   = 0;
   //TIM1_EGR   = 0;
   TIM1_CCMR1   = 0;
   TIM1_CCMR2   = MASK_TIM1_CCMR2_OC2PE | MASK_TIM1_CCMR2_OC2FE;
   TIM1_CCMR2_bit.OC2M   = 6;   // 0b110 - PWM mode 1, 0b111 - PWM mode 2
   TIM1_CCMR3   = 0;
   TIM1_CNTRH   = 0;
   TIM1_CNTRL   = 0;
   TIM1_CCER1   = MASK_TIM1_CCER1_CC2NE;
   TIM1_CCER2   = 0;
   TIM1_PSCRH   = 0;
   TIM1_PSCRL   = 0;
   TIM1_ARRH   = 4;   // pwm frequency
   TIM1_ARRL   = 0;
   TIM1_CCR2H   = 1;   // pwm duty
   TIM1_CCR2L   = 0;
   TIM1_BKR   = MASK_TIM1_BKR_MOE | MASK_TIM1_BKR_OSSR;
   TIM1_CR1   |= MASK_TIM1_CR1_CEN;
   TIM1_EGR   |= MASK_TIM1_EGR_UG;


upd. кажется я понял... надо AFR0 поменять для TIM1_CH2 так? как это в IAR делается?
upd. заработало!
strvl
Родился
Сообщения: 4
Зарегистрирован: Сб май 28, 2016 13:35:35

Re: Программирование STM8

Сообщение strvl »

Добрый день. Подскажите, правильно ли я понимаю, что в STM8 не все пины можно переключать в push-pull или open-drain режим, так как у некоторых из них он жестко задаётся соответствующей периферией в обход регистра CR1 (нельзя, например, I2C-пины переключить в push-pull даже при отключенном I2C)? В ref. manual на схеме GPIO есть некий сигнал «alternate enable», о котором вообще нигде ничего не поясняется.

upd. Вопрос снят. Всё просто. Оказывается, просто не все пины поддерживают Push-Pull.
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Программирование STM8

Сообщение axillent »

смотрите табличку в разделе Pinouts and pin description в даташите на сам МК
там все четко указано какой пин можно в какой режим переключать

так же часто можно это понять по мнемонике на символическом обозначении
например пины I2C обозначаются как (T) - true open drain, что означает:
In the open-drain output column, "T" defines a true open-drain I/O (P-buffer, weak pull-up, and protection diode to VDD are
not implemented).
strvl
Родился
Сообщения: 4
Зарегистрирован: Сб май 28, 2016 13:35:35

Re: Программирование STM8

Сообщение strvl »

Пытаюсь теперь закодить на том же 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 корректно завести вообще нельзя?
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Standard mode имеет частоту I2C равную 100кГц, а fast -- 400кГц. Умножать тактовую STM8 не умеют, т.ч. способа из 38кГц тактовой получить 100кГц I2C просто не существует в природе.
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Программирование STM8

Сообщение axillent »

Что мещает на время обмена по I2C менять источник тактирования?
strvl
Родился
Сообщения: 4
Зарегистрирован: Сб май 28, 2016 13:35:35

Re: Программирование STM8

Сообщение strvl »

Извиняюсь, что не отписался. Проблема оказалась не в I2C контроллере (всё нормально работает от LSI), а в неправильном использовании датчика Am2321. Оказалось, что чтобы его корректно разбудить, нужно обратиться к нему, получить NACK и… перед отправкой стопового бита уронить всю линию (и SDA, и SCL) в 0 на 0.8 мсек. Как вам такое? :roll: Естественно 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).
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

А есть ли смысл работать от LSI в этом случае? Я понимаю, что чем ниже частота, тем меньше потребление. Но все операции становятся весьма долгими и в это время процессор потребляет больше, чем если бы он уже давно находился во сне, отработав по-быстрому на высокой частоте.
Аватара пользователя
hazy
Родился
Сообщения: 15
Зарегистрирован: Пт янв 04, 2013 18:28:18

Re: Программирование STM8

Сообщение hazy »

Для сброса:

Код: Выделить всё

I2C_CR2_SWRST=1;
I2C_CR2_SWRST=0;


//и настраиваем модуль заново

Код: Выделить всё

I2C_FREQR_FREQ = 16;
I2C_CR1_PE = 0;
I2C_CCRH_F_S = 0;
ccr = 80;
I2C_TRISER_TRISE = 16+1;
I2C_CCRL = ccr & 0xFF;
I2C_CCRH_CCR = (ccr >> 8) & 0x0F;
I2C_CR1_PE = 1;
I2C_CR2_ACK = 1;
Rpetrovich
Родился
Сообщения: 4
Зарегистрирован: Вт янв 06, 2015 14:12:15

Re: Программирование STM8

Сообщение Rpetrovich »

Знатоки STM проясните ремонтнику, можно ли STM8S прошить также легко и бесплатно :)) как скажем atmega32 понипрогом через RS232.
Если да то какая прога нужна, и какая схема подключения?
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Совсем бесплатно не получится, но почти бесплатно можно.

Изображение
Ответить

Вернуться в «Разные вопросы по МК»