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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Pavel_1978 писал(а):на F103 это пункт 6.2
У меня STM32F4.
Pavel_1978 писал(а):Раздел так и называется
Как "так"? reset and clock control ?
Сейчас читаю неплохую статью DiHalt'а http://easyelectronics.ru/arm-uchebnyj- ... stm32.html
не зная броду не лезь к вольтмоду
Реклама
Опытный кот
Аватара пользователя
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Сообщение Pavel_1978 »

Оно самое.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

1.Столкнулся намедни с тем, что попробовал прошить плату STM32Discovery с навешанным на него дисплеем RDX0154, посредством утилиты ST-LINK utility. Если прошиваю утилитой, то экран мерцает при выводе информации с периодом где то пол секунды. Через IAR всё было статично.

2.Ещё после установки ST-LINK utility, компилятор IAR перестал прошивать и отлаживать.
Дрова STLink которые идут с IAR переустанавливал. Так же пробовал переустановить IAR результат тот же, никто с подобным не встречался, если было поделитесь информацией.
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

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

Странно. Все время прошиваю из IAR посредством ST-LINK utility. Настройки такие:

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

   Tools -> Configure Tools...
   Menu Text: ST-Link programmer
   Command: C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe
   Argument: -c SWD -ME -P $PROJ_FNAME$.hex -Rst -Run
   Initial Derectory: $EXE_DIR$
   Tool Available: Always

   Tools -> Options -> Key Bindings -> Tools -> ST-Link programmer F8
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

amv2000 писал(а):2.Ещё после установки ST-LINK utility, компилятор IAR перестал прошивать и отлаживать.
По моему у меня было то же самое с KEIL. st-link utility может менять прошивку у discovery. В результате драйвер перестает подходить. Лечилось заменой dll драйвера st-link. Где то в сети лежит описание какую dll нужно сменить что бы заработало с st-link с новой прошивкой.
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Читаю референс на stm32f100 и не могу въехать для чего служат биты CC4NP и CC4P регистра TIM3_CCER...
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

чего служат биты CC4NP и CC4P
CC2NP: Полярность комплементарного выхода захвата/сравнения 2
0: OC1N активный высокий
1: OC1N активный низкий
Прим: Этот бит не записывается когда был запрограммирован уровень LOCK-2 или 3 (TIMx_BDTR) и CC1S=00(канал сконфигурирован на выход).
СС1Р: Полярность выхода захвата/сравнения 1
Канал СС1 сконфигурирован на выход:
0: ОС1 активный высокий
1: ОС1 активный низкий
Канал СС1 сконфигурирован на вход:
Этот бит выбирает IC1 для операций захвата или запуска.
0: неинвертирован: захват происходит по нарастающему фронту IC1. При использовании как внешний запуск, IC1 не инвертируется.
1: инвертирован: захват происходит по спадающему фронту IC1. При использовании для внешнего запуска IC1 инвертируется.
Применительно к выходу делал трехфазный частотник. Есть разные драйверы полевиков, с прямыми и инверсными входами(и их комбинациями) для ШИМ управления. Так вот весьма удобно в зависимости от типа микросхемы записать в регистр нужную полярность импульсов и избавиться от лишних микросхем.
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

uk8amk писал(а):комплементарного выхода
А что это значит?
Набросал код:

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

