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

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

Сообщение JeikiS »

ploop писал(а):У меня F4-DISCOVERY
Но смысл в том, что F0 анонсировали как очень дешёвые чипы, этим и заинтересовали. Но вот незадача - их нет нигде, а где попадались, то либо крупными партиями, либо дороже F3их...
в Мегаэлектроннике в Питере по 126 рублей за STM32F051R8T6
по цене 168-й меги
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

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

Сообщение TripleKill »

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

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

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

Сообщение HHIMERA »

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

Сообщение radiokot__ »

ploop писал(а):Я F103C8T6 по 3$ покупаю. Он явно повкуснее. Смысл тогда в этом F0?
В этих STM вобще нет никакого смысла.
Ни один домашний кот незнает что он домашний.
Реклама
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Сообщение TripleKill »

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

Сообщение ploop »

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

Сообщение HHIMERA »

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

Сообщение HHIMERA »

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

Сообщение TripleKill »

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

Сообщение radiokot__ »

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

Сообщение ploop »

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

Сообщение HHIMERA »

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

Сообщение radiokot__ »

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

Сообщение 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!
Контактная информация:
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

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

Сообщение BOB51 »

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

Сообщение Foks »

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

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

Сообщение 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!
Контактная информация:
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Сообщение TripleKill »

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

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

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

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