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

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

Чт фев 06, 2020 11:36:17

То есть, *_it.c/h файлики, которые генерируются кубом, Вы просто не компилируете вообще?

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

Чт фев 06, 2020 13:50:15

Как это не компилирую? Компилирую. Просто обратите внимание что оригинальные Callback функции объявлены с директивой weak - слабые. Это по своему назначению и не функци вовсе, а так - заглушки. Совершенно законно можно определить Callback функцию с тем же именем у себя в файле, и компилятор возьмет именно ее, как более высшую по проритету. Лично я пока не экспериментировал с выносом Callback в отдельный файл, но спокойно пишу их в мейне в секции юзер кода. Там делаю свич по переданному параметру - таймер, юарт и т.д., и дальше передаю обработку по ветке в нужный объект.

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

Пт фев 07, 2020 04:55:39

Утречка всем.
Нужен STM32 F103C8T6 для ослика DSO138
нашел на али чипы с припиской
LQFP48 и QFP48 QFP
что это значит и подойдут ли такие?

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

Пт фев 07, 2020 08:49:43

это тип корпуса. STM32 F103C8T6 сущевствуют только в LQFP48. Думаю китайцы не вдавались в детали описания и это все одни и те же чипы.

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

Сб фев 08, 2020 09:52:26

Спасибо, прикупил

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

Пт фев 14, 2020 23:36:49

STM32F103C8T6. Запустил ШИМ на таймере 1, Ок. Пытаюсь запустить на таймере 2 шим 1 - на выходе РА15 глухо. Подскажите плиз где чего я неправильно сделал:
Спойлер
Код:
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Timer 2 clock enabled
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | // Enabled Alternate Function I/O clock
                             RCC_APB2ENR_IOPAEN; // Enabled Clock GPIO A

AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE |     // Disable JTAG
                AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1; // Partial remap Timer 2

GPIOA->CRH =  GPIO_CRH_MODE15_1 | // Output Push-Pull max speed 2 MHz
                         GPIO_CRH_CNF15_1;   // AFO Push-Pull

TIM2->PSC = 359; // Prescaller 16 bit
TIM2->ARR = 0xFFFF;  // Value Auto Reload Register
TIM2->CCR1 = 0x0FFF; // TIM2 capture/compare register 1

TIM2->CCER |= TIM_CCER_CC1E | // Compare 1 output enable
                        TIM_CCER_CC1P;  // Compare 1 output polarity
   
TIM2->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; //PWM mode 1, channel 1 Ouput

TIM2->CR1 = TIM_CR1_ARPE | // Auto-reload preload enable
               TIM_CR1_URS;   // Update request source
   
TM2->CR2 = 0x00;
   
TIM2->DIER = 0; Update interrupt enable
   
TIM2->CR1 |= TIM_CR1_CEN; // Counter enable



Исправил код, добавил remap чтобы всё было в одном месте - не помогло.
Последний раз редактировалось Frogfot Сб фев 15, 2020 12:08:01, всего редактировалось 5 раз(а).

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

Пт фев 14, 2020 23:53:18

Пытаюсь запустить на таймере 2 шим 1 - на выходе РА11 глухо.

Во-первых, не PA11, а PA15 который у тебя и настраивается. Во-вторых, этот пин находится в колонке Remap, а его то ты и не делаешь(AFIO->MAPR).

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

Сб фев 15, 2020 09:23:23

Пытаюсь запустить на таймере 2 шим 1 - на выходе РА11 глухо.

Во-первых, не PA11, а PA15 который у тебя и настраивается. Во-вторых, этот пин находится в колонке Remap, а его то ты и не делаешь(AFIO->MAPR).

Ок, спасибо, сейчас исправлю. На РА 11 запускал с таймера 1 выход 4, забыл исправить, а ремап упустил из вида.

Типа так?
Код:
AFIO->MAPR = AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1; // Partial remap Timer 2


Добавлено after 9 hours 18 minutes 59 seconds:
2 Reflector: исправил, всё равно нет ШИМа на выходе. Где-то ещё одна собака порылась :) А может и не одна.

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

Сб фев 15, 2020 09:31:00

у таймера, что касается канала все перепроверь

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

Сб фев 15, 2020 10:04:18

у таймера, что касается канала все перепроверь

Таймер в режиме переполнения отлично работет, прерывания выдаёт. Пытаюсь выдать с него ШИМ - где-то что-то или не доделал, или неправильно сделал, ШИМа нет.

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

Сб фев 15, 2020 10:23:13

Мануал и даташит в помощь!
ШИМ получился 0% для первого канала, а настраивается для второго канала - регистр CCR2, в то время как регистр CCR1 по умолчанию = 0, а законфиген на ШИМ именно первый канал. Нужно поменять CCR2 на CCR1.
Ну и при значениях PSC = 359 и ARR = 65535, у вас получится оооочень бооооольшооой период в несколько секунд при дефолтной частоте 8 МГц. Для отдельных вспышек светодиода пойдет, но не для регулировки яркости этого светодиода.

Ну и вторым вопросом, чусствую, будет вопрос "аааа, куда пропала отладкааааа??? почему он в пошаговой отладке отвалился???"
Последний раз редактировалось Кислородный Сб фев 15, 2020 10:26:38, всего редактировалось 1 раз.

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

Сб фев 15, 2020 10:23:54

Frogfot, я от всех F1 уже избавился, потому проверить не могу, но на PA15 еще JTDI висит и это вход. В большинстве случаев используется SWD и лишние ноги JTAG отключаются через тот же ремап в начале программы.

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

Сб фев 15, 2020 10:30:55

Совершенно верно.
Код:
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1;  // PA15 отключить от J-TAG

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

