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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

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

Сообщение shads »

dosikus писал(а):JLink - программатор/отладчик . Работает с IAR,Keil, легко прикручивается к EClipse .
Работает с

ARM7/9/11
Cortex-A5/A8/A9
Cortex-M0/M0+/M1/M3/M4
Cortex-R4
Renesas RX610, RX621, RX62N, RX62T, RX630, RX631, RX63N


http://www.segger.com/jlink_base.html
Горячая штучка... возьму себе.....
Реклама
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

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

Сообщение shads »

ECLIPSE нормальная среда?
Нашел вроде на русском что-то про нее
http://makesystem.net/?p=988
http://kazus.ru/forums/attachment.php?a ... 1372578597

Или IAR или KEIL будут по серьезнее?
Реклама
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

Eclipse свободная, насчет двух других не интересовался, но полагаю, они проприетарные. Я выберу однозначно свободную.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

shads писал(а):ECLIPSE нормальная среда?

Каждый новый проект ручками настраиваем и ручками прикручиваем дебаг .
Плюс таскаем исходники так же ручками с сайта производителя и CMSIS свежий с ARM.
Навороченный редактор исходников со всевозможными фичами .
Никакой отладчик.
Зато халява.

shads писал(а):Или IAR или KEIL будут по серьезнее?

Все включено . Создание проекта максимум автоматизированно . Бесплатно до 32кб.
В Keil отличный отладчик. Для STM32F103 (не для всех камней) так же навороченный симулятор.
Вылеченные версии не проблема.
Редактор исходников в IAR аскетичный в Keil более продвинутый.


На фоне всего этого маячит бледная тень CooCox - урезанный Eclipse с попыткой автоматизации через анус.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Darth Cuauhtemoc писал(а):Eclipse свободная, насчет двух других не интересовался, но полагаю, они проприетарные.


Не забываем добавить - Eclipse не для новичков... :)))
Реклама
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

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

Сообщение shads »

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

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

Сообщение dosikus »

shads писал(а):Чтото типа как у CVAVR ?

Ну нет , визардов подобных CVAVR и на не надобно .
Визард CVAVR - это шаблоны кода.
Здесь речь о настройки компилятора , самого проекта и т.д.
Выбираете камень - все необходимые ключи прописываются автоматом.
Далее настройка опций сведена к минимуму .
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

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

Сообщение РадиоЛоматель »

Satyr писал(а):Вы че народ ?
самый кошерный J-link клон из китая с ДОСТАВКОЙ стоит до 20$

Заказал я себе этот клон. J-Link v8, такой, как тут: http://de1fer.ru/?p=146
Приехал он. Включил - все хорошо, вроде. Но только как-то неустойчиво система определила это устройство. Сначала несколько подключений подряд было "неопознанное устройство". Две минуты полежало - стало опознаваться. Драйвера поставил. Запустил иар, попробовал прошить без подключенного контроллера (проверить, выдаст ли no target) Потребовал обновить прошивку. Нажал обновить. Выползло окошко, где мне бодренько объяснили, что прошивку обновить не удалось (Передача данных прошивки - 0% Ошибка: Обновление прошивки невозможно). И с тех пор понеслось - не определяется, если определяется, то виснет.. Решил запустить самбу и залить прошивку по новой. Стирание прошло успешно, да. Самба определилась один раз после десятого подключения, но драйвера не стали (Код 10, запуск невозможен), соответственно, утилита не шьет. Теперь снова не определяется.
Вот сижу и смотрю, на что ушли мои 20$ и морока по доставке этого дерьмотрона. Короче, заказываю я детали на ST-LINK.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

РадиоЛоматель писал(а):Заказал я себе этот клон. J-Link v8, такой, как тут: http://de1fer.ru/?p=146
.


У вас именно тот что на фото по ссылке ? Похоже на наколенную поделку.
Мой JLink с синей платой , сборка отличная, светодиод попадает точно в отверстие. Работает так же отлично.
Так что Вам просто не повезло...
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

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

Сообщение РадиоЛоматель »

dosikus писал(а):У вас именно тот что на фото по ссылке ? Похоже на наколенную поделку.

Плата зеленая. Но немного по другому расположены кварцевый резонатор и резисторы для USB. У меня действительно клон. Ну, мучаю его сейчас. Перебрав всю сторону с usb добился устойчивой работы sam-ba. Пробую разные прошивки. Ни одна не определяется системой устойчиво. Обновление прошивки через J-Link Commander так ни разу и не получилось сделать.

ПС. Написал это сообщение, и после этого наконец все сработало с прошивкой V84.10.rar отсюда: http://electronix.ru/forum/index.php?showtopic=59841&hl=китаёза&st=105
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

РадиоЛоматель писал(а): У меня действительно клон.

Так у меня так же клон . :)))
Кидайте в личку мыло , скину вам набор для repair .
Прошивка v8_466 . Последние дрова от Segger прекрасно работают.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

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

