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

Кто любит RISC в жизни, заходим, не стесняемся.
JeikiS
Родился
Сообщения: 6
Зарегистрирован: Ср июн 29, 2011 08:22:05

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение JeikiS »

ploop писал(а):У меня F4-DISCOVERY
Но смысл в том, что F0 анонсировали как очень дешёвые чипы, этим и заинтересовали. Но вот незадача - их нет нигде, а где попадались, то либо крупными партиями, либо дороже F3их...


в Мегаэлектроннике в Питере по 126 рублей за STM32F051R8T6
по цене 168-й меги
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение ploop »

Я F103C8T6 по 3$ покупаю. Он явно повкуснее. Смысл тогда в этом F0?
Реклама
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

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

Сообщение TripleKill »

Подскажите, кто знает. Плата STM32F4 Discovery. IDE Keil.

Написал с примеров небольшую программку, которая с помощью DMA одновременно снимает показания с двух АЦП и складывает в массив, далее по кольцу его переписывает. На входы АЦП попадает смещённая синусоида, которая не выходит за пределы 0...3 В.

Вопрос вот в чём. Когда я включаю дебаг, данные в массиве меняются на экране (вынесен в Watch). Я попробовал построить синусоиду по значениям за одно изменение, и получается какая-то чушь. Есть подозрение, что дебагер пытается всё делать в реальном времени, и потому отсчёты берутся уж очень медленно (а синусоида 2 кГц). Либо он просто выплёвывает текущее содержимое массива, но т.к. массив обновляется быстрее, на экране оказываются данные разных проходов. Кто-нибудь может это подтвердить или опровергнуть? И как отключить этот постоянный вывод на время, чтоб не гнать постоянно через ST-Link кучу данных, а посмотреть один чистый проход DMA?
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

Дебаг не останавливает периферию... она продолжает работать...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
radiokot__
Мучитель микросхем
Сообщения: 454
Зарегистрирован: Вс янв 15, 2012 19:58:40

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение radiokot__ »

ploop писал(а):Я F103C8T6 по 3$ покупаю. Он явно повкуснее. Смысл тогда в этом F0?


В этих STM вобще нет никакого смысла.
Ни один домашний кот незнает что он домашний.
Реклама
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

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

Сообщение TripleKill »

Я не говорил, что останавливает. Говорил, что периферия работает со скоростью дебагера, либо дебагер не успевает за ней.
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение ploop »

В каких именно?
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

Периферия работает в ральном времени и работает со скоростью тактирования...
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение HHIMERA »

radiokot__ писал(а):В этих STM вобще нет никакого смысла.

Ну почему же... ))
К F0 влёгкую подключается горячо любимый тобой дисплей N1616... )))))
Там SPI девятибитный можно выставить и дрыгание SS хардварно...
NXP давно выпускают LPC11XX... тоже F0...
"Я не даю готовых решений, я заставляю думать!"(С)
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

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

Сообщение TripleKill »

Ясно, спасибо.
Аватара пользователя
radiokot__
Мучитель микросхем
Сообщения: 454
Зарегистрирован: Вс янв 15, 2012 19:58:40

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение radiokot__ »

ploop писал(а):В каких именно?


Видимо во всех (хотя F4 незнаю).
Эти STM наподобие китайских автомобилей феррари.
Нафаршированны под завязку только толку от этого нет.
Ни один домашний кот незнает что он домашний.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение ploop »

Странно... у всех есть, у вас нет. Ну да ладно. Только непонятно, что вы делаете в этой теме? Холиваров тут не будет.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение HHIMERA »

radiokot__ писал(а):Эти STM наподобие китайских автомобилей феррари.
Нафаршированны под завязку только толку от этого нет.

:))) :)))
Это по какому радио такое говорили???
:))
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
radiokot__
Мучитель микросхем
Сообщения: 454
Зарегистрирован: Вс янв 15, 2012 19:58:40

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение radiokot__ »

ploop писал(а):Странно... у всех есть, у вас нет. Ну да ладно. Только непонятно, что вы делаете в этой теме? Холиваров тут не будет.


По началу мне тоже было интересно (видимо как и всем) что это за зверь STM.
Но позже я очередной раз убедился что безплатный сыр только в мышеловке.
Ни один домашний кот незнает что он домашний.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

У меня вопрос по DMA. Пытаюсь отправить массив по UART через DMA, но оно так и не заработало.
Посылки вручную уходят, то есть, USART настроен правильно. МК - STM32F407VGT6 (Z). Прилагаю код:

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


