STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
zöner
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

Re: STM32 новичку в ARM что к чему

Сообщение zöner »

где-то не хватает volatile
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

Re: STM32 новичку в ARM что к чему

Сообщение Гуня »

А volatile можно добавлять к функциям? или только к переменным. В отладчике увидел что прерывание по приёму байта срабатывает, а по передаче не срабатывает.. Не знаю, есть ли смысл вылаживать сюда код.

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

#define BUFF_SIZE 1024 //Размер буфферов приёма и передачи

//структура для кольцевого буфера USART
typedef struct
{
   uint8_t BUFFER[BUFF_SIZE]; //сам буфер
   uint32_t head;             //голова
   uint32_t tail;             //хвост
   uint32_t counter;          //счётчик символов, поступивших в буффер
   uint32_t overflow_counter;     //счётчик переполнений буффера

} Uint8_USART_BufferTypeDef;
volatile Uint8_USART_BufferTypeDef USART1_TX, USART1_RX; //буферы приема и передачи УАРТ1
volatile uint32_t tx_flag = 1; //1 - готов к передаче 0 - передаю

//********************************************************************************
//Общий вектор для приёма и передачи  USART1                                    //
//********************************************************************************
void USART1_IRQHandler(void)
{
 //Если прерывание возникло по приёму байта
  if((USART1->SR & USART_SR_RXNE)!=0)
  {
     if(USART1_RX.counter < BUFF_SIZE)
     {
       USART1_RX.BUFFER[USART1_RX.tail] = USART1->DR;
       USART1_RX.counter++;
       USART1_RX.tail++;
       if(USART1_RX.tail == BUFF_SIZE) USART1_RX.tail = 0;
     }
     USART_ClearITPendingBit(USART1, USART_IT_RXNE);

  }

  //Если по завершению передачи
  if((USART1->SR & USART_SR_TC)!=0)
  {
   USART1->SR &=  ~USART_SR_TC;                      //очистить флаг
    if(USART1_TX.counter > 0)
    {
       USART1->DR = USART1_TX.BUFFER[USART1_TX.head];
       USART1_TX.counter--;
       USART1_TX.head++;
       if(USART1_TX.head == BUFF_SIZE) USART1_TX.head = 0;

    }
    else tx_flag = 1;
  }

}

uint32_t USART1_getchar(uint8_t *byte)
{
   if(USART1_RX.counter == 0) return 0; //ждем приёма байта
   else
   {
     *byte = USART1_RX.BUFFER[USART1_RX.head];
     USART1_RX.BUFFER[USART1_RX.head++] = 0;
     USART1_RX.counter--;
     if(USART1_RX.head == BUFF_SIZE) USART1_RX.head = 0;
     return 1;
   }


}

void USART1_putchar(uint8_t c)
{
   //если сейчас HE передается байт
   if( tx_flag )
   {
      USART1->DR = c; //записываем данные прямо в регистр
      tx_flag = 0;   //и обнуляем флаг
   }
   else
   {
      if(USART1_TX.counter < BUFF_SIZE)
            {
                 __disable_irq ();
               USART1_TX.BUFFER[USART1_TX.tail] = c;

               USART1_TX.counter++;

               USART1_TX.tail++;
               if(USART1_TX.tail == BUFF_SIZE) USART1_TX.tail = 0;
               __enable_irq();
            }
   }
}

Функция приёма байта возвращает 1 если данные есть и 0 если их нету. а сам байт данных записывает через указатель
а в while(1) у меня такая строчка

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

if( USART1_getchar(&byte) )  {  USART1_putchar(byte); } //Если есть байт данных - отправляем его-же в ответ
Аватара пользователя
Kvasshtain
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Ср фев 09, 2011 13:29:01
Откуда: г.Саратов

Re: STM32 новичку в ARM что к чему

Сообщение Kvasshtain »

Коты, помогите пожалуйста. Уже третий день бьюсь над stm32f0discovery из под EWARM. Хот ты тресни, ни как не хочет работать. При попытке загрузки программы выдает что-то типа Fatal error: This driver is only for ARM Cortex M devices. Session aborted! Я что-то напутал с flashloader-ом, но что не пойму? Кто нибудь исползует эту плату из под EWARM? Поделитесь опытом, пожалуйста.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Аватара пользователя
oleg63m
Друг Кота
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение oleg63m »

Kvasshtain писал(а):Уже третий день бьюсь

А STK-500 уже добил?
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Kvasshtain писал(а):Поделитесь опытом, пожалуйста.


Что у тебя на этих вкладках?

Изображение
Изображение
Аватара пользователя
Kvasshtain
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Ср фев 09, 2011 13:29:01
Откуда: г.Саратов

Re: STM32 новичку в ARM что к чему

Сообщение Kvasshtain »

Спасибо Dosikus за ответ :beer: . Настраивал все как говорится здесь http://we.easyelectronics.ru/STM32/stm3 ... tarta.html
с той лишь разницей, что у меня STM32F051.
Балбес – я. Уважаемые мои Коты. У меня почему то слетела вкладка, где указывается целевое устройство. А я не посмотрел, что она слетела, хотя ее настраивал. Так что, у меня все заработало. Вот только теперь новые вопросы появились. Прочитав статьи на easyelectronics. Я попробовал сделать тоже самое (поморгать светодиодами), но только у них там все под STM32F10xxx. А у меня то – STM32F051. Скачав CMSIS, под свой контроллер я обнаружил, что у меня все по другому называется (в смысле название регистров – полей структуры). Долго куря заголовочные файлы, я тактирование на порту вроде бы запустил (хотя это я так думаю :roll: ), но как настроить порты на push-pull output я так понять и не смог. Так вот главный вопрос. Где посмотреть описание на CMSIS для моего родного STM32F051? Где лежит сея чудо PDF-ка? И где взять хотя бы элементарные примеры для F051.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Аватара пользователя
Kvasshtain
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Ср фев 09, 2011 13:29:01
Откуда: г.Саратов

