Например TDA7294

Форум РадиоКот • Просмотр темы - STM32. Проблема с кнопкой - кнопка не реагирует.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 19:29:13

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Пт янв 27, 2017 21:21:06 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
Всем здрасти.
Подскажите, бьюсь уже неделю, победить не могу:
Приобрел STM32L152 Discovery.
Зажигать светодиоды научился, мигать тоже.
Проблема с кнопкой - кнопка не реагирует.

RCC->AHBENR...подали тактирование
GPIOB->MODER...6 и 7 пин на выход
GPIOA->MODER...1 пин на вход
GPIOB->PUPDR...push-pull pull-up
GPIOA->PUPDR...push-pull pull-up
if (GPIOA->IDR&0x01U)
{горит левый LED}
else
{горит правый LED}

Программа на кнопку не реагирует. Если проинвертировать условие то диоды горят наоборот.
Проект собирал в кокосе.
Из всех примеров на эту CPU с копкой в интернете нашел только один, но там кнопка задействована через EXTI.
Из референс мануала не похоже, что надо через прерывания опрашивать кнопку, все должно работать через I/O input.

В чем моя ошибка, подскажите пожалуйста.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Пт янв 27, 2017 22:09:46 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 09, 2011 23:05:37
Сообщений: 450
Откуда: СССР
Рейтинг сообщения: 0
Код:
#define GPIO_IDR_IDR_1    ((uint32_t)0x00000002)


Вы проверяете pin_0

Код:
if (GPIOA->IDR & GPIO_IDR_IDR_1)
{
    горит левый LED
}
else
{
    горит правый LED
}

_________________
Иван Сусанин - первый полупроводник :solder:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Сб янв 28, 2017 08:09:23 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
Прошу прощения, не правильно расписал инициализации. Пин 1 имелось ввиду первая нога порта. Светодиоды висят на PB6 PB7 а кнопка на PA0. Соответственно все инициализируется правильно и проверяется тоже.
В отладчика по шагам все проходит правильно, условие проверяется. Но вот нажатие на кнопку ничего не даёт.

Пришла в голову мысль, что может это только для low power контроллеров?

При разборке кода других семейств, там такого не встречал. Данные считываются с порта сразу.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Сб янв 28, 2017 13:33:14 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Код целиком выложите...


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Сб янв 28, 2017 19:02:05 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
Досикус, спасибо.
Стал копировать код и увидел, что порт А не тактируется. Добавил бит и все заработало.
Ошибку искал в другом месте. тк разбираясь с проблемой кнопку цеплял и на порт B так же.
#include "stm32l1xx.h"
int main(void)
{

RCC->AHBENR |= (RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOAEN);


GPIOB->MODER |= GPIO_MODER_MODER6_0;
GPIOB->MODER |= GPIO_MODER_MODER7_0;
GPIOA->PUPDR|=GPIO_PUPDR_PUPDR0_0;
GPIOB->PUPDR|=GPIO_PUPDR_PUPDR6_0;
GPIOB->PUPDR|=GPIO_PUPDR_PUPDR7_0;

while(1)
{
if(!(GPIOA->IDR & 0x01U))
{
GPIOB->BSRRH|=GPIO_BSRR_BS_6;
GPIOB->BSRRL|=GPIO_BSRR_BS_7;
}else{
GPIOB->BSRRH|=GPIO_BSRR_BS_7;
GPIOB->BSRRL|=GPIO_BSRR_BS_6;
}
}
}

Добавлено after 8 minutes 16 seconds:
Для тех, кто только учится:
AHBENR - включаем порт A и B (подаем тактирование)
MODER - настраиваем вход/выход. Порт А не указан по той причине, что он по умолчанию настроен на вход.
PUPDR - включаем подтяжку.
IDR - считываем кнопку (читается весь порт!)
BSRRH и BSRRL - 32 битный регистр BSRR для установки/сброса значения в порт.
Можно использовать и ODR, но через BSSR делать быстрее, не надо читать значение порта.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Сб янв 28, 2017 19:35:28 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
В BSRRx не надо делать RMW, сразу записывайте значение.
Не |= а =


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Сб янв 28, 2017 23:55:49 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 09, 2011 23:05:37
Сообщений: 450
Откуда: СССР
Рейтинг сообщения: 0
Удобнее когда BSRR определен как один 32-разрядный регистр. Тогда можно делать так:

