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

Кто любит RISC в жизни, заходим, не стесняемся.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

dosikus писал(а):Зы. "Размерность" нуля - достойна баша ... :)))
Дык! :)
А я ж апчём? :)
С уважением,
Виктор.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

вопрос был не о "размерности нуля" :), а о том как правильнее писать (не только 0):
например:
TIM3->CNT = 0x5A;
или
TIM3->CNT = 0x005A;
или можно и так и так - компилятор разберется. Извиняюсь за глупые вопросы, но тема называется "STM32 новичку в ARM что к чему".
Тут хоть и магические числа, но как то однообразно: http://www.keil.com/forum/20421/
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

Олег... не пугай мэнэ... :))
Начинаем думать... а если число десятичное... что, нельзя??? А если переменная... тогда как???
В данном случае - по сараю... В исключениях там... навскидку... CAN, SPI в STM32F0XX, ДМА и адресация... Там без приведения типов можно интересных глюков наловить...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Ну так, если про нуль забудем . :)))
HHIMERA же привел выжимку из хэдера - что,какой длины :))) .
А если боимся за вменяемость компилятора:

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

 TIM3->CNT = (uint16_t)0x5A;



HHIMERA писал(а):CAN, SPI в STM32F0XX, ДМА и адресация... Там без приведения типов можно интересных глюков наловить...


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

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

Сообщение HHIMERA »

А... да... В упрощённых таймерах некоторые биты в управляющих регистрах TIM по референсу отсутствуют... на самом деле - не всегда... то ли обрезали криво... толи ещё чего... что может привести к чудесам...
Например... если по референсу бит OPM в регистре отсутствует... то его установка... по случайности или злокопипасту... может вырубить таймер...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

не пугаю, после 8 битных непривычно, учусь. В хидерах SPL например постоянно встречается типа такого:

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

#define ADC_Resolution_12b  ((uint32_t)0x00000000)

Стыдно признаться - для десятичных (больших) только недавно "открыл" для себя приставку UL, формула без UL неправильно считалась.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

oleg110592 писал(а):для десятичных (больших)

Надо просто помнить... что "десятичных" это просто форма представления данных... и размерность... по сути... это не определяет... есть только диапазон возможных значений для чисел определённой разрядности...

UL... по сути - приведение данных... для адресации это существенно...
Без UL в NXP... и светодиодом моргнуть может не получиться... :)))
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

А если боимся за вменяемость компилятора

перечитывал недавно наших, так сказать, K&R:
...типы CHAR и INT могут свободно смешиваться в арифметических выражениях: каждая переменная типа CHAR автоматически преобразуется в INT. Это обеспечивает значительную гибкость при проведении определенных преобразований символов.
...
При преобразовании символьных переменных в целые возникает один тонкий момент. Дело в том, что сам язык не указывает, должны ли переменным типа CHAR соответствовать численные значения со знаком или без знака. Может ли при преобразовании CHAR в INT получиться отрицательное целое? К сожалению, ответ на этот вопрос меняется от машины к машине, отражая расхождения в их архитектуре. На некоторых машинах (PDP-11, например) переменная типа CHAR, крайний левый бит которой содержит 1, преобразуется в отрицательное целое ("знаковое расширение"). На других машинах такое преобразование сопровождается добавлением нулей с левого края, в результате чего всегда получается положительное число.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

Олег... да всё уже это разбиралось... вспомни чудеса с signed char и unsigned char...
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
black_lizard
Встал на лапы
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

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

Сообщение black_lizard »

Здравствуйте. Извечный вопрос про SD карты... завалялась тут одна у меня старая на 32 мб и работает она странно.

Подрубаю к аппаратному SPI, инициализирую, все этапы проходит хорошо и даёт нужные ответы. Проблемы начинаются на этапе чтения секторов. Сначала оживляю флешку от простоя:

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

do{
 SD_sendCommand(SEND_OP_COND, 0);
 responce = SD_sendCommand(SEND_OP_COND, 0); //activate card's initialization process
}while(responce && ++retry< 0xfffe);
 if (retry == 0xfffe)
  return 1;

(после 5 мс уходит в спящее состояние)
Из цикла вылезают коды 130, 130, 0, 4 и на следующих двух нулях она запускается. Пропускает 0x51 на отрисовку блока. Возвращает код 0, а потом и 0xfe. А дальше - выдаёт не сектор с флешки, а набор ошибок, 0, 63, 4, 255, 0, 0, 0, 0 и так это повторяется все 512 байт.