Re: STM32 новичку в ARM что к чему

Сообщение Kvasshtain »

Народ. Еще не подскажите что означает вот такой код:

#define A ((B *) C)

, где A,B,C – это какие то регистры STM-ки. Особенно странна комбинация символов *). Я в Сях не особо силен, и такого раньше не встречал.

И еще вопрос по поводу символов * и & после идентификатора стоящие без пробела, например a* или a&. Это просто часть названия идентификаторов, умножение или что-то еще. Спрашиваю, по тому что если они стоят до идентификатора, то первый символ это содержимое ячейки памяти, а второй – адрес переменной или константы, как я помню. Может я что-то не знаю в Сях.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Kvasshtain писал(а):Спасибо Dosikus за ответ :beer: . Настраивал все как говорится здесь http://we.easyelectronics.ru/STM32/stm3 ... tarta.html


Забудь про ту статью , она устарела как говно мамонта .
И в данной ситуации тебе проще начать с Keil .
Создай ветку здесь http://kazus.ru/forums/forumdisplay.php?f=34 помогу .
Аватара пользователя
Kvasshtain
Нашел транзистор. Понюхал.
Сообщения: 170
Зарегистрирован: Ср фев 09, 2011 13:29:01
Откуда: г.Саратов

Re: STM32 новичку в ARM что к чему

Сообщение Kvasshtain »

Спасибо за ссылку. Там и впрямь много интересного. И публика там вроде бы продвинутая в этих вопросах. Полазаю там маленько. Хочу еще сказать, что у меня все заработало. Я даже светодиодами смог помигать. Дальше буду глубже копать в сторону усложнения и совершенствования моих самоделок.
Говорят, что у него нет носа и рта, и что он общается телепатией. Говорят, что у него зеленая кожа, и он питается как растение, закопав ноги в землю и подставив спину солнцу. Все что знаем мы: его зовут Вовэн.
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Re: STM32 новичку в ARM что к чему

Сообщение balmer »

Kvasshtain писал(а):Может я что-то не знаю в Сях.


По видимому вы плохо понимаете что такое указатели.
(B*)C - это приведение указателя к другому типу.
&C - взятие адреса переменной.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Kvasshtain, лучше будет если приведешь здесь конструкцию целиком .
Подозреваю что это дефайны определения адресов из хэдера от STM .
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: STM32 новичку в ARM что к чему

Сообщение pokk »

Подскажите какой уровень выходного сигнала. PA10 PA9 5 вольт или 3 вольта ?

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

    /* Configure USART1 Rx (PA10)                         */
      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      //GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

      /* Configure USART1 Tx (PA9) as alternate function            */
      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
      //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);


Суда по даташиту написано FT 5 V tolerant I/O. но как его настроить ?
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Re: STM32 новичку в ARM что к чему

Сообщение balmer »

FT 5 V tolerant I/O - это входные параметры. То есть можно подать на эти пины 5V напряжение, а микросхема будет работать в штатном режиме.

Выходной сигнал - он всегда по уровню питания микросхемы в Push-Pull варианте. Можно конечно настроить PullDown и резистор к 5 V поставить внешний, но тогда будет очень медленно переключаться пин.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение Аlex »

balmer писал(а):Можно конечно настроить PullDown и резистор к 5 V поставить внешний
Open-Drain наверное :) PullDown относится к настройке на вход, а не на выход.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Аlex писал(а):Open-Drain наверное :)


Здесь, однозначно да .

Аlex писал(а): PullDown относится к настройке на вход, а не на выход.


Не у всех . У более продвинутых F4, F3, F0 имеются pullup и pulldown доступные во всех режимах.
Только не говори - накуа . :)))
Ситуация такая :
практически полностью аппаратный выхлоп на SPI через DMA , необходимо отключать SPI по окончанию трансфера и в этот самый промежуток пины получаются висящими в воздухе . Задействовал pulldown - все шоколадно....
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

Re: STM32 новичку в ARM что к чему

Сообщение The_D »

dosikus писал(а): необходимо отключать SPI по окончанию трансфера и в этот самый промежуток пины получаются висящими в воздухе . Задействовал pulldown - все шоколадно....


А еще можно предусмотреть подтяжку к земле через 10к внешний резистор. И ничего никогда в воздухе висеть не будет.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

The_D писал(а):
А еще можно предусмотреть подтяжку к земле через 10к внешний резистор. И ничего никогда в воздухе висеть не буде


А еще бывает что даже утечка через pulldown 10к критична(причем их 4) . И встроенную можно отключать ,
а припаянный намертво резистор попробуй, советчик. :)))
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

Re: STM32 новичку в ARM что к чему

Сообщение The_D »

1,5ма? Неужели критично? Мобильное использование?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

The_D писал(а):1,5ма? Неужели критично? Мобильное использование?


Типа того. :)))
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Re: STM32 новичку в ARM что к чему

Сообщение balmer »

Аlex писал(а):Open-Drain наверное.


Да, конечно же Open-Drain. Постараюсь больше по памяти всякой фигни не писать.

The_D писал(а):1,5ма? Неужели критично?


В современных устройствах 1.5 мА - это очень много. Это-ж можно 3-4 ОУ запитать. Или например STM32L потребляет 214 μA/MHz Run mode. То есть на частоте 4 МГц с работающим внешним кварцем как раз получится примерно 1.5 мА.
Ответить

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