Код:
GPIOB->BSRR = !(GPIOA->IDR & GPIO_IDR_IDR_0) ? GPIO_BSRR_BR_6 | GPIO_BSRR_BS_7 : GPIO_BSRR_BS_6 | GPIO_BSRR_BR_7;


Вместо:

Код:
if (!(GPIOA->IDR & 0x01U))
{
    GPIOB->BSRRH|=GPIO_BSRR_BS_6;
    GPIOB->BSRRL|=GPIO_BSRR_BS_7;
}
else
{
    GPIOB->BSRRH|=GPIO_BSRR_BS_7;
    GPIOB->BSRRL|=GPIO_BSRR_BS_6;
}

_________________
Иван Сусанин - первый полупроводник :solder:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Вс янв 29, 2017 07:19:43 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
Спасибо, учту. Ещё много но не знаю. С выучил за новогодние праздники, так что строго не судите


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Вс янв 29, 2017 10:32:01 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Код:
GPIOB->BSRR = !(GPIOA->IDR & GPIO_IDR_IDR_0) ? GPIO_BSRR_BR_6 | GPIO_BSRR_BS_7 : GPIO_BSRR_BS_6 | GPIO_BSRR_BR_7;

Vdun, лучше не делать подобных конструкций на этапе изучения.
Код от этого не уменьшится, зато мозг вам затрахает при отладке.


Код:
if (!(GPIOA->IDR & 0x01U))
{
    GPIOB->BSRRH|=GPIO_BSRR_BS_6;
    GPIOB->BSRRL|=GPIO_BSRR_BS_7;
}
else
{
    GPIOB->BSRRH|=GPIO_BSRR_BS_7;
    GPIOB->BSRRL|=GPIO_BSRR_BS_6;
}



Здесь выгодней заменять на макросы
Код:
 
#define KEY     GPIOA->IDR & 0x01UL
#define LED_GREEN_ON  GPIOB->BSRRH=GPIO_BSRR_BS_6
#define LED_GREEN_OFF  GPIOB->BSRRL=GPIO_BSRR_BS_6

#define LED_BLUE_ON  GPIOB->BSRRH=GPIO_BSRR_BS_7
#define LED_BLUE_OFF  GPIOB->BSRRL=GPIO_BSRR_BS_7


В итоге код становится читаем и самодокументируемым :


Код:
if (!(KEY))
{
    LED_GREEN_ON;
    LED_BLUE_OFF ;
}
else
{
   LED_BLUE_ON;
   LED_GREEN_OFF;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Вс янв 29, 2017 12:16:44 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
To Мурзик.
Проблема в том, что BSRR в кокосе не определен.
есть два регистра H и L.
поэтому Ваш вариант не работает.

To Досикус
Согласен, что так проще и удобнее, но как я и говорил, Си только начал осваивать, поэтому многие структуры еще не понятны )))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Вс янв 29, 2017 12:44:27 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Спрашивайте, поможем чем сможем :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32. Проблема с кнопкой - кнопка не реагирует.
СообщениеДобавлено: Вс янв 29, 2017 14:03:15 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 09, 2011 23:05:37
Сообщений: 450
Откуда: СССР
Рейтинг сообщения: 0
Если не определен, значит надо определить :)))

Код:
#define GPIOB_BSRR    (*((__IO uint32_t*)&GPIOB->BSRRL))

GPIOB_BSRR = !(GPIOA->IDR & GPIO_IDR_IDR_0) ? GPIO_BSRR_BR_6 | GPIO_BSRR_BS_7 : GPIO_BSRR_BS_6 | GPIO_BSRR_BR_7;

_________________
Иван Сусанин - первый полупроводник :solder:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Валерьян и гости: 27


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y