Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Вт июн 14, 2022 17:06:12

Не, кубами и халами не пользуюсь принципиально, только низкоуровневыми либами.

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

Вт июн 14, 2022 17:13:36

Одна из SWD'шных ног сожжена статикой? Можно проверить и поногодрыжить…

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

Вт июн 14, 2022 21:42:51

Если бы SWD-шные ноги были бы сожжены, то МК не прошивался бы даже.

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

Вт июн 14, 2022 22:04:04

Значит, остается лишь грепать по всем исходникам флаги отключения SWD/JTAG: вполне возможно, что с копипастой из старого кода, оно где-то пролезло.

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

Ср июн 15, 2022 06:02:48

только низкоуровневыми либами.
Искать где "низкоуровневая либа" с GPIOA->MODER нарукоблудила.

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

Ср июн 15, 2022 12:05:07

Вывел на экранчик железки, которую делаю, состояния некоторых регистров.
1) GPIOA->MODER для SWD в состоянии альтернативной функции как по умолчанию для порта А.
2) RCC->APB2RSTR->DBGMCURST = 0
3) RCC->APB2ENR->DBGMCUEN = 1 - включал вручную, так как по умолчанию был выключен
4) DBGMCU->CR = 6, изменение значения на работу не влияло

Вроде бы с SWD больше ничего не связано. Программирование остаётся всё равно только под ресетом.

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

Ср июн 15, 2022 16:08:17

А как насчет альтернативной функции? Что в GPIOA->AFR[1]? GPIOA->PUPDR? Посмотри в мануале табличку 25 в разделе 9.4.12 (GPIO register map and reset values).
И нет ли защиты?
Последний раз редактировалось Eddy_Em Ср июн 15, 2022 16:11:18, всего редактировалось 1 раз.

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

Ср июн 15, 2022 16:08:38

Программирование остаётся всё равно только под ресетом

Такое бывает, когда в коде меняется функция пина. Возможно, ты не всё нашёл.

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

Ср июн 15, 2022 18:38:56

Serj_K, если вы прошиваете через ST-Link Utility, тогда в его настройках (Settings) переключите режим соединения на Hot Plug и режим сброса выберите Software System Reset (не обязательно). Потому что если назначение пинов PA13, PA14 не менялось, то подключение по SWD "на ходу" без сброса производится отправкой особой комбинации сигналов. Для этого программатор-отладчик должен быть переключен в соответствующий режим. IDE обычно самостоятельно это делает. Либо, если через IDE прошиваете, то в ее настройках проверьте подобный режим

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

Чт июн 16, 2022 10:00:32

Up2805, спасибо, с Software System Reset даже в нормальном режиме коннектится нормально. Теперь хоть прошивать можно без аппаратной кнопки сброса. Жаль, что BlackMagik пока не заработал. Если не заработает, придётся перенастраивать отладку под ST-Link, а он мне меньше нравится, так как не хавает китайские псевдо-стмки.
Вообще ситуация странная. Порт А был изначально настроен и отладка работала, а потом без перенастройки порта отладка отвалилась. Попробую разобраться в процессе работы.

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

Ср июн 22, 2022 18:22:26

всем привет пол дня убил пол дня на энокодер, купленный в чипе новый но валялся давно, так и не смог его нормально запустить а оказалось что с ним что-то не так он в одну сторону ведет себя как нормальный энкодер а в другую у него почему то совпадает старт фронта, я и во и так и так пока понял что дело то в бобине :shock: ....
Изображение
тут еще кокой то прикол кайл мой почему-то не запускает прерывания таймера на котором энкодер, я че тока не делал и HAL и LL и CMSIS. Потом этот же проект компилирую под CUBIDE и там все заработало сразу не пойму раньше такого не было, я его недавно скачал с оф. сайта через vpn, может кто сталкивался?

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

Чт июн 30, 2022 10:59:17

Всем добра строи все свой бп на мк набросал уже почти программу осталось только настройка. Скажу несколько слов в защиту не любителей халакуба, пытался запустить обычный ацп на мк f373с применением библиотеки LL, на регулярном канале все быстро заработало а вот на ижекционном(прошу извинить за мой французский) ничего так и не заработало переписал инициализацию вручную и все очень быстро заработало. Так что самый большой плюс куба скорость в данном случае как то сильно пострадали, вот и выходит что лучше бы вручную все прописывал меньше времени ушло бы... Ну да бог с ним двигаемся дальше Спрошу тут, т.к. не знаю как разбить вопрос и отправить его часть в "питание". У меня будет вполне себе обычная схема БП коих на просторах интерната много т.к. 2 операционника управляют одним или более транзисторами, один отвечает за ток другой за напряжение. Вот только опорное напряжение будет формировать МК от поворота энкодера, это я уже все запрограммировал и сам себя МК меряет нормально, т.е. АЦП меряет выход ЦАП. Теперь вопрос стоит об измерение на выходе, думки у меня такие как обычно операционник и МК ну тоесть вариант 2, но тут мучают всякие нехорошие мысли у сигма-дельта АЦП можно вывести оба вывода в наружу и + и - а еще и можно включить усиление в 32 раза вот и думаю о варианте 1, но тут возникнет другая проблема как защитить выводы МК хватит ли этого коэф.... Что скажут знатоки?
Изображение Изображение Изображение

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

