Страница 1 из 1

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

Добавлено: Вс июн 15, 2014 19:46:40
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;}
      }

}


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

Добавлено: Пн июн 16, 2014 07:02:46
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;}

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

Добавлено: Пн июн 16, 2014 08:42:56
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;}
Результат тот же.

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

Добавлено: Пн июн 16, 2014 09:54:19
oleg110592
Дискавери F0 вроде кнопка на PA0
Изображение
http://hertaville.com/2012/09/01/unders ... io-part-2/

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

Добавлено: Пн июн 16, 2014 10:43:05
azslavik
oleg110592 писал(а):Дискавери F0 вроде кнопка на PA0
Изображение
http://hertaville.com/2012/09/01/unders ... io-part-2/
Что мешает, таким же образом подключить кнопку на другой?

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

Добавлено: Пн июн 16, 2014 11:57:22
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);

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

Добавлено: Пн июн 16, 2014 20:33:19
azslavik
Всё немного разобрался.
Для stm32f0 сложно найти примеры.

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

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

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

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

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

Спасибо за помощь.