Помогите новичку разобраться с stm32f0

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Родился
Сообщения: 4
Зарегистрирован: Вт июн 25, 2013 09:01:54

Сообщение azslavik »

Добрый день.

Сначала о том что использую:

Плату дискавери с stm32f0 на борту
Пишу в блокноте, компилирую в командной строке (использую make файл)

Компилируется и прошивается нормально. Примеры с миганием светодиода прошли на ура.

Но когда попробовал следующий пример ( из примера были взяты только команды цикла, так как gpio был уже настроен), то он не сработал.

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


#include "stm32f0xx.h"

int main(void)
{
   RCC->AHBENR |= RCC_AHBENR_GPIOCEN;

   GPIOC->MODER |= GPIO_MODER_MODER8_0;
   GPIOC->MODER &= ~GPIO_MODER_MODER8_1;
   GPIOC->OTYPER &= ~GPIO_OTYPER_OT_8;
   GPIOC->PUPDR &= ~GPIO_PUPDR_PUPDR8;
   GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8;

   GPIOC->MODER |= GPIO_MODER_MODER9_0;
   GPIOC->MODER &= ~GPIO_MODER_MODER9_1;
   GPIOC->OTYPER &= ~GPIO_OTYPER_OT_9;
   GPIOC->PUPDR &= ~GPIO_PUPDR_PUPDR9;
   GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9;

   GPIOC->MODER &= ~GPIO_MODER_MODER4; // Кнопка - на вход.
   GPIOC->PUPDR |=  GPIO_PUPDR_PUPDR4_1;
   GPIOC->PUPDR &= GPIO_PUPDR_PUPDR4_0;
   GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9;

   while(1)
      {
         if    ((GPIOC->IDR & GPIO_IDR_4))
		   {GPIOC->BSRR=GPIO_BSRR_BS_8; GPIOC->BSRR=GPIO_BSRR_BR_9;}
         else   {GPIOC->BSRR=GPIO_BSRR_BS_9; GPIOC->BSRR=GPIO_BSRR_BR_8;}
      }

}

Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

может так:

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

 {GPIOC->BSRR |= GPIO_BSRR_BS_8; GPIOC->BSRR |= GPIO_BSRR_BR_9;}
 else   {GPIOC->BSRR |= GPIO_BSRR_BS_9; GPIOC->BSRR |= GPIO_BSRR_BR_8;}
Реклама
Родился
Сообщения: 4
Зарегистрирован: Вт июн 25, 2013 09:01:54

Сообщение azslavik »

oleg110592 писал(а):может так:

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

 {GPIOC->BSRR |= GPIO_BSRR_BS_8; GPIOC->BSRR |= GPIO_BSRR_BR_9;}
 else   {GPIOC->BSRR |= GPIO_BSRR_BS_9; GPIOC->BSRR |= GPIO_BSRR_BR_8;}
Результат тот же.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Дискавери F0 вроде кнопка на PA0
Изображение
http://hertaville.com/2012/09/01/unders ... io-part-2/
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 4
Зарегистрирован: Вт июн 25, 2013 09:01:54

Сообщение azslavik »

oleg110592 писал(а):Дискавери F0 вроде кнопка на PA0
Изображение
http://hertaville.com/2012/09/01/unders ... io-part-2/
Что мешает, таким же образом подключить кнопку на другой?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

смущает это:
GPIOC->PUPDR |= GPIO_PUPDR_PUPDR4_1;
GPIOC->PUPDR &= GPIO_PUPDR_PUPDR4_0; наверное надо бы GPIOC->PUPDR &= ~GPIO_PUPDR_PUPDR4_0;
получится 10: Pull-down
если есть подтяжка аппаратная - подтяжки можно внутренние отключить:
GPIOС->PUPDR &= ~(GPIO_PUPDR_PUPDR4);
Реклама
Родился
Сообщения: 4
Зарегистрирован: Вт июн 25, 2013 09:01:54

Сообщение azslavik »

Всё немного разобрался.
Для stm32f0 сложно найти примеры.

Просмотрел ещё раз датшит, проверил настройки, всё должно быть правильно.

То что настроено всё верно помог понять пример по ссылке выше.
Правда компилятор ругался на подобную запись: GPIOA->MODER &= ~(GPIO_MODER_MODER0) ;
Без скобок всё нормально. Для чего скобки пока не пойму.

А теперь самое главное что же не работало. Убедившись что всё написано правильно начал проверять все элементы цепи. И, оказалось что резистор, соединяющий с gnd не рабочий.

Проверил остальные купленные резисторы, нашёл ещё 2а. Грустно. Даже в голову не могло прийти что недавно купленный элемент может быть не рабочим.

Простите Мне Мою неопытность. Буду учиться дальше.

Спасибо за помощь.
Ответить

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