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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

balmer писал(а): нормально ли получилось дебагировать.
Уж лучше дебажить.
А то созвучно - ононировать получилось... :)))
Реклама
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

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

Сообщение The_D »

В общем-то почти тоже самое.
Кстати кто чем дабажит задачи под RTOS, чет в кокосе не получилось этого сделать.
Реклама
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

А какая разница что дебажить? я это делаю в Keil, удобно, наличие окон, показывающих нужные переменные, РОН, регистры периферии, дизассемблер. в начальную настройку входит только выбор отладчика и его утилиту.
P.S. С Днем программиста!
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

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

dosikus писал(а):http://kazus.ru/forums/showthread.php?t=105029
Лучше и подробнее статьи я не встречал :)
Конечно надо много поработать ручками, настраивая, но результат того стоит.
drakon писал(а):P.S. С Днем программиста!
Спс :beer:

UPD: Хотя сервер после обнаружения камня выдает сообщение об ошибке (третья строка снизу), вчера не было

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

...
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1)
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
Error: stm32f1x.cpu -- clearing lockup after double fault
Polling target stm32f1x.cpu failed, GDB will be halted. Polling again in 100ms
Polling target stm32f1x.cpu succeeded again
но последнее сообщение говорит, что все в норме.
Прошил стандартным контроллерным хелловорлдом в виде мигающего светодиода - работает! :)
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Darth Cuauhtemoc, имеется два варианта - либо вскрывать и шить, результат 50х50 . Либо купить такой как у меня .
Реклама
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

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

Да пока работает вроде :)

Вопрос такой - с использованием чего писать? CMSIS или StdPeriphLib? Что более высокоуровневое, на чем проще?
В частности, задействовать придется SPI, и кроме этого, IO порты.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Реклама
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

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

Сообщение balmer »

Darth Cuauhtemoc писал(а): Вопрос такой - с использованием чего писать? CMSIS или StdPeriphLib? Что более высокоуровневое, на чем проще?
В частности, задействовать придется SPI, и кроме этого, IO порты.
Одно другому не противоречит CMSIS - это startup + хидер с описанием всех портов и констант к ним.
StdPeriphLib - это уже чутка более высокоуровневые либы. Лично мне они нравятся. Некоторые говорят, что типа "программа станет больше". Но вот у меня текущий проект использует RTC+LCD+USB и занимает 12 КБ в Release конфигурации. Если учесть, что 128 КБ flash то есть еще где разгуляться.
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

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

balmer писал(а):StdPeriphLib - это уже чутка более высокоуровневые либы. Лично мне они нравятся.
А есть внятные и хорошие доки? Можно на английском. Лучше книгу. А то хэлп, что в архиве от ST, что-то не вкурил я.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

как пользоваться SPL можно понять из примеров, какие именно выбирать параметры можно прочитать в даташите, имена этих параметров в хидере SPL.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

Darth Cuauhtemoc писал(а):
balmer писал(а):StdPeriphLib - это уже чутка более высокоуровневые либы. Лично мне они нравятся.
А есть внятные и хорошие доки? Можно на английском. Лучше книгу. А то хэлп, что в архиве от ST, что-то не вкурил я.
CHM из архива каждой либы очень даже вменяемый. Может стоит "затянуться" еще раз? :) Ну какая книга может быть по всем либам? Кто и зачем ее писать будет, если CHM уже законченная книга. Без ошибок переводчика. :)
С уважением,
Виктор.
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

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

При попытке собрать проект ругается на то, что assert_param неопределен, в частности, это происходит в строке 111 файла stm32f10x_gpio.c, что в общем то совершенно естественно, поскольку в данный файл включены хэдеры stm32f10x_gpio.h и stm32f10x_rcc.h, в то время как assert_param определен в заголовке stm32f10x_conf.h, который я включаю в main, но который не включается в stm32f10x_gpio.c, из-за чего и ругается.

Как победить и настроить чтоб все работало? Eclipse.

UPD: Конечно, я эту хрень победил, вставив в начало stm32f10x_gpio.c строчку

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

#define assert_param(expr) ((void)0)
вырезанную из stm32f10x_conf.h, но когда приходится ручками править заголовки - это не дело.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

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

Сообщение BorisSPB »

Darth Cuauhtemoc, надо в свойствах проекта определить USE_STDPERIPH_DRIVER и STM32F10X_MD(если у вас Medium-density чип), тогда и в stm32f10x_gpio.c ничего править не придется.
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

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

Это есть, только не USE_PERIPH_DRIVER, а USE_PERIPH_LIBRARY (как в хэлпе было сказано, который с либой шел)
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

что-то не получается настроить ШИМ на tim1 ch2 для STM32F050F4. может у кого-то получалось? уже второй вечер мучаюсь.

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

