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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

ЛИ, ставим птицу на USE flash loader(s) в опции Debugger.
Единственное RESET придется жать вручную. По крайней мере у мну в 6.70.2, IAR RESET'ом не управляет,
а в куче проектов юзаю пины SWD .

И лучше переходите на Keil , дебуггер там на порядок лучше...
Реклама
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

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

Птица эта стоит. Но все равно прошивка не стартует даже после ручного сброса. После долгих плясок с бубном задействовал утилиту ST-Link. Но даже если бы пункт Download заработал, вручную жать сброс меня бы решительно не устроило. С утилитой красота - жму F8, кристалл прошивается, и прошивка стартует.
Реклама
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

а где "| RCC_APB2ENR_AFIOEN"[/quote]
Пропустил :)
ШИМ заработал после некоторых мучений. Вот код:

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

RCC->AHBENR |= (RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOAEN);
	
	GPIOA->MODER = 0x28000000;
	GPIOB->MODER |= GPIO_MODER_MODER1_1;
	GPIOB->AFR[0] |= 0x00000010;               //ВОТ ОНО, ЗЛО
	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 = 1200;
  TIM3->CR1 |= TIM_CR1_CEN;
GPIOB->AFR[0] |= 0x00000010; . Дело в том, что #define GPIO_AFRH_AFR1 выдаёт в значении "3", а для запуска нужно "1". Все попытки изменить значение ни к чему не привели (в описании тоже ничего), поэтому выход - только числовое значение. :dont_know:
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Леонид Иванович писал(а):Птица эта стоит. Но все равно прошивка не стартует даже после ручного сброса.
УМВР.
Скиньте минимальный глючный проект . Есть 100ки, 103и,F407,F429,F051.
Сразу кучу факторов отсеем...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Опять я к вам :)
Вроде как немного разобрался с АЦП, но есть некоторые проблемы. Вот код (работает):

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

  //	ADC1->CR |= ADC_CR_ADCAL; //Запуск калибровки АЦП
	
  //while (!(ADC1->CR & ADC_CR_ADCAL))
	//	;
	ADC1->SMPR |= (ADC_SMPR_SMP_1);
	ADC1->CFGR1 |= ADC_CFGR1_CONT;
	ADC1->CHSELR |= ADC_CHSELR_CHSEL1;
	ADC1->CFGR2 |= ADC_CFGR2_CKMODE_1;
	ADC1->CR |= ADC_CR_ADEN;
	ADC1->CR |= ADC_CR_ADSTART;
	while (!(ADC1->ISR & ADC_ISR_EOC))
	{
	}		//ждем пока первое преобразование завершится
;
1) Если раскомментировать строки, то бит ADEN не устанавливается. (Да и сам ADCAL почему-то не устанавливается)
2) В отладке КЕЙЛ говорит, что while (!(ADC1->ISR & ADC_ISR_EOC)) не дожидается сброса бита (отладку произвожу построчно, и выход из цикла происходит при ещё установленном бите).
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

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

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

Сообщение isx »

STM32F030F4P6
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Тактирование модуля включено?
Собственно в Keil можешь вручную биты пощелкать .

Завтра вживую проверю , Но судя по картинко, ждем пока ADCAL равен 1 а не 0 .
Итого

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

while (ADC1->CR & ADC_CR_ADCAL){};
Изображение
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

dosikus писал(а):Тактирование модуля включено?
Да, не захватил ту часть кода :)

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

RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
Переделал код:

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

 ADC1->CR |= ADC_CR_ADCAL; //Запуск калибровки АЦП
  while ((ADC1->CR & ADC_CR_ADCAL) == 1)
{
}
		;
	ADC1->SMPR |= (ADC_SMPR_SMP_1);
	ADC1->CFGR1 |= ADC_CFGR1_CONT;
	ADC1->CHSELR |= ADC_CHSELR_CHSEL1;
	ADC1->CFGR2 |= ADC_CFGR2_CKMODE_1;
	ADC1->CR |= ADC_CR_ADEN;
	ADC1->CR |= ADC_CR_ADSTART;
	while ((ADC1->ISR & ADC_ISR_EOC) == 0)
   
	{
	}		//ждем пока первое преобразование завершится
