Страница 3 из 4
Re: STM32 Первый старт
Добавлено: Вт авг 16, 2011 12:52:04
md5sum
Спасибо!
Так что это? Особенность МК 103 серии или ошибка в программе?
В железе ошибки вроде нет - у нас разные платы, а результат один

Re: STM32 Первый старт
Добавлено: Вт авг 16, 2011 14:36:52
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 ед. (см рисунок, специально сильно увеличил что бы было лучше видно)
Я считаю это более чем нормально.
Re: STM32 Первый старт
Добавлено: Вт авг 16, 2011 14:57:19
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 перерыл.
Этого не нашел

Re: STM32 Первый старт
Добавлено: Вт авг 16, 2011 15:01:55
Zheleznjakov
Описался АПЦ вместо ЦАП

--
Ещё думаю нужно было проверить источник питания, чет не посмотрел сильно шумит или нет. Теперь уже завтра гляну.
Re: STM32 Первый старт
Добавлено: Ср авг 17, 2011 05:17:33
Zheleznjakov
Пришел на работу и первым делом проверил питание, УЖАС помехи почти 10 мВ !!!! поставил кондерчики и вот что получил

Думаю если будет заводская и нормально питание развести результат будет ещё лучше.
Re: STM32 Первый старт
Добавлено: Ср авг 17, 2011 06:33:56
Zheleznjakov
Добавил ещё дросселек по питанию... и увеличил частоту с 24 МГц до 72, соотв на АЦП 12 МГц
почему то изменились показания на 8 единиц в плюс, но стабильность по лучше стала.
Re: STM32 Первый старт
Добавлено: Ср авг 17, 2011 09:05:07
md5sum
Спасибо!
На примере UM0919 посмотрел как надо было Vdda разводить.
Жаль под дроссель на моей плате места нет.
Ну на то она и тестовая.
Re: STM32 Первый старт
Добавлено: Ср авг 17, 2011 10:44:32
Zheleznjakov
Поел, и решил снова посмотреть что да как,
нашел источник импульсов - преобразователь для RS232

поставил по питанию RC фильтр и все стало нормально
да же без дросселя и дополнительных кондеров, так что питание я развел нормально

(за исключением RS232

)
(плата
http://ziblog.ru/2011/03/25/demka-dlya-stm32f103cb/)
Re: STM32 TIM1+Прерывание
Добавлено: Пн янв 02, 2012 16:39:47
dinets
dosikus писал(а):Множитель стоял 9 , выставь как на картинке.
8*9=72 однако
а 100RB только 24 могет...

а как вы это окно получили?!?!
и в догонку на какой лапе у ацпшки висит термодатчик?
Re: STM32 TIM1+Прерывание
Добавлено: Пн янв 02, 2012 16:55:45
Satyr
dinets писал(а):
и в догонку на какой лапе у ацпшки висит термодатчик?
на лапе - ни на какой.
а на каком канале - см. мануал.
обычно на последнем.
Re: STM32 Первый старт
Добавлено: Пн янв 02, 2012 19:44:58
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);
} */
}
}
Re: STM32 Первый старт
Добавлено: Пн янв 02, 2012 19:54:31
md5sum
dinets писал(а):насочинял интерестную прожку....
с АЦП и термометром
суть в том что кнопкой сохраняю температуру.
когда температура растёт плано зажигаю зелёный
когда темперетура падает (относительно уставки сделаной кнопкой) плавно зажигается синий
плавно - програмный шим
А теперь то-же самое, но измерения проводить циклически, выборку делать DMA, по прерыванию DMA-halftransfer проверять значение и менять значение аппаратного ШИМ. Кнопку то-же прерыванием обрабатывать.
Так, чтоб основной цикл был for (;;) {}

а-ля домашнее задание

Re: STM32 Первый старт
Добавлено: Пн янв 02, 2012 19:56:06
Satyr
Неправильно
Основной цикл:
while(1) WFI();
Re: STM32 Первый старт
Добавлено: Вт янв 10, 2012 23:24:34
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 постоянно её выполняя
Re: STM32 Первый старт
Добавлено: Вт янв 10, 2012 23:26:36
md5sum
dinets писал(а):аааааа проблема проблема
осваиваю работу с прерываниями.....
значит написал вот код
Код: Выделить всё
.....
void USART1_IRQHandler (void)
{
static int i=0;
i++;
}
[/quote]
В отличии от AVR, тут флаги прерываний нужно ручками очищать :))
Re: STM32 Первый старт
Добавлено: Ср янв 11, 2012 00:00:51
dinets
ещё вопросы....
а как же обработчик SysTick_Handler там ничего не очищают и всё работает?
можно по подробнее про файл startup*.s какой выбирать
почему в одних есть вызов инита в других нет
Две цели ... оперативка и флеш... я думал что у них Гарвардская архитектура.... как это реализованно?
Re: STM32 Первый старт
Добавлено: Ср янв 11, 2012 07:41:50
uk8amk
А таймер Systick входит в процессорное ядро, поэтому флажок очищается автоматически.
dinets писал(а):можно по подробнее про файл startup*.s какой выбирать
Лично я выбрал тот что был из пакета дискавери. Но т.к. инициализирую периферию самостоятельно то просто закомментировал вызов SystemInit.
dinets писал(а):Две цели ... оперативка и флеш... я думал что у них Гарвардская архитектура...
Привыкайте)). Меня поначалу от этого тоже сильно карежило. Прочитайте мануал по CM3 там хорошо все расписано что да как.
Re: STM32 Первый старт
Добавлено: Ср янв 11, 2012 07:48:08
md5sum
uk8amk писал(а):....Прочитайте мануал по CM3 там хорошо все расписано что да как.
Опередил...
Столько буковок удалить пришлось

А мануал, что-б долго не искать, называется PM0056 "STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual"
Re: STM32 Первый старт
Добавлено: Пн янв 23, 2012 00:04:17
dinets
Re: STM32 Первый старт
Добавлено: Пн янв 30, 2012 22:20:11
inkHunter
у кого есть шаблон проекта под keil (STM32F10X), чтобы были там стандартные библиотеки периферии? сам делаю куча ошибок, не получаеться собрать (