void Init_Timer1(void){	////TIM1_CH2
	//TIM1_CH2 - PA9	выход двухтактный, альтернативная функция, High speed
  GPIOA->MODER		|= GPIO_MODER_MODER9_1;  //Alternate function mode
  GPIOA->OTYPER		&= ~GPIO_OTYPER_OT_9;   //Output push-pull
  GPIOA->OSPEEDR	|= GPIO_OSPEEDER_OSPEEDR9; //High speed
	GPIOA->AFR[1]		|= AF2<<(4*(9-8));	//AF2 для пина 9
		
	RCC->APB2ENR	|= RCC_APB2ENR_TIM1EN;  //Включили тактирование Timer1
	TIM1->PSC			= 2000 - 1;  //претделитель на 1
	TIM1->CCER		|= TIM_CCER_CC2E;  //Разрешаем таймеру использовать CH2 для ШИМа	
	TIM1->CCMR1		|= (TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_0); //TIM1_CH2 - при сравнении состояние пина инвертируется	
	//TIM1->CCMR1		|= (TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1);  //Прямой ШИМ
	TIM1->BDTR		|= TIM_BDTR_MOE;	//Разрешаем вывод сигнала на pin OC
	TIM1->ARR			= 100; // таймер перезагружается при...
	TIM1->CCR2		= 50;  // Compare value
	TIM1->CR1			|= TIM_CR1_CEN;  //Запускаем таймер!
}
есть идеи?

UPD все было правильно инициализировано, просто я развел дорожку не на ту ногу :)
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

Darth Cuauhtemoc писал(а):Это есть, только не USE_PERIPH_DRIVER, а USE_PERIPH_LIBRARY (как в хэлпе было сказано, который с либой шел)
BorisSPB прав. Если заглянуть не в хелп, а в конфигурационные файлы библиотек, то можно увидеть
#ifdef USE_STDPERIPH_DRIVER
Такой дефайн и надо прописывать глобально в настройках компилятора.
С уважением,
Виктор.
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

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

Спс, помогло. Странно, что в хэлпе не так...

UPD: Не работает нормально SPI, долго и безуспешно пытался подключить дисплей Nokia 3310 - не пашет :( от AVR работает без проблем.
SPI инициализируется так:

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

GPIO_InitStructure.GPIO_Pin = LCD_DC_PIN | LCD_RES_PIN | SPI_LCD_PIN_SCK | SPI_LCD_PIN_MOSI | SPI_LCD_PIN_SS;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// Configure SPI for LCD
GPIO_InitStructure.GPIO_Pin = SPI_LCD_PIN_SCK | SPI_LCD_PIN_MOSI;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
Использую софтовый SS, поскольку аппаратный не работает так, как мне хотелось бы, а именно указание

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

SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
не давало ожидаемого результата, видимо пин по умолчанию конфигурится как вход, на котором мастер ожидает высокий уровень, а мне хотелось бы получить выход, становящийся низким во время передачи, как в классическом SPI. Можно добиться путем манипуляции напрямую с регистрами, но заморачиваться не стал, сделал софтовый.
Софтовый реализован так (функция пересылки байта в дисплей) - LCD_PIN_SS:

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

void Nokia3310_send(uint8_t data)
{
	while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
	GPIO_ResetBits(GPIOA, SPI_LCD_PIN_SS);
	SPI_I2S_SendData(SPI1, data);
	GPIO_SetBits(GPIOA, SPI_LCD_PIN_SS);
	return;
}
Должно работать... но не работает. Лезу с осциллографом на SCK и SS, и вместо того, чтобы SS имел низкий уровень во время передачи, наблюдаю чудную картину:
Изображение
Передача по SPI запаздывает относительно строба. Налицо буферизация, аппаратная или в либе - не знаю... копать исходники нет сил уже... как победить... невозможно работать же... держать линию постоянно на низком уровне не хотелось бы.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

Darth Cuauhtemoc писал(а):Передача по SPI запаздывает относительно строба. Налицо буферизация, аппаратная или в либе - не знаю... копать исходники нет сил уже... как победить... невозможно работать же... держать линию постоянно на низком уровне не хотелось бы.
Лень всему виною... налицо нежелание разбираться... а также архитрагическое непонимание принципа работы SPI...
Опустили SS, запустили передачу и сразу подняли SS... т.е просто оборвали передачу...
Всё правильно... "Всё согласно купленным билетам."(С)
Окончание передачи байта кто за вас контролировать будет??? 8)
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

HHIMERA , похоже созрели очередные классические грабли .
Ну как RA4 у пик ... :)))
Darth Cuauhtemoc
Говорящий с текстолитом
Сообщения: 1699
Зарегистрирован: Вс июн 16, 2013 18:41:45

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

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

HHIMERA писал(а): Окончание передачи байта кто за вас контролировать будет??? 8)
Согласен, сам дурак... :) почему то решил, что SPI_I2S_SendData() блокирующаяся функция, хотя необходимость проверять флаг передачи перед вызовом говорит об обратном...
Последний раз редактировалось Darth Cuauhtemoc Вт сен 17, 2013 10:17:19, всего редактировалось 1 раз.
У кошки четыре ноги - вход, выход, земля и питание. Но трогать ее не моги - получится замыкание.
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

dosikus писал(а):HHIMERA , похоже созрели очередные классические грабли .
Ну как RA4 у пик ... :)))
Та да... какая-то нездоровая фигня получается...
А ведь там всё просто, как две палки, и мощно по возможностям... но требует понимания и активизации серого вещества... и можно творить чудеса...
"Я не даю готовых решений, я заставляю думать!"(С)
Ответить

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