Сообщение Satyr »

У меня есть и родной сеггер, и китайские клоны - во всем абсолютно одинаковы.
Serj_K
Опытный кот
Сообщения: 718
Зарегистрирован: Сб апр 14, 2012 16:11:35

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

Сообщение Serj_K »

Попробовал свой клон STLink-V2 в режиме отладчика с LPC1758 под CoIDE - работает. Есть нюанс - нужно отключать проверку после записи прошивки - выдаёт ошибку, хотя прошивка записывается правильно. Отнесу это к работе STLink в CoIDE с неродным чипом.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

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

Сообщение КАШАК »

Доброго времени суток.

Пытаюсь подружить ST32F103VCT6 с SD картой. В принципе мне это удалось, и чтение и запись работают (использую FatFs). Но, если включаю DMA, МК виснет. Функция выглядит вот так:

Спойлер

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

static
void stm32_dma_transfer(
   BOOL receive,      /* FALSE for buff->SPI, TRUE for SPI->buff               */
   const BYTE *buff,   /* receive TRUE  : 512 byte data block to be transmitted
                     receive FALSE : Data buffer to store received data    */
   UINT btr          /* receive TRUE  : Byte count (must be multiple of 2)
                     receive FALSE : Byte count (must be 512)              */
)
{
   DMA_InitTypeDef DMA_InitStructure;
   WORD rw_workbyte[] = { 0xffff };

   /* shared DMA configuration values */
   DMA_InitStructure.DMA_PeripheralBaseAddr = (DWORD)(&SPI2->DR);
   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
   DMA_InitStructure.DMA_BufferSize = btr;
   DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

   DMA_DeInit(DMA1_Channel4);
   DMA_DeInit(DMA1_Channel5);

   if ( receive ) {

      /* DMA1 channel4 configuration SPI2 RX ----------*/
      DMA_InitStructure.DMA_MemoryBaseAddr = (DWORD)buff;
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
      DMA_Init(DMA1_Channel4, &DMA_InitStructure);

      /* DMA1 channel5 configuration SPI2 TX ----------*/
      DMA_InitStructure.DMA_MemoryBaseAddr = (DWORD)rw_workbyte;
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
      DMA_Init(DMA1_Channel5, &DMA_InitStructure);

   } else {

      /* DMA1 channel4 configuration SPI1 RX ----------*/
      DMA_InitStructure.DMA_MemoryBaseAddr = (DWORD)rw_workbyte;
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
      DMA_Init(DMA1_Channel4, &DMA_InitStructure);

      /* DMA1 channel5 configuration SPI1 TX ----------*/
      DMA_InitStructure.DMA_MemoryBaseAddr = (DWORD)buff;
      DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
      DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
      DMA_Init(DMA1_Channel5, &DMA_InitStructure);

   }

   /* Enable DMA1 Channel4 */
   DMA_Cmd(DMA1_Channel4, ENABLE);
   /* Enable DMA1 Channel5 */
   DMA_Cmd(DMA1_Channel5, ENABLE);

   /* Enable SPI2 TX/RX request */
   SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Rx | SPI_I2S_DMAReq_Tx, ENABLE);

   /* Wait until DMA1_Channel 4 Transfer Complete */
   // while (DMA_GetFlagStatus(DMA1_FLAG_TC5) == RESET) { ; }
   /* Wait until DMA1_Channel 5 Receive Complete */
   while (DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET);
   // same w/o function-all:
   // while ( ( ( DMA1->ISR ) & DMA1_FLAG_TC2 ) == RESET ) { ; }

   /* Disable DMA1 Channel4 */
   DMA_Cmd(DMA1_Channel4, DISABLE);
   /* Disable DMA1 Channel5 */
   DMA_Cmd(DMA1_Channel5, DISABLE);

   /* Disable SPI2 RX/TX request */
   SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Rx | SPI_I2S_DMAReq_Tx, DISABLE);
}


Инициализация SPI:
Спойлер

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

static
void power_on (void)
{
   SPI_InitTypeDef  SPI_InitStructure;
   GPIO_InitTypeDef GPIO_InitStructure;
   volatile BYTE dummyread;

   RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;

   _delay_ms(250);

   /* Configure I/O for Flash Chip select */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CS;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIO_CS, &GPIO_InitStructure);

   /* Deselect the Card: Chip Select high */
   DESELECT();

   /* Configure SPI2 pins: SCK and MOSI with default alternate function (not remapped) push-pull */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
   /* Configure MISO as Input with internal pull-up */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
   GPIO_Init(GPIOB, &GPIO_InitStructure);

   /* SPI2 configuration */
   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 72000kHz/256=281kHz < 400Hz
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
   SPI_InitStructure.SPI_CRCPolynomial = 7;
   SPI_Init(SPI2, &SPI_InitStructure);

   SPI_CalculateCRC(SPI2, DISABLE);

   /* Enable SPIx  */
   SPI_Cmd(SPI2, ENABLE);

   /* drain SPI */
   while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) { ; }
   dummyread = SPI_I2S_ReceiveData(SPI2);