Сб июл 02, 2022 12:37:59

Калибруй смещение при пуске, и всё будет ОК.

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

Сб июл 02, 2022 12:52:24

Пин BOOT0 сидит на земле, то есть используется запуск из прошивки флеш
При отладке под эмулятором, лучше делать как раз наоборот. Чтобы предыдущее содержимое флеши никак не влияло на старт новой отладочной сессии.

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

Чт сен 22, 2022 21:30:07

есть такой вопросик. можно ли уговорить компилятор более активно использовать адресацию со смещением? (F103, Keil.v5, C (не плюсы), оптимизация -время) Конкретизирую:
в обработчике исп. 9 адресов (2 переменные, 3 рег. SPI, 4 рег. TIM1) компиль только для трех из них исп. обращение по смещению.
или альтернатива только вставка asm?
сейчас мне пока не критично, но на будущее заинтересовал этот вопрос.
(в рабочее время выхода в тырнет не имею, если что отвечу только вечером)
Спойлер
Код:
void SPI2_IRQHandler(void){
   uint16_t h;
   uint32_t w;
      h = SPI2->DR;   
   if(wi) {
      wi = wi|h;
         TIM1->CR1 = 0;      TIM1->SR = 0;      TIM1->DIER = 0;
         SPI2->CR1 |= SPI_CR1_SSI; SPI2->CR2 = 0;      
//      uint32_t z,s;
//      z=w; s=0;
//      while (z){if (z&1) {s++;}  z>>=1;}      
//      if (s&1) break;
//      wi=0;   
      status |= 1;      
   }else{      
      if (adri==(h>>8)) wi =(h<<16);   
      else {         // stop restart
         TIM1->CR1 = 0;      TIM1->SR = 0;
         SPI2->CR1 |= SPI_CR1_SSI; SPI2->CR2 = 0;      
         TIM1->EGR = TIM_EGR_UG;
         TIM1->DIER = TIM_DIER_CC3IE;
         TIM1->CR1 |= TIM_CR1_CEN;
      }
   }
}
листинг начало:
0x08001D86 B4F0      PUSH     {r4-r7}
0x08001D88 4810      LDR      r0,[pc,#64]  ; @0x08001DCC
0x08001D8A F8B0C000  LDRH     r12,[r0,#0x00]
0x08001D8E 481B      LDR      r0,[pc,#108]  ; @0x08001DFC
0x08001D90 6887      LDR      r7,[r0,#0x08]
0x08001D92 4E1E      LDR      r6,[pc,#120]  ; @0x08001E0C
0x08001D94 4A0E      LDR      r2,[pc,#56]  ; @0x08001DD0
0x08001D96 2100      MOVS     r1,#0x00
0x08001D98 4B0A      LDR      r3,[pc,#40]  ; @0x08001DC4
0x08001D9A 1F35      SUBS     r5,r6,#4
0x08001D9C 1D14      ADDS     r4,r2,#4
0x08001D9E B3CF      CBZ      r7,0x08001E14
0x08001DA0 6887      LDR      r7,[r0,#0x08]
0x08001DA2 EA470C0C  ORR      r12,r7,r12
0x08001DA6 F8C0C008  STR      r12,[r0,#0x08]
0x08001DAA 8019      STRH     r1,[r3,#0x00]
0x08001DAC 8031      STRH     r1,[r6,#0x00]
0x08001DAE 8029      STRH     r1,[r5,#0x00]
0x08001DB0 8813      LDRH     r3,[r2,#0x00]

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

Пт сен 23, 2022 09:18:46

a797945, переходите на 6-й компилятор. Оптимизация -O3.
Спойлер
Код:
     7: extern "C" void SPI2_IRQHandler(){
     8:    uint16_t h;
     9:    uint32_t w;
    10:    h = SPI2->DR;   
0x080005E0 F6430000  MOVW     r0,#0x3800
    11:    if(wi) {
0x080005E4 F6400190  MOVW     r1,#0x890
0x080005E8 F2C40000  MOVT     r0,#0x4000
0x080005EC F2C20100  MOVT     r1,#0x2000
    10:    h = SPI2->DR;   
    11:    if(wi) {
0x080005F0 68C2      LDR      r2,[r0,#0x0C]
0x080005F2 880B      LDRH     r3,[r1,#0x00]
0x080005F4 B1C3      CBZ      r3,0x08000628
    12:       wi = wi|h;
0x080005F6 880B      LDRH     r3,[r1,#0x00]
0x080005F8 431A      ORRS     r2,r2,r3
0x080005FA 800A      STRH     r2,[r1,#0x00]
0x080005FC F6424100  MOVW     r1,#0x2C00
0x08000600 F2C40101  MOVT     r1,#0x4001
0x08000604 2200      MOVS     r2,#0x00
    13:       TIM1->CR1 = 0;       
0x08000606 600A      STR      r2,[r1,#0x00]
    14:           TIM1->SR = 0;       
0x08000608 610A      STR      r2,[r1,#0x10]
    15:           TIM1->DIER = 0;
0x0800060A 60CA      STR      r2,[r1,#0x0C]
    16:       SPI2->CR1 |= SPI_CR1_SSI; SPI2->CR2 = 0;         
0x0800060C 6801      LDR      r1,[r0,#0x00]
0x0800060E F4417180  ORR      r1,r1,#0x100
0x08000612 6001      STR      r1,[r0,#0x00]
0x08000614 6042      STR      r2,[r0,#0x04]
    17:       status |= 1;       
    18:    }else{       
    19:       if (adri==(h>>8)) wi =(h<<16);   
    20:       else {         // stop restart
    21:          TIM1->CR1 = 0;      TIM1->SR = 0;
    22:          SPI2->CR1 |= SPI_CR1_SSI; SPI2->CR2 = 0;       
    23:          TIM1->EGR = TIM_EGR_UG;
    24:          TIM1->DIER = TIM_DIER_CC3IE;
    25:          TIM1->CR1 |= TIM_CR1_CEN;
    26:       }
    27:    }
0x08000616 F6400094  MOVW     r0,#0x894
0x0800061A F2C20000  MOVT     r0,#0x2000
0x0800061E 6801      LDR      r1,[r0,#0x00]
0x08000620 F0410101  ORR      r1,r1,#0x01
0x08000624 6001      STR      r1,[r0,#0x00]
    28: }
0x08000626 4770      BX       lr
    19:       if (adri==(h>>8)) wi =(h<<16);   
    20:       else {         // stop restart
0x08000628 F6400398  MOVW     r3,#0x898
0x0800062C F2C20300  MOVT     r3,#0x2000
0x08000630 881B      LDRH     r3,[r3,#0x00]
0x08000632 F3C22207  UBFX     r2,r2,#8,#8
0x08000636 429A      CMP      r2,r3
0x08000638 BF02      ITTT     EQ
0x0800063A 2000      MOVEQ    r0,#0x00
0x0800063C 8008      STRHEQ   r0,[r1,#0x00]
0x0800063E 4770      BXEQ     lr
0x08000640 F6424100  MOVW     r1,#0x2C00
0x08000644 F2C40101  MOVT     r1,#0x4001
0x08000648 2200      MOVS     r2,#0x00
    21:          TIM1->CR1 = 0;      TIM1->SR = 0;
0x0800064A 600A      STR      r2,[r1,#0x00]
0x0800064C 610A      STR      r2,[r1,#0x10]
    22:          SPI2->CR1 |= SPI_CR1_SSI; SPI2->CR2 = 0;       
0x0800064E 6803      LDR      r3,[r0,#0x00]
0x08000650 F4437380  ORR      r3,r3,#0x100
0x08000654 6003      STR      r3,[r0,#0x00]
0x08000656 6042      STR      r2,[r0,#0x04]
0x08000658 2001      MOVS     r0,#0x01
    23:          TIM1->EGR = TIM_EGR_UG;
0x0800065A 6148      STR      r0,[r1,#0x14]
0x0800065C 2008      MOVS     r0,#0x08
    24:          TIM1->DIER = TIM_DIER_CC3IE;
0x0800065E 60C8      STR      r0,[r1,#0x0C]
    25:          TIM1->CR1 |= TIM_CR1_CEN;
    26:       }
    27:    }
0x08000660 6808      LDR      r0,[r1,#0x00]
0x08000662 F0400001  ORR      r0,r0,#0x01
0x08000666 6008      STR      r0,[r1,#0x00]
    28: }
0x08000668 4770      BX       lr
0x0800066A 0000      MOVS     r0,r0

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

Пт сен 23, 2022 17:42:42

понял. наглядно.
Спасибо

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

Вс сен 25, 2022 22:38:00

ковыряю один из клонов stm32 на m4f.
обработчик прерывания таймера завершается кодом:
Код:
TIM4->SR &= ~(0x01);

проблема в том, что флаг прерывания не снимается с первого раза. прерывание отрабатывает по два раза. поставил барьерную инструкцию DSB после упомянутого кода, заработало как надо.
это нормальное поведение для STM32? кто-нибудь сталкивался?

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

Вс сен 25, 2022 23:41:42

Нормально. Барьер не нужен, нужна задержка. Просто переместите команду очистки флага ближе к началу обработчика прерывания. А саму команду я бы упростил до записи нуля.

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

Пн сен 26, 2022 06:35:06

Нормально. Барьер не нужен, нужна задержка. Просто переместите команду очистки флага ближе к началу обработчика прерывания. А саму команду я бы упростил до записи нуля.

угу. проверил на F103. та же самая фигня.
Ответить