STM32 Первый старт

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Спасибо!
Так что это? Особенность МК 103 серии или ошибка в программе?
В железе ошибки вроде нет - у нас разные платы, а результат один :)
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

1) Шумы самого опорника
2) Время преобразования при считывание по документу 5,1 мкс, но не более 17 мкс,
Время преобразования = циклы + 12,5 = ?
при тактовой частоте 72 МГц, максимальная частота АЦП 12 МГц и следовательно необходимо примерно 61 такт - 12,5 = 49
я выбирал 55,5 что удовлетворяет условиям. Получалось значение+-4 ед.
Но параметры на АЦП приведены при тактовой 14 МГц, а это можно обеспечить при максимальной общей таковой 56 МГц, количество тактов на преобразования соответственно равно 71-12,5=59 т.е. можно оставить как было 55,5. При данной конфигурации у меня получилось значение+-3,5. Особо не улучшилось, спишем на погрешность :)
Приведенные выше измерения я проводил очень часто (программа базировалась на старом коде), решил снизить частоту дискретизации до 50 Гц, результат получился лучше максимум +-2 ед. (см рисунок, специально сильно увеличил что бы было лучше видно)
Я считаю это более чем нормально.
Вложения
рис4.JPG
(79.41 КБ) 801 скачивание
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Zheleznjakov писал(а):2) Время преобразования при считывание по документу 5,1 мкс, но не более 17 мкс,
Ух..
Я правильно тогда считаю:
72МГц, Прескалер АЦП - 8 итого частота АЦП=9МГц
17мкс это 153 такта, 153-12.5=140.5 максимум
5.1мкс это 45.9 такта, 45.9-12.5=33.4 минимум

Зы: поправил.
А по какому документу время преобразования? Я наверное пол сайта ST перерыл.
Этого не нашел :(
Последний раз редактировалось md5sum Вт авг 16, 2011 15:08:46, всего редактировалось 1 раз.
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Описался АПЦ вместо ЦАП :)
--
Ещё думаю нужно было проверить источник питания, чет не посмотрел сильно шумит или нет. Теперь уже завтра гляну.
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Пришел на работу и первым делом проверил питание, УЖАС помехи почти 10 мВ !!!! поставил кондерчики и вот что получил :)
Думаю если будет заводская и нормально питание развести результат будет ещё лучше.
Вложения
рис5.JPG
(57.91 КБ) 1084 скачивания
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Реклама
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Добавил ещё дросселек по питанию... и увеличил частоту с 24 МГц до 72, соотв на АЦП 12 МГц
почему то изменились показания на 8 единиц в плюс, но стабильность по лучше стала.
Вложения
рис6.JPG
(52.02 КБ) 800 скачиваний
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Спасибо!
На примере UM0919 посмотрел как надо было Vdda разводить.
Жаль под дроссель на моей плате места нет.
Ну на то она и тестовая.
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Поел, и решил снова посмотреть что да как,
нашел источник импульсов - преобразователь для RS232 :) поставил по питанию RC фильтр и все стало нормально
да же без дросселя и дополнительных кондеров, так что питание я развел нормально :) (за исключением RS232 :()
(плата http://ziblog.ru/2011/03/25/demka-dlya-stm32f103cb/)
Вложения
рис7.JPG
(41.93 КБ) 763 скачивания
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
dinets
Потрогал лапой паяльник
Сообщения: 360
Зарегистрирован: Чт авг 12, 2010 10:16:32

Re: STM32 TIM1+Прерывание

Сообщение dinets »

dosikus писал(а):Множитель стоял 9 , выставь как на картинке.
8*9=72 однако :)))
а 100RB только 24 могет...

Изображение
а как вы это окно получили?!?!

и в догонку на какой лапе у ацпшки висит термодатчик?
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: STM32 TIM1+Прерывание

Сообщение Satyr »

dinets писал(а): и в догонку на какой лапе у ацпшки висит термодатчик?
на лапе - ни на какой.
а на каком канале - см. мануал.
обычно на последнем.
dinets
Потрогал лапой паяльник
Сообщения: 360
Зарегистрирован: Чт авг 12, 2010 10:16:32

Re: STM32 Первый старт

Сообщение dinets »

да получилось

насочинял интерестную прожку....
с АЦП и термометром

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

плавно - програмный шим

вот код

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