;
Всё работает, но так и не могу отследить установку бита ADCAL и сброс EOC. Может это происходит так быстро, что кейл сам не успевает отобразить?
dosikus писал(а): Завтра вживую проверю
У меня это добро в железе отлаживается, если вы об этом :) ....


Поторопился... Видимо был глюк. Работает только если закомментировать строку ADC1->CR |= ADC_CR_ADCAL; (while даже можно оставить).
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

глянули бы как в примерах делается:

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

/**
  * @brief  Active the Calibration operation for the selected ADC.
  * @note   The Calibration can be initiated only when ADC is still in the 
  *         reset configuration (ADEN must be equal to 0).
  * @param  ADCx: where x can be 1 to select the ADC1 peripheral.
  * @retval ADC Calibration factor 
  */
uint32_t ADC_GetCalibrationFactor(ADC_TypeDef* ADCx)
{
  uint32_t tmpreg = 0, calibrationcounter = 0, calibrationstatus = 0;

  /* Set the ADC calibartion */
  ADCx->CR |= (uint32_t)ADC_CR_ADCAL;
  
  /* Wait until no ADC calibration is completed */
  do
  {
    calibrationstatus = ADCx->CR & ADC_CR_ADCAL;
    calibrationcounter++;  
  } while((calibrationcounter != CALIBRATION_TIMEOUT) && (calibrationstatus != 0x00));
    
  if((uint32_t)(ADCx->CR & ADC_CR_ADCAL) == RESET)
  {
    /*Get the calibration factor from the ADC data register */
    tmpreg = ADCx->DR;
  }
  else
  {
    /* Error factor */
    tmpreg = 0x00000000;
  }
  return tmpreg;
}
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

А существенное там похоже сие

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

 tmpreg = ADCx->DR;
Вычитка DR ... :)))
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

а что не так?
Calibration software procedure:
1. Ensure that ADEN=0
2. Set A DCAL=1
3. Wait until ADCAL=0
4. The calibration factor can be read from bits 6:0 of ADC_DR.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

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

dosikus писал(а):Скиньте минимальный глючный проект
Вот минимальный проект - мигание светодиодами на Discovery с STM32F100RBT6B. Когда запускаю отладку - все нормально, мигают. Когда зашиваю через ST-Link Utility - тоже нормально. А когда делаю в IAR "Download active application", всё замирает.

P.S. Нажал на Discovery копку RESET - всё поехало. Еще раз попробовал на "боевом" проекте (блок питания PSL-3604) - все виснет, сброс не помогает. Глючный проект здесь: http://radiokot.ru/forum/download/file.php?id=182801. Правда, особого смысла разбираться в проблеме нет, так как вручную жать сброс меня решительно не устраивает. Использование утилиты - дело не в "религии", как Вы сразу написали, а в элементарном удобстве.
Вложения
STM_test.zip
(93.73 КБ) 149 скачиваний
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Леонид Иванович писал(а): Использование утилиты - дело не в "религии", как Вы сразу написали, а в элементарном удобстве.
Если нужны удобства,тогда однозначно Keil.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

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

isx писал(а):

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

while ((ADC1->CR & ADC_CR_ADCAL) == 1)
Условие никогда не будет истинно. Нужно выбросить "== 1".
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Леонид Иванович писал(а): Еще раз попробовал на "боевом" проекте (блок питания PSL-3604) - все виснет, сброс не помогает.
То есть при дебагге всегда стартует, при просто прошивке -никогда ? Или иногда стартует?
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

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

Да, именно так. При дебаге всегда стартует, а после download и нажатия сброса - никогда.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Ок . Правда доберусь до железа только в понедельник ...
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Леонид Иванович писал(а):а после download и нажатия сброса - никогда.
Изинямс , только добрался ...
Выбрал скрипт линкера по дефолту, впихнул мигание LED'ми набортными после вашей систем_инит .
Все стартует . С вашим скриптом IAR даже шить не хотел ... :)
Скриптик по кухаркиным статьям с ДиАхтунг'а стряпали ?????
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

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

dosikus писал(а):Скриптик по кухаркиным статьям с ДиАхтунг'а стряпали ?????
Да никаких скриптов я сам не писал. Взял по умолчанию, только увеличил размер HEAP. Если взять скрипт по умолчанию и ничего не менять, то приложение глухо виснет при любом способе прошивки. Это логично - выходим за размер HEAP. Так что проблема пока не решена.
Ответить

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