GPIO не отзывается.. STM32VLDISCOVERY

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение oleg110592 »

таки холивар
ЛеонидК писал(а):Освоишь SPL и пойдешь дальше.

лучше почитать вначале что люди пишут...
Изображение
Изображение
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение HHIMERA »

ЛеонидК писал(а):Наглядно, то что понятно.
GPIO_ResetBits(GPIOC, GPIO_Pin_8); // Понятно и без объяснения и чтения литературы

Ненаглядно... и непонятно... подход а ля КодэНедоВижен...
Зачем эта обёртка... если она ничего не решает??? Уже через месяц я забуду для чего этот бит сбраывается... :)))
Приведенное тобой я понимаю и пользуюсь сам, но это совсем не очевидно.

Пользуюсь... но не очевидно... или очевидно что пользуюсь??? А другим нельзя??? "Великая тайна есть сие!"(С)...
Твои рассуждения не более чем надувание щек.

Вообще... это абстракция... "великая и могучая"... для непосвящённых с впалыми щеками...
LED_BLUE_ON даже в Африке "включить синий светодиод"... независимо от МК и платформы... 8)

========
oleg110592 писал(а):лучше почитать вначале что люди пишут...

Да иногда лучше и не читать... а то на элхе... после SPL в МК таинственный ремап пинов заводится... вот такая SPL-чертовщина...
Почти как "Ночь перед Рождеством"...
"Я не даю готовых решений, я заставляю думать!"(С)
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

HHIMERA!
1. Обертка и делает код наглядным. Это почти комментарий.
2. То что ты живешь на ЮВ видно сразу, так как не понимаешь значение слова ”очевидно”.
3. Африка убеждает. Я и написал: ”надувание щек”.
Я закончил.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение HHIMERA »

И это радует!!! Остаётся только поздравить всех Дедов от Морозов с наступающим Новым Годом!!!
И пожелать... чтобы в следующем году меньше со мной спорили... по незнанию... своему великому и безмерному... :))) :)))
"Я не даю готовых решений, я заставляю думать!"(С)
karidumo
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вт сен 30, 2014 21:47:05

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение karidumo »

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

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение oleg110592 »

Попробовал код который "не заработал" в GCC, Em::Blocks
Спойлер

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

#include "stm32f10x_conf.h"

void Delay(volatile uint32_t nCount);


GPIO_InitTypeDef GPIO_InitStructure;
void init()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;   //   использовать выводы PC8 и PC9
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //   на выход
    GPIO_Init(GPIOC, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0; //задаем номер вывода, если кнопка подключена, например к 6 порту, то пишем GPIO_Pin_6
   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPD; //порт будет работать как цифровой вход с подтяжкой к земле
   GPIO_Init(GPIOA, &GPIO_InitStructure);
}

volatile int main(void)

{
    init();
    while(1)
    {
      GPIO_WriteBit(GPIOC,GPIO_Pin_9,Bit_SET); //   включить зеленый светодиод, подключенный к Led PC9
      if(GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_0) != 0 )//   Если нажата кнопка PA0
      {
         GPIO_WriteBit(GPIOC,GPIO_Pin_8,Bit_SET);// включить синий светодиод, подключенный к Led PC8
      }
      else
      {
         GPIO_ResetBits(GPIOC, GPIO_Pin_8);   //   погасить синий светодиод, подключенный к Led PC8
      }
      Delay(2000000);
    }
}

//-------
void Delay(volatile uint32_t nCount)
{
    for (; nCount > 0; nCount--);
}

Program size (bytes): 1512
Data size (bytes): 104
BSS size (bytes): 32
Total size (bytes): 1648 (R/W Memory: 136)
Build finished: 0 errors, 0 warnings (0 minutes, 1 seconds)

прошил дискавери - зеленый горит, синий загорается при нажатии кнопки
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

karidumo!
А что не работает? Светодиоды не переключаются? А окончательный код какой?
Код компилируется? Чем Вы загружаете? Как запускаете?
Если это не знать, помочь Вам никто не сможет. Получается: ”поди туда, не знаю куда...”
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение HHIMERA »

karidumo писал(а):А код так и не заработал.... :cry:

"Не STM его сгубило, а ненужный SPL!"(С)...
Пользуясь отсутсвием SPL-"гуру"... видать оливье в тазике дохрюкивают... дам несколько советов...

Кокос вещь сама в себе... своеобразная... Может начать с Кейла или ИАР??? Неправильно собранный проект может привести к чему угодно...

К Дискавери идут различные примеры... может с них и начать??? Как говорится... "привыкнуть, освоится"... там тоже SPL... если что... Потом уже переходить "к водным процедурам"... и самостоятельному плаванию...

Не силён в SPL-извращениях... но слышал краем уха, что не полностью заполненные структуры творят истинные чудеса...
В статье указано...

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

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

В вашем коде первая строчка отсутствует...
Хотя Олег и говорит, что у него код "взлетел"... и не верить ему у меня оснований нет... но мало ли... Кокос всё таки...
"Я не даю готовых решений, я заставляю думать!"(С)
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

HHIMERA
"Рассуждай токмо о том, о чем понятия твои тебе сие дозволяют."
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение HHIMERA »

"Не говорите что мне делать и я не скажу где у вас прописка!"(С)...
Я не собираюсь майданить с вами по поводу SPL... последний спор на ИзыйдиЭлектроникс был похож на избиение SPL-младенцев домашним тапком...
Есть что сказать??? Поставьте Кокос и прогоните пример... иначе "ни о чём"...
"Я не даю готовых решений, я заставляю думать!"(С)
karidumo
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вт сен 30, 2014 21:47:05

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение karidumo »

ЛеонидК писал(а):karidumo!
А что не работает? Светодиоды не переключаются? А окончательный код какой?
Код компилируется? Чем Вы загружаете? Как запускаете?
Если это не знать, помочь Вам никто не сможет. Получается: ”поди туда, не знаю куда...”