int a=0;
	   int b=0;
	    int  adc,adc1; 
			   void ADC_RBat(void)                   
{   
    ADC1->CR2 |= ADC_CR2_SWSTART;     //Çàïóñê ïðåîáðàçîâàíèÿ
    while (!(ADC1->SR & ADC_SR_EOC))  //Æäåì îêîí÷àíèÿ ïðåîáðàçîâàíèÿ
    { 
    }
    adc = ADC1->DR;                   //Ñ÷èòûâàåì äàííûå
   // adcLSB = adc;                     //Âûäåëÿåì ìëàäøóþ ÷àñòü
  //  adc>>=8;                          //Ñäâèãàåì
  //  adcMSB = adc;                     //È âûäåëÿåì ñòàðøóþ ÷àñòü
return;
}
void SysTick_Handler (void) {
  static uint32_t ticks;
  static int bl=0;

  if (ticks++ >= LED_BLINK_RATE) {
    ticks    = 0;
    ledBlink = 1;
  }
//	if(bl==0) {bl=1; LED_On(0)   ;  return;}
 // 	if(bl==1) {bl=0; LED_Off(0)   ;  }
	   ADC_RBat();
	//   b+=1;
	   
}


/*----------------------------------------------------------------------------
  MAIN function
 *----------------------------------------------------------------------------*/ 
 
int main (void) {

  LED_Config();
  BTN_Config();    
                           
   RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;  //Ïîäêëþ÷àåì ÀÖÏ ê ëèíèè òàêòèðîâàíèÿ
  RCC->CFGR |= RCC_CFGR_ADCPRE;        //Ïðåääåëèòåëü íà ìàêñèìóì (íà 8)
  RCC->CFGR |= RCC_CFGR_ADCPRE_DIV8;

    ADC1->CR2 |= ADC_CR2_CAL;          //Çàïóñê êàëèáðîâêè (ýòî íóæíî ñäåëàòü ÄÎ óñòàíîâêè ADON)
    while (!(ADC1->CR2 & ADC_CR2_CAL))
    {
    }
//  ADC1->SQR3 |= (ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_3); //âûáèðàåì 10é êàíàë (PC0)
   ADC1->SQR3=16  ;	  //à âîò íèôèãà þçàåì 16 âõîä ýòî òåðìîìåòð
  ADC1->CR2 |= (ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTTRIG|ADC_CR2_TSVREFE);
  ADC1->CR2 |= ADC_CR2_ADON;
  //GPIOC->CRL &= ~GPIO_CRL_CNF0;                        //Àíàëîãîâûé âõîä (ýòî ÀÖÏ, 10é êàíàë)
  //GPIOC->CRL &= ~GPIO_CRL_MODE0;


	

  SysTick_Config(SystemCoreClock / 10000);       /* Setup SysTick Timer  (10ms) */
  	
  while(1) { 

	  if(adc<=adc1){
	   if(a>b) 
	   {LED_Off(1); }	
	   
		  if(a<=b) 
		  {  LED_On(1);}	
		  
					 }
					 	  if(adc>=adc1){
	   if(a>b) 
	   {LED_Off(0); }	
	   
		  if(a<=b) 
		  {  LED_On(0);}	
		  
					 }
								b= (adc1-adc)*10;
								if(b<0) b=b*-1;
								a++;
							if (a>1000) a=0;
							if(b>1000) b=1000;
				 if (BTN_Pressed()) 
					//	if(BTN_Get())
					{	    //  b += 1;
				//	b= 50-(adc1-adc);
				if(b>100) b=0;
									
									adc1=adc;
										 }




   	/*
    if (BTN_Pressed()) {
    //  ledVal += 1;
      if (ledVal > 3) ledVal = 1;
    }

    if (ledBlink == 1) {
      ledBlink  = 0;
	  ledOn    ^= 1;
	  if (ledOn == 1)
        LED_Out (ledVal);                      
      else 
        LED_Out (0);                             
	
	}	*/ 
  }
  
}
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

dinets писал(а):насочинял интерестную прожку....
с АЦП и термометром

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

плавно - програмный шим
А теперь то-же самое, но измерения проводить циклически, выборку делать DMA, по прерыванию DMA-halftransfer проверять значение и менять значение аппаратного ШИМ. Кнопку то-же прерыванием обрабатывать.
Так, чтоб основной цикл был for (;;) {}
:))) а-ля домашнее задание :beer:
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: STM32 Первый старт

Сообщение Satyr »

Неправильно :)))

Основной цикл:

while(1) WFI();
dinets
Потрогал лапой паяльник
Сообщения: 360
Зарегистрирован: Чт авг 12, 2010 10:16:32

Re: STM32 Первый старт

Сообщение dinets »

аааааа проблема проблема
осваиваю работу с прерываниями.....
значит написал вот код

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

.....
void USART1_IRQHandler (void)
{

static	 int i=0;
				 i++;
}
.........

