stm32 cubeide два инкремента не совместимы.

Кто любит RISC в жизни, заходим, не стесняемся.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

Ну вы профи .А я аматор.Я так понял как бороться против дребезга контактов.Кстати лучше в меню переключения происходят.
Реклама
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: stm32 cubeide два инкремента не совместимы.

Сообщение AVI-crak »

Иван, у тебя по условию должно получится 200 нулей и единиц, даже с тем самым дребезгом и длинными паузами. Отчего смысл антидребезга полностью аннулируется.
Ну нет у тебя его.
В моём варианте считается 255 единиц (или нулей) подряд, если кнопка искрит - то счётчик сбрасывается на ноль. Время удержания кнопки всегда ровно 256мс.
Код проще выполнять в прерывании таймера 1мс.
При долгом удержании будет повторное нажатие каждые 256мс.
Реклама
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

Делал я в прерывании правда не 1 мс а 10.Но меню не переключалось?.Тогда я в основном цикле добавил задержку 10 мсек.Вот тогда всё переключалось.А почему так я не знаю.Вы имеете ввиду что кнопку вписывать в обработчик прерывания?Так я так и сделал.В чем дело я так и не понял.В AVR немного по другому.?

Добавлено after 4 minutes 16 seconds:
Правда я там настраивал на режим compare.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 cubeide два инкремента не совместимы.

Сообщение VladislavS »

Ну что, показать как кнопку проще всего сделать? Правда, немного с плюсами, но там лайт.
Реклама
Эиком - электронные компоненты и радиодетали
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

Нет просто для прерывания нужно код переделывать
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 cubeide два инкремента не совместимы.

Сообщение VladislavS »

Ну нет так нет. А у меня как раз с прерыванием.
Реклама
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

Вы хотите поделится? Кодом.Меня учили.Дают бери.Бьют-беги.Я не против.

Добавлено after 59 seconds:
Так существует симулятор для stm32?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 cubeide два инкремента не совместимы.

Сообщение VladislavS »

А то в жадины записали... Пользуйтесь!

Класс кнопки. С антидребезгом и настройкой нажатия по "1" или "0".
Спойлер

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

template <typename TPin, bool invert=false>
struct TKey final
{
  bool pressed() { return key_pressed?key_pressed=false,true:false; }
  inline void Scan()
  {
    if (bool state=TPin::read(); prev_state!=state)
    {
      if(!state==invert) key_pressed = true;
      prev_state = state;
    }
  };
private:
   volatile bool key_pressed = false;
   volatile bool prev_state = invert;
};
Пример использования. Кто знает как сделать проще - делитесь тоже.

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

using LED = TLed<GPIO::PA5>;
using Key = TKey <GPIO::PC13>;

Key key;

int main()
{
  for(;;)
  {
    if(key.pressed())
      LED::Toggle();
  }
}

void SysTick_Handler()
{
  key.Scan();
}
Сопутствующие классы. Упрощённо, без оптимизаций, чисто чтобы пример собирался.
СпойлерLED

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

template <typename TPin, bool invert=false>
struct TLed final
{
  static inline void On()  { invert ? TPin::clear() : TPin::set(); }
  static inline void Off() { invert ? TPin::set() : TPin::clear(); }
  static inline void Toggle() { TPin::toggle(); }
  static inline bool Read() { return invert ? !TPin::read() : TPin::read(); }
  inline TLed& operator=(bool state)
  {
    if(state) On(); else Off();
    return *this;
  }
  inline operator bool() const { return Read(); }
};
Пины

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

namespace SimpleSTM32Pin
{

template<uint32_t pGPIO, uint32_t Pin>
struct TPin final
{
  static inline void set()   { base()->BSRR = pin_mask; }

#if (defined(GPIO_BRR_BR0) && (GPIO_BRR_BR0!=GPIO_BSRR_BR0)) // Есть ли BRR?
  static inline void clear()
  {
    base()->BRR = pin_mask;
  }
#else
  static inline void clear()
  {
    *((volatile uint16_t*)&base()->BSRR + 1) = pin_mask;
  }
#endif

  static inline void toggle(){ if (base()->ODR & pin_mask) clear(); else set(); }

  static inline void write(bool data)
  {
    base()->BSRR = (pin_mask << 16) | (data ? pin_mask : 0);
  }

  static inline bool read() { return base()->IDR & pin_mask; }

  inline TPin& operator=(const TPin& pin)
  {
    write(pin.read());
    return *this;
  }

  inline TPin& operator=(bool value)
  {
    write(value);
    return *this;
  }

  inline operator bool() const { return read(); }

private:
  static constexpr uint32_t pin_mask = 1UL << Pin;
  static constexpr auto base() { return (GPIO_TypeDef*)pGPIO; }

};

} //namespace SimpleSTM32Pin

