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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Vladislav14
Родился
Сообщения: 16
Зарегистрирован: Вс мар 27, 2022 15:49:30

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

Сообщение Vladislav14 »

ну... я бы в таком случае посмотрел в отладчике, во что оно скомпилировалось. Но у меня STVD с космиком;-)
Или попробовать другие операторы: if, else ...
Аватара пользователя
Ромыч
Прорезались зубы
Сообщения: 210
Зарегистрирован: Ср янв 06, 2010 22:02:25
Откуда: Уфа сити
Контактная информация:

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

Сообщение Ромыч »

наверно еще раз влезу в "STVD с космиком" и попробую перенести туда этот участок кода, благо, он мелкий... а в STVD с SPL работаете или напрямую регистрами/портами рулите?
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
Vladislav14
Родился
Сообщения: 16
Зарегистрирован: Вс мар 27, 2022 15:49:30

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

Сообщение Vladislav14 »

И то, и другое. SPL помогает быстрее разобраться с использованием внутренностей контроллера, а затем, особенно если критично быстродействие, можно и оптимизировать.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Писать без SPL, естественно - напрямую регистрами (удобно макросы всякие поопределять, можно как пример у меня в гитхабе глянуть).
А для реакции на возрастающий или спадающий фронт, если ничего, кроме прерываний, не осталось, лучше прерывание настроить и конечный автомат забульбенить. Ну, если же совсем по-абдурински хочется, то как-то так:

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

static uint8_t waitNxtRise(){
  uint32t_i;
  for(i = 0; i < 100000 && (PORT(LATCH_PORT, IDR) & LATCH_PIN); ++i);
  if(i == 100000) return 0;
  for(i = 0; i < 100000 && ~(PORT(LATCH_PORT, IDR) & LATCH_PIN); ++i);
  if(i == 100000) return 0;
  return 1;
}
И аналогично сделать функцию на спадающий фронт. Соответственно, вызывать нужную функцию и проверять, что вернула: если 1 - все ОК, если 0 - был таймаут. Таймаут, в принципе, лучше бы таймером реализовать…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
Ромыч
Прорезались зубы
Сообщения: 210
Зарегистрирован: Ср янв 06, 2010 22:02:25
Откуда: Уфа сити
Контактная информация:

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

Сообщение Ромыч »

Eddy_Em, а какую максимальную частоту, даже скорее, минимальную ширину импульса можно подобным образом отлавливать? (При частоте stm 16mhz)
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Ромыч, есть же даташит на камень, лень мне искать, честно говоря. Вряд ли выше 8МГц, но скорей всего, не выше 2МГц. Плюс трата ресурсов на всякие дела - итого, полезная скорость будет совсем небольшой. Чтобы была нормальная, нужно использовать аппаратные возможности - тот же SPI, например, или USART.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Vladislav14
Родился
Сообщения: 16
Зарегистрирован: Вс мар 27, 2022 15:49:30

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

Сообщение Vladislav14 »

В любом случае чтение или запись gpio следует делать через прямое обращение к портам, т.к. в spl фактически оно и делается, но при его использовании тратятся лишние такты на вызов функции. Вот оно, например:
/**
* @brief Reads the specified GPIO input data pin.
* @param GPIOx : Select the GPIO peripheral number (x = A to I).
* @param GPIO_Pin : Specifies the pin number.
* @retval BitStatus : GPIO input pin status.
*/
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
}
Определения можно посмотреть в gpio.h
Аватара пользователя
Ромыч
Прорезались зубы
Сообщения: 210
Зарегистрирован: Ср янв 06, 2010 22:02:25
Откуда: Уфа сити
Контактная информация:

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

Сообщение Ромыч »

Спасибо за советы, до дома доберусь, попробую! Ещё глупенький вопрос... Вот uart, spi,ic2 вроде все понятно, если использовать их по назначению. Не понятно как их использовать не по назначению, например как в моем случае. То есть не совсем понимаю отличие железной реализации протокола от софтовой
Что в цивилизованном мире называют "устаревшие технологии", в России зовется "технологии, проверенные временем"
Vladislav14
Родился
Сообщения: 16
Зарегистрирован: Вс мар 27, 2022 15:49:30

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

Сообщение Vladislav14 »

Для ненормативного использования нужно использовать datasheet cd00190271-stm8s-series-and-stm8af-series-8bit-microcontrollers-stmicroelectronics. Там достаточно много настроек. Например, мне удалось успешно подключить к I2C дисплей TM1637 (там протокол похож, но не передаётся slave address, поэтому потребовался некоторый "хакинг"). А с SPI + TM1638 вообще всё просто: вот пример инициализации:
SPI_DeInit();
SPI_ITConfig(SPI_IT_TXE, DISABLE);

SPI_Init(SPI_FIRSTBIT_LSB, SPI_BAUDRATEPRESCALER_32, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_HARD, (uint8_t)0x07); // SPI_DATADIRECTION_2LINES_FULLDUPLEX SPI_BAUDRATEPRESCALER_32

SPI_BiDirectionalLineConfig(SPI_DIRECTION_TX);
SPI_CalculateCRCCmd(DISABLE);
SPI_Cmd(ENABLE);