Вот ту виснет

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

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
viewtopic.php?p=2223477&sid=989d7964617f9b01458ca82f290ed568#p2223477
Код, компилируется (билд создаётся), и заливается, но плата ни как не реагирует, а во время отладки через стандартный дебагер выснет, на описанном выше месте. :(

Спойлер
oleg110592 писал(а):то ж самое без SPL и с учетом рекомендаций выше - точно так же работает:

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

#include "stm32f10x.h" 

#define LED_BLUE_ON         (GPIOC->BSRR = GPIO_BSRR_BS8)
#define LED_BLUE_OFF        (GPIOC->BSRR = GPIO_BSRR_BR8)
#define LED_GREEN_ON        (GPIOC->BSRR = GPIO_BSRR_BS9)
#define LED_GREEN_OFF       (GPIOC->BSRR = GPIO_BSRR_BR9)
#define BUTTON              (GPIOA->IDR & GPIO_IDR_IDR0)

void init()      //   инициализация
{
   // Выставляем тактирование в APB2
    RCC->APB2ENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA;
    // Конфигурируем CRH и CRL регистры.
    GPIOC->CRH   &= ~(GPIO_CRH_CNF8 | GPIO_CRH_CNF9);   // Режим 00 - output Push-Pull
    GPIOC->CRH |=  (GPIO_CRH_MODE8_1 | GPIO_CRH_MODE9_1); //выход, 2MHz
}

void delay(unsigned long p)      //   задержка
{
   while(p>0){p--;}
}

int main(void)
{
   init();         //   инициализация
   while(1)       //   в бесконечном цикле крутиться программа
   {
      if(BUTTON)//   Если нажата кнопка PA0
      {
         LED_GREEN_ON; //   включить зеленый светодиод, подключенный к Led PC9
      }
      else
      {
         LED_GREEN_OFF;//   погасить зеленый светодиод, подключенный к Led PC9
      }
      LED_BLUE_ON;    //   включить синий светодиод, подключенный к Led PC8
      delay(2000000);
      LED_BLUE_OFF;   //   погасить синий светодиод, подключенный к Led PC8
      delay(2000000);
   }
}

размер программы:
Program Size: Code=468 RO-data=304 RW-data=0 ZI-data=1024
с использованием SPL размер был:
Program Size: Code=728 RO-data=340 RW-data=4 ZI-data=1028

Код запустился, виснет в том же месте, но синий светодиод горит и на нажатие кнопки вообще не реагирует((
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

karidumo!
”Вот тут виснет”.
Там виснуть нечему. Это с компилятором или отладчиком проблема.


// #define LED_BLUE_ON (GPIOC->BSRR = GPIO_BSRR_BS8)
// #define LED_BLUE_OFF (GPIOC->BSRR = GPIO_BSRR_BR8) //не нужно устанавливать весь регистр
// устанавливая бит 8 также установишь и бит 9 и наоборот
#define LED_BLUE_ON GPIOC->BSRR |= GPIO_BSRR_BS8 //установить бит GPIOC.8 а не весь регист
#define LED_BLUE_OFF GPIOC->BSRR |= GPIO_BSRR_BR8 //сбросить бит GPIOC.8
//то же и для GPIOC.9


void init() // инициализация
{
// Выставляем тактирование в APB2
RCC->APB2ENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA;
// Конфигурируем CRH и CRL регистры.
//Сначала нужно обнулить биты, иначе результат может быть не предсказуемым
GPIOC->CRH &= ~(GPIO_CRH_MODE8|GPIO_CRH_MODE9); //очистить разряды MODE
GPIOC->CRH &= ~(GPIO_CRH_CNF8|GPIO_CRH_CNF9); //очистить разряды CNF
GPIOC->CRH |= (GPIO_CRH_MODE8_1|GPIO_CRH_MODE9_1); //выход, 2MHz
GPIOC->CRH &= ~(GPIO_CRH_CNF8|GPIO_CRH_CNF9); //общего назначения, симметричный
// и не забыть кнопку
GPIOA->CRL &= ~GPIO_CRL_MODE0; //очистить разряды MODE
GPIOA->CRL &= ~GPIO_CRL_CNF0; //очистить разряды CNF
GPIOA->CRL |= GPIO_CRL_CNF0_0; //дискретный вход, третье состояние
}
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение oleg110592 »

ЛеонидК писал(а):.....
// #define LED_BLUE_ON (GPIOC->BSRR = GPIO_BSRR_BS8)
// #define LED_BLUE_OFF (GPIOC->BSRR = GPIO_BSRR_BR8) //не нужно устанавливать весь регистр
// устанавливая бит 8 также установишь и бит 9 и наоборот

почему 9 девятый бит то установится? У нас единичка только в одном, восьмом бите:
#define GPIO_BSRR_BS8 ((uint32_t)0x00000100) /*!< Port x Set bit 8 */
0x00000100 = 0b100000000
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

oleg110592!

GPIOC->BSRR = GPIO_BSRR_BS8 меняет весь регистр
GPIO_BSRR_BS8 = 0x00000100
GPIO_BSRR_BS9 = 0x00000200
и конечно
GPIOC->BSRR = GPIO_BSRR_BS8 = 0x00000100
GPIOC->BSRR = GPIO_BSRR_BS9 = 0x00000200
таким образом мы установили бит 8, а следующей командой установили бит 9 и сбросили бит 8.
А если используются и другие биты, то они будут сбрасываться этой командой.

GPIOC->BSRR |= GPIO_BSRR_BS8 устанавливает только 8 бит не меняя другие.
GPIOC->BSRR |= GPIO_BSRR_BR8 сбрасывает бит не меняя другие.
Последний раз редактировалось ЛеонидК Пн янв 05, 2015 21:49:12, всего редактировалось 3 раза.
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

Прошу прощения.
Что-то я напутал.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение oleg110592 »

ЛеонидК писал(а):GPIOC->BSRR = GPIO_BSRR_BS8 меняет весь регистр

не, не меняет
Изображение
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

oleg110592!

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

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение oleg110592 »

какие остальные?
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение HHIMERA »

Да... мне тоже интересно...
"Я не даю готовых решений, я заставляю думать!"(С)
ЛеонидК
Встал на лапы
Сообщения: 85
Зарегистрирован: Чт янв 08, 2009 22:06:13
Откуда: Киев

Re: GPIO не отзывается.. STM32VLDISCOVERY

Сообщение ЛеонидК »

oleg110592!

Если примечание 0 относится ко всем 32 битам, то не меняет, если к BS или BR то меняет.
Я считал второе, но спорить не буду.
А делать буду все равно |=.
Ответить

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