#define MAKE_16PINS(PORT_NAME) \
using P##PORT_NAME##0  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,0>; \
using P##PORT_NAME##1  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,1>; \
using P##PORT_NAME##2  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,2>; \
using P##PORT_NAME##3  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,3>; \
using P##PORT_NAME##4  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,4>; \
using P##PORT_NAME##5  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,5>; \
using P##PORT_NAME##6  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,6>; \
using P##PORT_NAME##7  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,7>; \
using P##PORT_NAME##8  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,8>; \
using P##PORT_NAME##9  = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,9>; \
using P##PORT_NAME##10 = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,10>; \
using P##PORT_NAME##11 = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,11>; \
using P##PORT_NAME##12 = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,12>; \
using P##PORT_NAME##13 = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,13>; \
using P##PORT_NAME##14 = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,14>; \
using P##PORT_NAME##15 = SimpleSTM32Pin::TPin<(uint32_t)GPIO##PORT_NAME##_BASE,15>;

namespace GPIO
{

#ifdef GPIOA
MAKE_16PINS(A)
#endif

#ifdef GPIOB
MAKE_16PINS(B)
#endif

#ifdef GPIOC
MAKE_16PINS(C)
#endif

#ifdef GPIOD
MAKE_16PINS(D)
#endif

#ifdef GPIOE
MAKE_16PINS(E)
#endif

#ifdef GPIOF
MAKE_16PINS(F)
#endif

#ifdef GPIOG
MAKE_16PINS(G)
#endif

#ifdef GPIOH
MAKE_16PINS(H)
#endif

#ifdef GPIOI
MAKE_16PINS(I)
#endif

#ifdef GPIOK
MAKE_16PINS(K)
#endif

} //namespace GPIO
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

А обычный таймер использовать.Прерывание по таймеру.

Добавлено after 2 minutes 13 seconds:
Владислав слишком заумно.Для буржуев пишите.И для профи.Я не отношусь ни к тем ни к другим.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 cubeide два инкремента не совместимы.

Сообщение VladislavS »

Какая разница какой таймер? Любой, лишь бы тикал с нужной частотой - примерно 100 Гц плюс/минус.
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32 cubeide два инкремента не совместимы.

Сообщение tonyk »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4175634#p4175634"]Так существует симулятор для stm32?[/uquote]
Давно в Proteus есть.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 cubeide два инкремента не совместимы.

Сообщение VladislavS »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4175655#p4175655"]Для буржуев пишите.[/uquote]Каких таких буржуев? У меня даже комментарии на русском :)
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

Какая версия.Я пытался установить .У меня только устанавливается 7.7.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 cubeide два инкремента не совместимы.

Сообщение VladislavS »

Лучший симулятор - живой чип. Какую-нибудь nucleo-g474 простенькую купите и сможете что угодно отлаживать.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: stm32 cubeide два инкремента не совместимы.

Сообщение linkov1959 »

ivan dimir, на F103 и F401 есть с ограничениями, а смысл? Лучше в отладчике на реальном железе.
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32 cubeide два инкремента не совместимы.

Сообщение tonyk »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4175665#p4175665"]Какая версия.Я пытался установить .У меня только устанавливается 7.7.[/uquote]
Вложения
Screenshot_366.jpg
(147.86 КБ) 60 скачиваний
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Dimon456 »

tonyk писал(а):Давно в Proteus есть.
Протеус 8.10 SP3 чип F103, флаг USART_SR_TC не так обрабатывается как в железе, прерывание IDLEIE вообще отсутствует, ну ни как не хочет срабатывать, а в железе срабатывает.
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32 cubeide два инкремента не совместимы.

Сообщение tonyk »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4175677#p4175677"]ivan dimir, на F103 и F401 есть с ограничениями, а смысл? Лучше в отладчике на реальном железе.[/uquote]
ИМХО, лучше взять Нуклию или Дискавери с МК, имеющим побольше ОЗУ и грузить программу в ОЗУ. Это и быстро, и ресурс флэш сберегается.
Если уж ivan dimir не может дашит осилить, то где уж ему читать и вникать в ограничения симулятора, которые описаны в отдельном файле. Я ему эту картинку из Протеза напоглумиться показал, а то достала эту пустая болтовня. Причём удивляет то, что все вопросы, которые он задаёт, в пыль разжёваны в статьях в Инете, причём по-русски.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Dimon456 »

Судя по этому видео там вполне нормальный отладчик.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

которые он задаёт, в пыль разжёваны в статьях в Инете, причём по-русски.[/uquote]

Есть маленькая проблемка.Я не русский.Но не молдован.
Ответить

Вернуться в «ARM»