const char arr
[8] = {'H', 'E', 'L', 'L', 'O', '!', 13, 0};

void InitAll(void)
{
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //Enable GPIO A
  GPIOA->MODER |= (2<<(2*2)) | (2<<(3*2)); //(DATA << (NO_PIN * SIZE_CONF_BYTE))
  GPIOA->OTYPER = 0x00000000; //Out D type Push-Pull
  GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR2_0;
  GPIOA->PUPDR = 0x00000000; //Not Pull Up/Down
  GPIOA->AFR[0] |= (7<<(2*4))|(7<<(3*4));
  GPIOA->AFR[1] |= 0x0000;

  RCC->APB1ENR |= RCC_APB1ENR_USART2EN; //Enable USART2
  USART2->BRR  = USART_DIV; //(temp0<<4)|(temp1 & 0x0F);
  USART2->CR2  = 0x00000000;
  //USART2->CR3  = USART_CR3_DMAT;
  USART2->CR1 |= USART_CR1_OVER8 
               
| USART_CR1_UE 
               
| USART_CR1_TE 
               
| USART_CR1_RE ;

  RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN;
  DMA_InitTypeDef DMA_InitStructure;
  DMA_InitStructure.DMA_Channel = DMA_Channel_0; 
  DMA_InitStructure
.DMA_PeripheralBaseAddr = (uint32_t)&USART2->DR;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&arr[0];
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
  DMA_InitStructure.DMA_BufferSize = sizeof(arr);
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure
.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA1_Stream0, &DMA_InitStructure);
  DMA_Cmd(DMA1_Stream0, ENABLE);
  USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE);
}
 



UPD:
Да уж..... Более внимательное чтение даташита помогает. Разобрался. Заработало.
Изменения в коде:

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

........
  DMA_InitStructure.DMA_Channel = DMA_Channel_4;
...........
  DMA_Init(DMA1_Stream6, &DMA_InitStructure);
  DMA_Cmd(DMA1_Stream6, ENABLE);
........
I am DX168B and this is my favourite forum on internet!
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение HHIMERA »

Какой сыр... какая мышеловка??? :)))
STM, LPC, TI и т.д. ... какая разница???
Добро пожаловать в мир Cortex!!! :))
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: STM32F0 Discovery не вызывает интереса многоуважаемых ко

Сообщение BOB51 »

насчет бесплатного сыра... скорее модного...
у нас уже stm32f4 discovery валяются... по 250 гривночков (f0=150) :)))
интересно, а кто самоделки на комплектах северного/южного мостов, да на хотя-бы 486-х делал? :facepalm: (на i8080&Z80 их весьма монго было)
да и мир сей не кортексов, а армов - stm32 всего лиш один из подвидов 8)
Foks
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

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

Сообщение Foks »

F0 не хуже F4, она для других задач.

STM32 - это периферия, а ядро Cortex - действительно одно из подвидов ARM.
Giggity giggity goo!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

TripleKill писал(а):Я пока вот к такому пришёл:

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

GPIOC->ODR=GPIO_ODR_ODR8 & ~(GPIOC->IDR & GPIO_IDR_IDR8);


К чему такие сложности? Так тоже работает

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

GPIOC->ODR ^= GPIO_ODR_ODR8;
I am DX168B and this is my favourite forum on internet!
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

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

Сообщение TripleKill »

Да, работает. Не помню, писал ли я где-то здесь, но окончательный вариант получился как у вас. Просто сразу про такую запись не сказали, вот и пробовал по-всякому.
UPD. Таки писал) http://radiokot.ru/forum/viewtopic.php?p=1209048#p1209048.

Раз уж мы здесь, есть вопрос. Плата F4 Discovery. С примеров надёргал кусков кода, с помощью DMA АЦП задействован в режиме одновременного съёма показаний. Код в аттаче.
Сигнал смещённой синусоиды подключён одним проводом к двум каналам (10, 11). Диод зажигается, если значения, одновременно (!) снятые двумя АЦП, одинаковы.
Казалось бы, он должен всегда светиться, и на вид это так, однако на осциллографе видно, что значения одинаковы не всегда.
Вопрос вот в чём: правильно ли вообще так проверять одинаковость (как бы DMA работает без участия ядра, и просто по кольцу складывает данные в массив)?
И как тогда правильно проверить? Сделать прерывание по DMA?

Спасибо.
Вложения
Main.c
(4.61 КБ) 522 скачивания
Ответить

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