В данном случае видно, что передача, начиная с младшего бита (SPI_FIRSTBIT_LSB), частоту делим на 32 (SPI_BAUDRATEPRESCALER_32), т.к. TM 1638 не быстрый (в устройстве тактовая 16 MHz), передача по одной линии MOSI (SPI_DATADIRECTION_1LINE_TX).
Используя spl для инициализации регистров периферии, очень желательно заглядывать в datasheet, чтобы понимать, как оно работает, а иногда и самому более удобную функцию написать;-)

В документации есть временнЫе диаграммы и примеры использования.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Ромыч, вот здесь у меня куча всякой всячины под STM8. И без позорных SPL.
Я подозреваю, что если бы STM8 была еще более популярной, под нее и свой калокуб бы замутили! Чтобы "снизить порог вхождения" и экспоненциально увеличить количество быдлокода и жертв на производстве.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Bill_
Открыл глаза
Сообщения: 60
Зарегистрирован: Вс ноя 13, 2022 14:58:17

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

Сообщение Bill_ »

[uquote="Ромыч",url="/forum/viewtopic.php?p=4309783#p4309783"]Добрый день! Пытаюсь обуздать STM8. Задача - сымитировать работу сдвигового регистра. На всякий случай поясню суть: после сигнала latch идет серия тактовых сигналов, по которым отдаем в DATA биты по очереди. Проблема в том, что что latch читается легко, а вот с чтением CLK возникли проблемы. Не пойму, что не так, но либо читается один импульс, либо не читается вообще. СТМка работает на частоте 16мгц.

График сигналов в аттаче.
photo_2022-10-25_17-05-05.jpg
Код функции

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

void proc(void){  
  while(GPIO_ReadInputPin(LATCH_PORT,LATCH_PIN)==0){};    // Ждем изменения latch   
  for (u8 i = 0; i < 8; i++) {    
    if (data & (1 << i))
      dataL();					// сброс бита
    else
      dataH();    				// установка бита
    
     while( GPIO_ReadInputPin(CLK_PORT, CLK_PIN)==0){};    // Ждем изменения clk 
  }
  
  dataH();  
}
В строке while( GPIO_ReadInputPin(CLK_PORT, CLK_PIN)==0) ожидание что 0, что 1 дает один и тот же результат - биты отдаются сразу пачкой, такое ощущение, что чтение порта не работает, хотя сконфигурирован как вход GPIO_Init(CLK_PORT, (GPIO_Pin_TypeDef)(CLK_PIN), GPIO_MODE_IN_FL_NO_IT);

Подобный код на ардуине работал превосходно, даже с учетом тормозов фреймворка Arduino, а тут, на голой СТМке как будто камня не хватает для выборки сигнала..[/uquote]Ассемблерный листинг можно посмотреть?
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

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

Сообщение Sergey_57 »

Здравствуйте , уважаемые форумчане.
Лет 20 писал под Пики, заказчик поставил задачу разработать устройства на STM8.
Сунулся всё хорошо , прекрасная маркиза. Но STVD и программатор ссылки только на оф. сайт https://www.st.com. который заблокирован для РФ. Бывалые советуют через VPN.
Торрент не помог. Или не нашел.
Хотелось узнать как эту проблему Вы решаете.
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

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

Сообщение Sergey_57 »

программатор ST-link V2 для STM8 / Stm32 . установка драйвера где это счастье можно взять.
Заранее спасибо . Или всё-таки через VPN?
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

Там ещё регистрироваться надо. В последний раз успешно все скачивалось через тор-браузер.
Сам сайт не заблокирован. Прекрасно открывается. Только скачивание они заблокировали с российских ip.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Под линуксом все нормально работает, и никаких ВПН не надо.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Sergey_57
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вс ноя 13, 2022 22:47:31

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

Сообщение Sergey_57 »

Уважаемый JackSmith, Зашел через Тор. но видно запоминает почту. я засветил два адреса.
И ругается , но по другому. Видите ли браузер не нравиться. Типа я заходил с другого.

Вариантов как всегда два. Просить у вас ссылку или Продолжить на PIC.
Могу рассчитаться коньяком.
Программатор ST-link V2 для STM8 / Stm32 нашёл , добрые люди выложили.
Работаю в одной конторе удалённо. Есть интересные задачи. от Эхолотов до автоматической проверки кабелей. Заказчики приходят от Сколково.
Одна из них стабилизация режима ректификационной колонны для дома. Зам. директора планирует выпуск. С этим изделием точно не кинут. Но пахнет ПИД регулятором с транспортной задержкой.
Vladislav14
Родился
Сообщения: 16
Зарегистрирован: Вс мар 27, 2022 15:49:30

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

Сообщение Vladislav14 »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4319944#p4319944"]Под линуксом все нормально работает, и никаких ВПН не надо.[/uquote]

У меня и в виндовоэе с мозиллы всё открывается без проблем.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

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

Сообщение JackSmith »

stvd+stvp
https://disk.yandex.ru/d/PmjwIebgZ9997Q

драйвера на stlink

https://disk.yandex.ru/d/GzESLuxbdmjBFw

если нужен будет Си-компилятор, ищите на сайте Cosmic. его пока дают скачивать без танцев с бубном.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

ну, небольшие танцы там иногда с получением лицензии бывают, но в этом случае письменный запрос в течение суток обрабатывают и присылают файлик
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Да, под STM8 есть лишь один свободный компилятор - SDCC.
Настойчиво советую выкинуть мастдайку и разрабатывать, пользуясь исключительно свободным ПО. Все равно в ближайшем будущем за использование проприетарщины в бюджетных учреждениях будут штрафовать.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Ответить

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