Если один раз послать 0x01 для возврата из спячки, а не парно, то она поступает ещё гениальнее и хитрее: сначала возвращает код 0, мол, проснулась, а на код отрисовки присылает 4 - неизвестная команда.

Много чего перепробовал и так и не смог заставить её работать. А вот ноутбук каким-то образом её открывает. Если кто-то сталкивался - подскажите.

Проблема решена
Собираю самопальный мини-компьютер
crown20i
Родился
Сообщения: 1
Зарегистрирован: Вт апр 08, 2014 06:31:45

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

Сообщение crown20i »

Привет всем! Есть вопрос, строил одну приблуду на базе STM32F0DISCOVERY с процом STM32F051R8T6. Всё отлично работало, после того как решил собрать устройство с нуля, то столкнулся с такой проблемой. приходится каждый раз при подаче питания, касаться выводом NRST на массу, иначе работать не начнёт. Подскажите в чём дело? почему на отладочной плате всё работает, а на отдельной плате уже без ресета не работает?
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Причины могут быть разные, у меня точно такое же поведение было вызвано неинициализированным полем структуры. Дело в том, что локальные переменные, которые располагаются в стеке, будут принимать разные начальные значения при включении питания и после сброса, когда памятью уже кто-то попользовался. Описал здесь: http://leoniv.livejournal.com/194021.html
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

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

Всем доброго времени суток! Пытаюсь настроить таймер 2 на stm32f207zgt6 на прерывания по переполнению, 1000 раз в секунду! интервал получается верный, но таймер то работает, то входит в прерывание один раз, а потом больше туда не заходит... не знаю в чем проблема. вот код

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

void TIM2_IRQHandler(void) 
{
  if(TIM_GetITStatus(TIM2, TIM_IT_Update)!= RESET)
  {
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    if(tim_counter) { tim_counter--; }
    //else if(DiscreateIO::pObject) { DiscreateIO::pObject->write_discrio_data(); }
    GPIOB->ODR ^= GPIO_Pin_14;
   
    //if(Timer::pObject)Timer::pObject->onTick();
  };
}

//инициализация
TIM_TimeBaseInitTypeDef tim2;
         
         
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
         
          TIM_DeInit(TIM2);
          tim2.TIM_Period = 500;
          tim2.TIM_CounterMode = TIM_CounterMode_Up;
          tim2.TIM_Prescaler = 120-1;
          TIM_TimeBaseInit(TIM2, &tim2);
         
          TIM_Cmd(TIM2, ENABLE);
         
          TIM_ClearFlag(TIM2, TIM_FLAG_Update);
   TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
         
         
         
         
          NVIC_InitTypeDef NVIC_InitStructure;
         
          NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Если это на плюсах написано, то не забываете обработчик прерывания описывать как extern "C"?
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

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

На плюсах, в иаре. В хидере описываю

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

 extern "C" void TIM2_IRQHandler(void); 

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

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

Сообщение oleg110592 »

а если
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
поставить перед
TIM_Cmd(TIM2, ENABLE);
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

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

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

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

Сообщение oleg110592 »

тогда предложу для проверки попробовать этот код, не используя SPL: http://easystm32.ru/for-beginners/27-basic-timers
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Гуня писал(а):в отладчике - один раз зашло в прерывание, вышло, и больше туда никогда не заходит.


А в реальном железе что происходит? Если, например, в обработчике прерывания ногой дергать и осциллографом ее смотреть? У меня, например, в IAR отладчик чаще не работает, чем работает.
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

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

Леонид Иванович писал(а):
Гуня писал(а):в отладчике - один раз зашло в прерывание, вышло, и больше туда никогда не заходит.


А в реальном железе что происходит? Если, например, в обработчике прерывания ногой дергать и осциллографом ее смотреть? У меня, например, в IAR отладчик чаще не работает, чем работает.


То же самое, светодиод 1 раз инвернтируется, потом смотрю осцилографом, не тикает...

oleg110592 писал(а):тогда предложу для проверки попробовать этот код, не используя SPL: http://easystm32.ru/for-beginners/27-basic-timers


попробую, отпишусь.



Способ заработал, правда не знаю пока, не будет ли больше отваливатся))), если что напишу. Всем спасибо за советы!
Ответить

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