Горячая штучка... возьму себе.....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
STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
- Реклама
Re: STM32 новичку в ARM что к чему
ECLIPSE нормальная среда?
Нашел вроде на русском что-то про нее
http://makesystem.net/?p=988
http://kazus.ru/forums/attachment.php?a ... 1372578597
Или IAR или KEIL будут по серьезнее?
Нашел вроде на русском что-то про нее
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 что к чему
Eclipse свободная, насчет двух других не интересовался, но полагаю, они проприетарные. Я выберу однозначно свободную.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Re: STM32 новичку в ARM что к чему
shads писал(а):ECLIPSE нормальная среда?
Каждый новый проект ручками настраиваем и ручками прикручиваем дебаг .
Плюс таскаем исходники так же ручками с сайта производителя и CMSIS свежий с ARM.
Навороченный редактор исходников со всевозможными фичами .
Никакой отладчик.
Зато халява.
shads писал(а):Или IAR или KEIL будут по серьезнее?
Все включено . Создание проекта максимум автоматизированно . Бесплатно до 32кб.
В Keil отличный отладчик. Для STM32F103 (не для всех камней) так же навороченный симулятор.
Вылеченные версии не проблема.
Редактор исходников в IAR аскетичный в Keil более продвинутый.
На фоне всего этого маячит бледная тень CooCox - урезанный Eclipse с попыткой автоматизации через анус.
Re: STM32 новичку в ARM что к чему
Darth Cuauhtemoc писал(а):Eclipse свободная, насчет двух других не интересовался, но полагаю, они проприетарные.
Не забываем добавить - Eclipse не для новичков...
- Реклама
Re: STM32 новичку в ARM что к чему
Чтото типа как у CVAVR ?dosikus писал(а):Создание проекта максимум автоматизированно .
Re: STM32 новичку в ARM что к чему
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) );
Люблю Си...
Люблю Си...
Re: STM32 новичку в ARM что к чему
РадиоЛоматель писал(а):Заказал я себе этот клон. 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) );
Люблю Си...
Люблю Си...
Re: STM32 новичку в ARM что к чему
РадиоЛоматель писал(а): У меня действительно клон.
Так у меня так же клон .
Кидайте в личку мыло , скину вам набор для repair .
Прошивка v8_466 . Последние дрова от Segger прекрасно работают.
Re: STM32 новичку в ARM что к чему
У меня есть и родной сеггер, и китайские клоны - во всем абсолютно одинаковы.
Re: STM32 новичку в ARM что к чему
Попробовал свой клон STLink-V2 в режиме отладчика с LPC1758 под CoIDE - работает. Есть нюанс - нужно отключать проверку после записи прошивки - выдаёт ошибку, хотя прошивка записывается правильно. Отнесу это к работе STLink в CoIDE с неродным чипом.
- КАШАК
- Это не хвост, это антенна
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Доброго времени суток.
Пытаюсь подружить ST32F103VCT6 с SD картой. В принципе мне это удалось, и чтение и запись работают (использую FatFs). Но, если включаю DMA, МК виснет. Функция выглядит вот так:
Инициализация SPI:
Функции готовые из библиотеки diskio.c, только переделал под SPI2. Экспериментальным путем выяснил, что зависание происходит на строке:
При этом, если отключить SD карту, зависания нет. Что я делаю неправильно?
Пытаюсь подружить 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 что к чему
У STM32 ограничение тока короткого замыкания на выходах есть? Или сгорает?
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Re: STM32 новичку в ARM что к чему
Сгорает 
Если есть опасения за порт, можно поставить буфер на ОУ со встроенной защитой от перегрузки по току, ну или просто резистор прицепить.

Если есть опасения за порт, можно поставить буфер на ОУ со встроенной защитой от перегрузки по току, ну или просто резистор прицепить.
Иван Сусанин - первый полупроводник 
-
Darth Cuauhtemoc
- Говорящий с текстолитом
- Сообщения: 1699
- Зарегистрирован: Вс июн 16, 2013 18:41:45
Re: STM32 новичку в ARM что к чему
Myp3ik писал(а):ну или просто резистор прицепить.
Хочу сделать макетку, поэтому ОУ не подойдет, а вот резистор - самое оно.
А к статике как относится? Защита входов есть? Можно лапать и паять, не заземляя себя и паяльную станцию?
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Re: STM32 новичку в ARM что к чему
Сколько я их грязными руками не перелапал, то все живы. Если носите одежду которая электризуется, то перед тем как брать МК дотронтесь до массивного металлического или заземленного предмета.
При пайке я просто отключаю от платы проводники которые гальванически связаны с питающей сетью или землей.
При пайке я просто отключаю от платы проводники которые гальванически связаны с питающей сетью или землей.
Иван Сусанин - первый полупроводник 
-
Darth Cuauhtemoc
- Говорящий с текстолитом
- Сообщения: 1699
- Зарегистрирован: Вс июн 16, 2013 18:41:45
Re: STM32 новичку в ARM что к чему
Понятно, значит особых мер, в сравнении с теми же 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
кусок кода для тестирования платы:
Вопрос по каким причинам может не работать дебагер и программа?
Имеется отладочная плата 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);
}
Вопрос по каким причинам может не работать дебагер и программа?