#ifdef STM32_USE_DMA
   /* enable DMA clock */
   RCC->APB1ENR |= RCC_AHBPeriph_DMA1;
#endif
}

Функции готовые из библиотеки diskio.c, только переделал под SPI2. Экспериментальным путем выяснил, что зависание происходит на строке:

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

while (DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET);


При этом, если отключить SD карту, зависания нет. Что я делаю неправильно?
Вложения
SD.rar
(31.23 КБ) 306 скачиваний
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

У STM32 ограничение тока короткого замыкания на выходах есть? Или сгорает?
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

Сгорает :kill:
Если есть опасения за порт, можно поставить буфер на ОУ со встроенной защитой от перегрузки по току, ну или просто резистор прицепить.
Иван Сусанин - первый полупроводник :solder:
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

Myp3ik писал(а):ну или просто резистор прицепить.

Хочу сделать макетку, поэтому ОУ не подойдет, а вот резистор - самое оно.

А к статике как относится? Защита входов есть? Можно лапать и паять, не заземляя себя и паяльную станцию?
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

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

Сообщение Myp3ik »

Сколько я их грязными руками не перелапал, то все живы. Если носите одежду которая электризуется, то перед тем как брать МК дотронтесь до массивного металлического или заземленного предмета.
При пайке я просто отключаю от платы проводники которые гальванически связаны с питающей сетью или землей.
Иван Сусанин - первый полупроводник :solder:
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

Сообщение Darth Cuauhtemoc »

Понятно, значит особых мер, в сравнении с теми же AVR по защите от статики предпринимать не нужно.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Обфускатор
Родился
Сообщения: 13
Зарегистрирован: Пн апр 29, 2013 22:05:08

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

Сообщение Обфускатор »

Решил не создавать новую тему и спросить здесь.
Имеется отладочная плата stm32l152 discovery на ней есть выход программатора swd.
Имеется демо плата собранная вручную на базе кристалла stm32f103C8.
Камень шьется и читается по swd без проблем (как из Keil 4.5 так и из STM32 ST-LINK Utility) , но программа после RESET не выполняется.
Программа рабочая (просто мигаем светодиодом) гонял на симуляторе. данные на нужном pin нужного порта меняются.
Пытался запустить дебагер из Keil 4.5, дебагер стартует загружает состояние регистров контроллера (т.е. при старте состояние регистров я вижу) далее при пошаговом прогоне кода дебагер шагает диод на discovery мигает, НО состояние регистров в дебагере не изменяется (т.е те выводы, как были выставлены по умолчанию в Z состояние так и остались), даже если в дебагере принудительно вводить какие либо данные в регистры они тут же сбрасываются в предыдущее состояние.

Дополнительная информация:
boot0,boot1 притянуты к земле reset на 1.
кварц внешний 12 Мгц посажен на емкости 22р. но в проекте пока что использую HSI.
питание стабилизированное 3,3в куча емкостей по 0,1u 0,47u.
Светодиод висит на 1 пине порта А.
камень stm32f103 корпус lqfp48

кусок кода для тестирования платы:

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

#include <stm32f10x.h>
#include <misc.h>
void delay()
{
   int j=0,i=0;
   unsigned int count=0;
   
      for (j=0;j<50;j++)
      for (i=0;i<65535;i++)
      count++;
   
}
void clock_setup()
{
   RCC->CR |= RCC_CR_HSION; //Включаем тактовый генератор HSI
        while(!(RCC_CR_HSIRDY)); //Ждем его стабилизации
   RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1.
        RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбираем источником тактовой частоты SYSCLK генератор HSI
 
}
void Init_GPIO()
{
   GPIO_InitTypeDef gpio;
   GPIO_StructInit(&gpio);
   RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
   
   gpio.GPIO_Mode = GPIO_Mode_Out_PP;
   
   gpio.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
   gpio.GPIO_Speed=GPIO_Speed_2MHz;
        GPIO_Init(GPIOA, &gpio);

   
   GPIO_WriteBit(GPIOA, GPIO_Pin_1|GPIO_Pin_0, Bit_RESET);
   GPIO_WriteBit(GPIOA, GPIO_Pin_1|GPIO_Pin_0, Bit_RESET);
   
   
   
}

int main(void)
{
   clock_setup();
   Init_GPIO();
   
   
   do{
      
         GPIO_WriteBit(GPIOA, GPIO_Pin_1|GPIO_Pin_0, Bit_SET);
         delay();
         GPIO_WriteBit(GPIOA, GPIO_Pin_1|GPIO_Pin_0, Bit_RESET);
         delay();
      }while(1);
   
}


Вопрос по каким причинам может не работать дебагер и программа?
Ответить

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