int main()
{
	RCC->AHBENR = 0x00060014;
	RCC->APB1ENR = 0x00000002;
	GPIOA->MODER = 0x28000000;
	GPIOB->MODER = 0x00000008;
	GPIOB->OTYPER = 0x00000000;
	GPIOB->OSPEEDR = 0x00000000;
	GPIOA->PUPDR = 0x00000000;
	
	
	TIM3->CCMR2 = 0x60;
	TIM3->CCER = 0x1000;
	TIM3->CR1 = 0x0001;
	TIM3->CCR4 = 0x2EDF;
	
	TIM3->PSC = 0x5DBF;
Пытаюсь этим добром завести шим на TIM3 пина PB1, но чёт не идёт ток по проводам :( ....
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

А что это значит?
Это значит, что вам надо прочитать в интернете что такое транзисторный мост и полумост.
Они управляются как раз комплементарными сигналами. Когда верхний транзистор открывается нижний обязан закрываться(и наоборот) + вставляться мертвое время. Если сделать иначе, то может быть крутой фейерверк если управляется мощненький IGBT.

По вашему коду не скажу т.к. только магические числа и похоже это не для F100.

Для 32F100C4 на драйверы моста IRS2110(неинверсные входы) писал такой код:

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

/*--------------------------------------------------------
//TIM1 in 3ph mode with complementary outputs
---------------------------------------------------------*/
#define DMA_BURST_LEN	(3-1)
#define DMA_BASE_ADR	13 // adress offset for TIM_CCR1
#define DEAD_TIME_VAL	160 //*dead-time step with 62.5nS step for 16MHz
void init_tim1( void )
{
	//tDTS=tCK_INT, ARPE, Edge-aligned 
	TIM1->CR1 = TIM_CR1_ARPE | TIM_CR1_URS;
	//Output idle state OISx=0, OISxN=0(MOE=0), CCPC? 
	TIM1->CR2 = 0;
	//Slave mode controller disabled
	TIM1->SMCR = 0;
	//Update DMA enable, Break IRQ, Update IRQ
	TIM1->DIER = TIM_DIER_UDE | TIM_DIER_BIE | TIM_DIER_UIE;
	//Set Capture-compare mode 
	TIM1->CCMR1 =  TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // OC1M=PWM1
	TIM1->CCMR1 |= TIM_CCMR1_OC1PE; // OC1 Preload enable
	TIM1->CCMR1 |= TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2; // OC2M=PWM1
	TIM1->CCMR1 |= TIM_CCMR1_OC2PE; // OC2 Preload enable
	TIM1->CCMR2 =  TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2; // OC3M=PWM1
	TIM1->CCMR2 |= TIM_CCMR2_OC3PE; // OC3 Preload enable
	//Enable compare outputs, polarity
	TIM1->CCER =  TIM_CCER_CC1E | TIM_CCER_CC1NE;
	TIM1->CCER |= TIM_CCER_CC2E | TIM_CCER_CC2NE;
	TIM1->CCER |= TIM_CCER_CC3E | TIM_CCER_CC3NE;
	//time base
	TIM1->CNT = 0;
	TIM1->PSC = 34; // Fpwm = 1800Hz
	TIM1->ARR = 255; // Counter TOP
	TIM1->RCR = 0;
	TIM1->CCR1 = 0;
	TIM1->CCR2 = 0;
	TIM1->CCR3 = 0;
	//Break and dead-time
	TIM1->BDTR =  DEAD_TIME_VAL; // dead-time
	TIM1->BDTR |= TIM_BDTR_BKE | TIM_BDTR_BKP;// break input, active polarity = high
	TIM1->DCR  =  (DMA_BURST_LEN<<8) | DMA_BASE_ADR;
	//Generate event for update registers
	TIM1->EGR = TIM_EGR_UG;	
	//Enable TIM1 IRQ vectors
	NVIC->ISER[0] = TIM1_BRK_TIM15_IRQ | TIM1_UP_TIM16_IRQ;	
}
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

Леонид Иванович писал(а):Все время прошиваю из IAR посредством ST-LINK utility.
Спасибо! попробовал понравилось, честно говоря нигде не встречал про возможность такой связки.
Galizin писал(а):Лечилось заменой dll драйвера st-link. Где то в сети лежит описание какую dll нужно сменить что бы заработало с st-link с новой прошивкой.
Это я встречал, но там говорилось если не работает утилита. Впрочем файл dll менял ничего не менялось экран всё равно моргает, хотя я подозреваю суть проблемы в том, что я залил по ошибке прошивку для STM32 F103 вместо STM32 F100 и думается мне где то в тактировании проблема.
Хотел стереть чип, выдает ошибку. Чем еще можно стереть или ждать переходник чтобы попробовать загрузить через Бутлоадер.
Вложения
Безымянный.png
(185.8 КБ) 444 скачивания
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Леонид Иванович писал(а):Странно. Все время прошиваю из IAR посредством ST-LINK utility. Настройки такие:
Шить из самого IAR средствами самого IAR, снова религия не позволяет ?
Уже стабильная привычка к костылям ??? :)))
Хотя и сам IAR сплошной костыль , стоит все таки на Keil переходить...
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Пытаюсь перевести свой код на понятный язык для окружающих :) .
Почему Кейл ругается на строку

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

RCC->AHBENR |= (RCC_AHBENR_IOPAEN | RCC_AHBENR_IOPBEN); 
?
Это SPL(а то я без неё пытаюсь делать)?
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

наверное надо RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN);
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

В моем CMSIS(V3.3.0) прописано именно RCC_APB2ENR_IOPAEN.

Наверно надо воткнуть
#include "stm32f10x.h"

Это не SPL.
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

oleg110592 писал(а):наверное надо RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN);
Спасибо большое помогло :) .
Более того, нашёл все образцы в stm32f0xx.h (не знал что они там есть). Думаю, теперь тупых вопросов будет меньше :)
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Переделал код, поправил некоторые ошибки. Получилось вот что:

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

RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOAEN);
	
	GPIOA->MODER = 0x28000000;
	GPIOB->MODER |= GPIO_MODER_MODER1_1;
	GPIOB->OTYPER = 0x00000000;
	GPIOB->OSPEEDR |= (GPIO_OSPEEDR_OSPEEDR1_1 | GPIO_OSPEEDR_OSPEEDR1_0);
	GPIOA->PUPDR = 0x00000000;
	
	RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
	TIM3->CR1 |= TIM_CR1_ARPE;
	TIM3->CCMR2 |= TIM_CCMR2_OC4PE;
	TIM3->CCMR2 |= (TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1);
	TIM3->CCER |= TIM_CCER_CC4E;
	TIM3->ARR = 23999;
	TIM3->CCR4 = 19200;
  TIM3->CR1 |= TIM_CR1_CEN;
но ШИМа на выходе нет (светодиод не горит совсем)....
Помогите пожалуйста разобраться где собака зарыта... :solder:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

сначала можно было бы и готовый пример попробовать: http://visualgdb.com/tutorials/arm/stm32/pwm/
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Я брал за образец вот эту статью:
chipspace.ru/stm32-general-purpose-timers-2-pwm/
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

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

dosikus писал(а):Шить из самого IAR средствами самого IAR, снова религия не позволяет ?
У меня ничего не получилось. В меню есть пункты "Download active application" и "Download file...", они прошивают контроллер, но дальше ничего не происходит. Даже если потом даю вручную контроллеру сброс - прошивка не стартует. Но если затем нажать "Debug without Downloading", то отладка нормально запускается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

брал за образец
а где "| RCC_APB2ENR_AFIOEN"
Ответить

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