u8 SMS[]="Hello, my name is STM32F100RB!";
   u32 tmp=0; 

 //  __enable_irq ();  // Ðàçðåøèòü ïðåðûâàíèÿ IRQ. 

   NVIC_EnableIRQ (USART1_IRQn ); 

 RCC->APB2ENR|= RCC_APB2ENR_IOPAEN; // Ðàçðåøèòü òàêòèðîâàíèå ïîðòà A.

     RCC->APB2ENR|= RCC_APB2ENR_AFIOEN; // Òàêòèðîâàíèå àëüòåðíàòèâíûõ ôóíêöèé GPIO.

     RCC->APB2ENR|= RCC_APB2ENR_USART1EN; // Âêëþ÷åíèå òàêòèðîâàíèÿ USART1.

     GPIOA->CRH |= GPIO_CRH_MODE9; // Âûâîä TX PA.9 - íà âûõîä.

     GPIOA->CRH &=~GPIO_CRH_CNF9; GPIOA->CRH |=GPIO_CRH_CNF9_1; // Àëüòåðíàòèâíûé âûõîä.

     USART1->CR1 |=(USART_CR1_RE | USART_CR1_TE); // Ðàçðåøèòü âûâîäû RX, TX - PA10, PA9.

     // Ñêîðîñòü 115.2 kbps. USARTDIV=FSYS/(16*baud) = 8e6/(16*115200) = 4,34.
     USART1->BRR=(78<<4); // Öåëàÿ ÷àñòü êîýôôèöèåíòà äåëåíèÿ USART1. 

     USART1->BRR|=125; // Äðîáíàÿ ÷àñòü*16 = 0,34*16 = 5 (îêð).
	 USART1->CR1 |=USART_CR1_TCIE | USART_CR1_RXNEIE;
	 // USART1->CR1 =USART_CR1_RXNEIE ;
     USART1->CR1 |=USART_CR1_UE; // Âêëþ÷åíèå USART1.

		    while (SMS[tmp]) // Ïîêà íå êîíåö ñòðîêè...
     {
          while (!(USART1->SR & USART_SR_TXE)) {} // Æäàòü îñâîáîæäåíèÿ áóôåðà.
          USART1->DR=SMS[tmp]; tmp++; // Îòïðàâèòü áàéò.
     }
в итоге программа зависает на функции USART1_IRQHandler постоянно её выполняя
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

dinets писал(а):аааааа проблема проблема
осваиваю работу с прерываниями.....
значит написал вот код

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

.....
void USART1_IRQHandler (void)
{

static	 int i=0;
				 i++;
}
[/quote]
В отличии от AVR, тут флаги прерываний нужно ручками очищать :))
— Не говорите мне что делать и я не скажу куда Вам идти...
dinets
Потрогал лапой паяльник
Сообщения: 360
Зарегистрирован: Чт авг 12, 2010 10:16:32

Re: STM32 Первый старт

Сообщение dinets »

ещё вопросы....

а как же обработчик SysTick_Handler там ничего не очищают и всё работает?

можно по подробнее про файл startup*.s какой выбирать
почему в одних есть вызов инита в других нет

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

  LDR     R0, =SystemInit
                 BLX     R0
Две цели ... оперативка и флеш... я думал что у них Гарвардская архитектура.... как это реализованно?
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: STM32 Первый старт

Сообщение uk8amk »

А таймер Systick входит в процессорное ядро, поэтому флажок очищается автоматически.
dinets писал(а):можно по подробнее про файл startup*.s какой выбирать
Лично я выбрал тот что был из пакета дискавери. Но т.к. инициализирую периферию самостоятельно то просто закомментировал вызов SystemInit.
dinets писал(а):Две цели ... оперативка и флеш... я думал что у них Гарвардская архитектура...
Привыкайте)). Меня поначалу от этого тоже сильно карежило. Прочитайте мануал по CM3 там хорошо все расписано что да как.
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

uk8amk писал(а):....Прочитайте мануал по CM3 там хорошо все расписано что да как.
Опередил...
Столько буковок удалить пришлось :(
А мануал, что-б долго не искать, называется PM0056 "STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual"
— Не говорите мне что делать и я не скажу куда Вам идти...
dinets
Потрогал лапой паяльник
Сообщения: 360
Зарегистрирован: Чт авг 12, 2010 10:16:32

Re: STM32 Первый старт

Сообщение dinets »

игра с ШИМом и RGB светодиодами
http://www.youtube.com/watch?v=hr-696XkIBQ
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 Первый старт

Сообщение inkHunter »

у кого есть шаблон проекта под keil (STM32F10X), чтобы были там стандартные библиотеки периферии? сам делаю куча ошибок, не получаеться собрать (
Ответить

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