stm32 cubeide два инкремента не совместимы.
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Re: stm32 cubeide два инкремента не совместимы.
Ну вы профи .А я аматор.Я так понял как бороться против дребезга контактов.Кстати лучше в меню переключения происходят.
- Реклама
- AVI-crak
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Сб янв 09, 2016 15:51:17
- Контактная информация:
Re: stm32 cubeide два инкремента не совместимы.
Иван, у тебя по условию должно получится 200 нулей и единиц, даже с тем самым дребезгом и длинными паузами. Отчего смысл антидребезга полностью аннулируется.
Ну нет у тебя его.
В моём варианте считается 255 единиц (или нулей) подряд, если кнопка искрит - то счётчик сбрасывается на ноль. Время удержания кнопки всегда ровно 256мс.
Код проще выполнять в прерывании таймера 1мс.
При долгом удержании будет повторное нажатие каждые 256мс.
Ну нет у тебя его.
В моём варианте считается 255 единиц (или нулей) подряд, если кнопка искрит - то счётчик сбрасывается на ноль. Время удержания кнопки всегда ровно 256мс.
Код проще выполнять в прерывании таймера 1мс.
При долгом удержании будет повторное нажатие каждые 256мс.
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Re: stm32 cubeide два инкремента не совместимы.
Делал я в прерывании правда не 1 мс а 10.Но меню не переключалось?.Тогда я в основном цикле добавил задержку 10 мсек.Вот тогда всё переключалось.А почему так я не знаю.Вы имеете ввиду что кнопку вписывать в обработчик прерывания?Так я так и сделал.В чем дело я так и не понял.В AVR немного по другому.?
Добавлено after 4 minutes 16 seconds:
Правда я там настраивал на режим compare.
Добавлено after 4 minutes 16 seconds:
Правда я там настраивал на режим compare.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: stm32 cubeide два инкремента не совместимы.
Ну что, показать как кнопку проще всего сделать? Правда, немного с плюсами, но там лайт.
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Re: stm32 cubeide два инкремента не совместимы.
Нет просто для прерывания нужно код переделывать
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: stm32 cubeide два инкремента не совместимы.
Ну нет так нет. А у меня как раз с прерыванием.
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Re: stm32 cubeide два инкремента не совместимы.
Вы хотите поделится? Кодом.Меня учили.Дают бери.Бьют-беги.Я не против.
Добавлено after 59 seconds:
Так существует симулятор для stm32?
Добавлено after 59 seconds:
Так существует симулятор для stm32?
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: stm32 cubeide два инкремента не совместимы.
А то в жадины записали... Пользуйтесь!
Класс кнопки. С антидребезгом и настройкой нажатия по "1" или "0".
Пример использования. Кто знает как сделать проще - делитесь тоже.
Сопутствующие классы. Упрощённо, без оптимизаций, чисто чтобы пример собирался.
Пины
Класс кнопки. С антидребезгом и настройкой нажатия по "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 два инкремента не совместимы.
А обычный таймер использовать.Прерывание по таймеру.
Добавлено after 2 minutes 13 seconds:
Владислав слишком заумно.Для буржуев пишите.И для профи.Я не отношусь ни к тем ни к другим.
Добавлено after 2 minutes 13 seconds:
Владислав слишком заумно.Для буржуев пишите.И для профи.Я не отношусь ни к тем ни к другим.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: stm32 cubeide два инкремента не совместимы.
Какая разница какой таймер? Любой, лишь бы тикал с нужной частотой - примерно 100 Гц плюс/минус.
Re: stm32 cubeide два инкремента не совместимы.
[uquote="ivan dimir",url="/forum/viewtopic.php?p=4175634#p4175634"]Так существует симулятор для stm32?[/uquote]
Давно в Proteus есть.
Давно в Proteus есть.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: stm32 cubeide два инкремента не совместимы.
[uquote="ivan dimir",url="/forum/viewtopic.php?p=4175655#p4175655"]Для буржуев пишите.[/uquote]Каких таких буржуев? У меня даже комментарии на русском 
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Re: stm32 cubeide два инкремента не совместимы.
Какая версия.Я пытался установить .У меня только устанавливается 7.7.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: stm32 cubeide два инкремента не совместимы.
Лучший симулятор - живой чип. Какую-нибудь nucleo-g474 простенькую купите и сможете что угодно отлаживать.
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: stm32 cubeide два инкремента не совместимы.
ivan dimir, на F103 и F401 есть с ограничениями, а смысл? Лучше в отладчике на реальном железе.
Re: stm32 cubeide два инкремента не совместимы.
[uquote="ivan dimir",url="/forum/viewtopic.php?p=4175665#p4175665"]Какая версия.Я пытался установить .У меня только устанавливается 7.7.[/uquote]
- Вложения
-
- Screenshot_366.jpg
- (147.86 КБ) 60 скачиваний
Re: stm32 cubeide два инкремента не совместимы.
Протеус 8.10 SP3 чип F103, флаг USART_SR_TC не так обрабатывается как в железе, прерывание IDLEIE вообще отсутствует, ну ни как не хочет срабатывать, а в железе срабатывает.tonyk писал(а):Давно в Proteus есть.
Re: stm32 cubeide два инкремента не совместимы.
[uquote="linkov1959",url="/forum/viewtopic.php?p=4175677#p4175677"]ivan dimir, на F103 и F401 есть с ограничениями, а смысл? Лучше в отладчике на реальном железе.[/uquote]
ИМХО, лучше взять Нуклию или Дискавери с МК, имеющим побольше ОЗУ и грузить программу в ОЗУ. Это и быстро, и ресурс флэш сберегается.
Если уж ivan dimir не может дашит осилить, то где уж ему читать и вникать в ограничения симулятора, которые описаны в отдельном файле. Я ему эту картинку из Протеза напоглумиться показал, а то достала эту пустая болтовня. Причём удивляет то, что все вопросы, которые он задаёт, в пыль разжёваны в статьях в Инете, причём по-русски.
ИМХО, лучше взять Нуклию или Дискавери с МК, имеющим побольше ОЗУ и грузить программу в ОЗУ. Это и быстро, и ресурс флэш сберегается.
Если уж ivan dimir не может дашит осилить, то где уж ему читать и вникать в ограничения симулятора, которые описаны в отдельном файле. Я ему эту картинку из Протеза напоглумиться показал, а то достала эту пустая болтовня. Причём удивляет то, что все вопросы, которые он задаёт, в пыль разжёваны в статьях в Инете, причём по-русски.
Re: stm32 cubeide два инкремента не совместимы.
Судя по этому видео там вполне нормальный отладчик.
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Re: stm32 cubeide два инкремента не совместимы.
которые он задаёт, в пыль разжёваны в статьях в Инете, причём по-русски.[/uquote]
Есть маленькая проблемка.Я не русский.Но не молдован.
Есть маленькая проблемка.Я не русский.Но не молдован.