Сб фев 15, 2020 10:42:21

Frogfot, я от всех F1 уже избавился, потому проверить не могу.
Круто, я ещё играюсь F103, вот хочу попробовать Black Pils на STM32F411.
Frogfot но на PA15 еще JTDI висит и это вход. В большинстве случаев используется SWD и лишние ноги JTAG отключаются через тот же ремап в начале программы.

Слона то я и не заметил :) Благодарю, уже когда-то натыкался на эти грабли, но запамятовал. Шью я тоже по SWD.Типа так?
Код:
AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE

Сейчас исправлю, попробую.
Последний раз редактировалось Frogfot Сб фев 15, 2020 10:52:56, всего редактировалось 3 раз(а).

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

Сб фев 15, 2020 10:44:41

о, все расписали


только дефолтовая там не 8МГц

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

Сб фев 15, 2020 11:24:23

Отключил JTAG, всё равно ШИМа нет :(

Добавлено after 12 minutes 53 seconds:
Мануал и даташит в помощь!

Типа "Бог в помощь!" - спасибо.

Мануал и даташит в помощь!
ШИМ получился 0% для первого канала, а настраивается для второго канала - регистр CCR2, в то время как регистр CCR1 по умолчанию = 0, а законфиген на ШИМ именно первый канал. Нужно поменять CCR2 на CCR1.
Ну и при значениях PSC = 359 и ARR = 65535, у вас получится оооочень бооооольшооой период в несколько секунд при дефолтной частоте 8 МГц. Для отдельных вспышек светодиода пойдет, но не для регулировки яркости этого светодиода.

Частота 72 МГц, на таймере 1 работает нормально, на выходах ШИМ светодиоды, на таймере 1 мигает, на таймере 2 глухо. Сейчас посмотрю исправлю CCR2 на CCR1. Спасибо, до ночи сидел, нахомутал.

Ну и вторым вопросом, чусствую, будет вопрос "аааа, куда пропала отладкааааа??? почему он в пошаговой отладке отвалился???"

Шью по SWD, такого вопроса не будет.

Добавлено after 16 minutes 32 seconds:
Нужно поменять CCR2 на CCR1.

Исправил, не помогло. ШИМа нет. Уважаемые знатоки, какие у кого ещё предложения?

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

Сб фев 15, 2020 12:04:08

Вы нас так тестируете на внимательность?? :)
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; //PWM mode 1, channel 1 Ouput

На первых порах приучите себя не копипастить текст, а писать заново. Куда вам торопиться? Зато запомните назначение регистров и битов и уж точно не забудете переправить TIM1 на TM2 и CCR2 на CCR1.
А для быстрой замены таймера есть такая фича:

#define USED_TIM TIM2
USED_TIM->CCMR1 = TIM_CCMR.......
USED_TIM->CR1 |= TIM_CR1_CEN.......

и надо лишь заменить в дефайне TIM2 на TIM1

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

Сб фев 15, 2020 12:14:18

Вы нас так тестируете на внимательность?? :)
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; //PWM mode 1, channel 1 Ouput

Благодарю, 100 раз просматривал, не заметил. Исправил, но ШИМа по прежнему нет.

Привожу код инициализации для Таймера 1 - который работает:
Спойлер
Код:

// ----------
void Init_TC1 (void)
{
  TIM1->PSC   = 719; // 72; // TIM1 prescaler
   
  TIM1->ARR   = 0xFFFF; // 1000; // TIM1 auto-reload register

  TIM1->CCR4  = 0x0FFF; // 300; // TIM1 and TIM8 capture/compare register   //коэф. заполнения

  TIM1->CCER  = TIM_CCER_CC4E | // Compare 4 output enable
                 TIM_CCER_CC4P;  // Compare 4 output polarity

  TIM1->BDTR  = TIM_BDTR_MOE; // OC and OCN outputs are enabled

  TIM1->CCMR2 = TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1; // PWM mode 1, прямой ШИМ 4 канал

  TIM1->CR1   = TIM_CR1_CEN; // Counter enabled
}

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

Сб фев 15, 2020 12:42:59

Исправил, но ШИМа по прежнему нет.

Откопал старую платку с F103, почему у меня с твоим последним кодом ШИМ есть?
Спойлер
Код:
   RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Timer 2 clock enabled
   RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | // Enabled Alternate Function I/O clock
      RCC_APB2ENR_IOPAEN; // Enabled Clock GPIO A

   AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE |     // Disable JTAG
      AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1; // Partial remap Timer 2

   GPIOA->CRH = GPIO_CRH_MODE15_1 | // Output Push-Pull max speed 2 MHz
      GPIO_CRH_CNF15_1;   // AFO Push-Pull

   TIM2->PSC = 359; // Prescaller 16 bit
   TIM2->ARR = 0xFFFF;  // Value Auto Reload Register
   TIM2->CCR1 = 0x0FFF; // TIM2 capture/compare register 1

   TIM2->CCER |= TIM_CCER_CC1E | // Compare 1 output enable
      TIM_CCER_CC1P;  // Compare 1 output polarity

   TIM2->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; //PWM mode 1, channel 1 Ouput

   TIM2->CR1 = TIM_CR1_ARPE | // Auto-reload preload enable
      TIM_CR1_URS;   // Update request source

   TIM2->CR2 = 0x00;

   TIM2->DIER = 0; //Update interrupt enable

   TIM2->CR1 |= TIM_CR1_CEN; // Counter enable

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

Сб фев 15, 2020 12:44:14

Со всеми замеченными правками - должно работать. Просто вы наверно не замечаете его.
Вот, работает:
Вложения
DS1Z_QuickPrint3.png
(6.12 KiB) Скачиваний: 211
Ответить