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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

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


только дефолтовая там не 8МГц
Реклама
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

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

Добавлено after 12 minutes 53 seconds:
[uquote="Кислородный",url="/forum/viewtopic.php?p=3791225#p3791225"]Мануал и даташит в помощь![/uquote]
Типа "Бог в помощь!" - спасибо.

[uquote="Кислородный",url="/forum/viewtopic.php?p=3791225#p3791225"]Мануал и даташит в помощь!
ШИМ получился 0% для первого канала, а настраивается для второго канала - регистр CCR2, в то время как регистр CCR1 по умолчанию = 0, а законфиген на ШИМ именно первый канал. Нужно поменять CCR2 на CCR1.
Ну и при значениях PSC = 359 и ARR = 65535, у вас получится оооочень бооооольшооой период в несколько секунд при дефолтной частоте 8 МГц. Для отдельных вспышек светодиода пойдет, но не для регулировки яркости этого светодиода.[/uquote]
Частота 72 МГц, на таймере 1 работает нормально, на выходах ШИМ светодиоды, на таймере 1 мигает, на таймере 2 глухо. Сейчас посмотрю исправлю CCR2 на CCR1. Спасибо, до ночи сидел, нахомутал.

[uquote="Кислородный",url="/forum/viewtopic.php?p=3791225#p3791225"]Ну и вторым вопросом, чусствую, будет вопрос "аааа, куда пропала отладкааааа??? почему он в пошаговой отладке отвалился???"[/uquote]
Шью по SWD, такого вопроса не будет.

Добавлено after 16 minutes 32 seconds:
[uquote="Кислородный",url="/forum/viewtopic.php?p=3791225#p3791225"]Нужно поменять CCR2 на CCR1.[/uquote]
Исправил, не помогло. ШИМа нет. Уважаемые знатоки, какие у кого ещё предложения?
Хорошему коту и в декабре - март :)
Реклама
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт фев 13, 2020 07:41:02

Сообщение Кислородный »

Вы нас так тестируете на внимательность?? :)
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
еавс!
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="Кислородный",url="/forum/viewtopic.php?p=3791278#p3791278"]Вы нас так тестируете на внимательность?? :)
TIM1->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; //PWM mode 1, channel 1 Ouput[/uquote]
Благодарю, 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
}
Хорошему коту и в декабре - март :)
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Frogfot",url="/forum/viewtopic.php?p=3791284#p3791284"]Исправил, но ШИМа по прежнему нет.[/uquote]
Откопал старую платку с 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
Реклама
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт фев 13, 2020 07:41:02

Сообщение Кислородный »

Со всеми замеченными правками - должно работать. Просто вы наверно не замечаете его.
Вот, работает:
Вложения
DS1Z_QuickPrint3.png
(6.12 КБ) 250 скачиваний
еавс!
Реклама
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="Кислородный",url="/forum/viewtopic.php?p=3791297#p3791297"]Со всеми замеченными правками - должно работать.[/uquote]
Уф, заработало, благодарю. Код действительно рабочий - мой косяк - с таймера 1 на выход ШИМа подключил один светодиод на PA11, с таймера 2 - на PA15, отсчитал от 11 четвёртый пин - PA15. Не учёл, что на Blue Pils STM32F103C8T6 - PA11, PA12, а затем сразу PA15. Ещё раз благодарю всех!!!
Хорошему коту и в декабре - март :)
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

[uquote="Кислородный",url="/forum/viewtopic.php?p=3791278#p3791278"]А для быстрой замены таймера есть такая фича:

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

и надо лишь заменить в дефайне TIM2 на TIM1[/uquote]
Раз уж всплыл этот момент, может есть идеи как... Вот для такого типа подстановки проблем нет:

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

#ifndef I2C_BUS
#define I2C_BUS I2C1
#warning Default I2C interface set to I2C1
#endif
Но как сделать подмену в строчках:
NVIC_EnableIRQ(I2C1_IRQn);
void I2C1_IRQHandler()
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;

В гугле был нашедши что-то типа

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

#define APB_ENABLE(A)	RCC_APB1ENR_ ## A ## EN
#define APB_EN(A) APB_ENABLE(A)
Но у меня APB_EN(I2C_BUS) не хочет создать RCC_APB1ENR_I2C1EN
Первая строчка, вроде, работает: APB_ENABLE(I2C1) создаёт RCC_APB1ENR_I2C1EN. Но вот как сделать подмену в аргументе подстановки?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Так... кажется, до меня дошло, почему не работает эта подстановка...
Оказывается, сам "I2C1" является макросом:

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

#define I2C1                ((I2C_TypeDef *) I2C1_BASE)
Поэтому когда все макросы раскрываются и получается глупость...
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

Народ, подскажите - в STM32F103C8T6 - есть таймеры 1, 2, 3 и 4. Вопрос: Если соединять два 16-бит таймера в один 32-бит таймер, можно делать любые комбинации из них, или есть какие-то фиксированные пары Master-Slave?
Хорошему коту и в декабре - март :)
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Можно я почитаю RM за вас?
СпойлерИзображение
Изображение
t1_t8.png
(25.61 КБ) 215 скачиваний
t2-t5.png
(25.43 КБ) 192 скачивания
Друг Кота
Аватара пользователя
Сообщения: 7383
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Подскажите. кристалл stm32f051. Ведь, так не правильно писать обработчик прерывания?

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

void I2C_IRQHandler(void) {
		if (I2C->ISR & I2C_ISR_ARLO) { // Arbitration lost;
...
		if (I2C->ISR & I2C_ISR_BERR) {
...
		if (I2C->ISR & I2C_ISR_NACKF) { // Not acknowledgment;
итд.
Ведь, если я соответствующее разрешение выключу, например, TXIE то обработчик всё-равно может с некоторой вероятностью залезть в этот IF? Может, надо еще и проверять состояние разрешения в CR1?

Это нужно мне из-за того, что хочу часть данных качать через ПДП и боюсь, что вместо ПДП может сработать этот обработчик.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Всё верно, флаги в регистре статуса вскакивают независимо от того разрешено прерывание или нет.
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3793110#p3793110"]Можно я почитаю RM за вас?[/uquote]
Благодарю, теперь буду точно знать, где нужно читать. После AVR несколько сложновато сразу всё понять и запомнить - 21 регистр у таймера 1, по 18 регистров у таймеров 2, 3 и 4. Насколько я понял - для STM32F103C8T6 все 4-е таймера могут работать в паре с любым другим таймером?
Хорошему коту и в декабре - март :)
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Frogfot, если вам нужен 32-битный таймер, можно еще и камень более подходящий выбрать.
Все таки, в семействе STM32 хуже STM32F103 ничего нет!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Eddy_Em, именно F103 или вообще F1?
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

WiseLord, про F103 могу сказать точно, с остальными F1xx не работал.
Сейчас для меня основные МК - это STM32F072. Супер!
Некоторые вещи, для которых нужно чуть пошустрей работать или не хватает периферии F0, пользуюсь F103. Но постоянно плююсь, когда вспоминаю, как все легко и изящно на F0xx, и какая жесть на этом Г.
Из Cortex-M4 работал с F407 (но это было давно и на SPL, т.е. можно сказать, не работал я с ним). Дома уже с год лежит девборда на F411, но все руки не доходят: это ж надо для нее линкер проверить, стартап модифицировать и натащить заголовочных файлов с объявлениями портов. А потом еще это намного более жирное железо программировать как-то. Есть, правда, один плюс: у Cortex-M4 есть FPU. Но мне флоаты на МК нужны крайне редко.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Eddy_Em писал(а):Дома уже с год лежит девборда на F411, но все руки не доходят: это ж надо для нее линкер проверить, стартап модифицировать и натащить заголовочных файлов с объявлениями портов. А потом еще это намного более жирное железо программировать как-то.
Сносишь линуксы, ставишь прошивку от игровых приставок а не нее IDE (ругательство для линуксера) и спокойно пишешь на SPL и отлаживаешь. :) Короче все просто. Это ты со своими линуксами все усложнил.
Скажу по секрету есть недорогие STM32H750. Когда до них доберешься? :)))
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="Мурик",url="/forum/viewtopic.php?p=3793214#p3793214"]Скажу по секрету есть недорогие STM32H750.[/uquote]
Я встречал такую платку с STM32H750VB 480 МГц - без ничего, только ножки выведены и флеш 25Qxx можно допаять - примерно 12 зелёных - как, нормальный контроллер?
STM32H750.jpeg
(67.44 КБ) 208 скачиваний
Добавлено after 7 minutes 31 second:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3793184#p3793184"]Frogfot, если вам нужен 32-битный таймер, можно еще и камень более подходящий выбрать. Все таки, в семействе STM32 хуже STM32F103 ничего нет![/uquote]
Ну взял не особо разобравшись несколько штук BluePils, не выбрасывать же их. Конечно, сейчас уже заценил, что F105, F107 покрасивше камушки будут.

А как F030 будут? Тоже взял несколько чипов, пока не юзал - STM32F030F4 (16 kB 20 pin) и STM32F030C8 (64 kB 48 pin)

Сейчас начал присматриваться к таким же платкам с STM32F401/411 - как они?
Хорошему коту и в декабре - март :)
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Мурик",url="/forum/viewtopic.php?p=3793214#p3793214"]спокойно пишешь на SPL и отлаживаешь. :)
Скажу по секрету есть недорогие STM32H750. Когда до них доберешься? :)))[/uquote]
Какой смысл брать недорогие STM32H750 если для них SPL нет и не будет? :)
Ответить

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