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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

IRF840 писал(а): имеется ,hex для STM32F100C8. Можно ли его залить в STM32F100RBT6B и будут ли совпадать после этого одноименные пины?
Да, можно. И пины будут работать правильно.
Все будет только лучше, в крайнем случае - хуже.
Реклама
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

coredumped, есть пользовательский и привилегированный режимы.

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

void Write_Config(uint8_t page){	//Один пакет - 8байт
uint32_t address;
uint32_t data;
	
	//Разблокировка
	flash_unlock();
	
  address = FLASH_BASE + 1024 * page;	//Начальный адресс поиска - начало страници
	//Находим первый пустой пакет
	while((*(__IO uint32_t*) address) != 0xFFFFFFFF){	//Если пакет записан
		address += 8;	//Шагаем на 8 ячеек (1 пакет)
		if(address == FLASH_BASE + 1024 * (page+1) -8){	//Если дошли до граници страници
			flash_erase_page(address);	//Стираем страницу
			break;
		}
	}	
	
	FLASH->CR |= FLASH_CR_PG; //Разрешаем программирование флеша
	while(!flash_ready()); //Ожидаем готовности флеша к записи
	
	*(__IO uint16_t*)address = (uint16_t)config.u16a; //Пишем младшие 2 бата
	while(!flash_ready());
	address+=2;
	*(__IO uint16_t*)address = (uint16_t)config.u16b; //Пишем следующие 2 байта
	while(!flash_ready());
	
	address+=2;
	data = config.u8c;
  data = data <<8;
  data |= config.u8d; 
	*(__IO uint16_t*)address = (uint16_t)data; //Пишем следующие 2 байта
	while(!flash_ready());

	address+=2; 
	*(__IO uint16_t*)address = (uint16_t)config.u16e; //Пишем старшие 2 байта
	while(!flash_ready());
	
	flash_lock();	//Запрещаем программирование флеша
}
Реклама
IRF840
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Пн сен 25, 2006 17:47:10

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

Сообщение IRF840 »

Еще один вопрос - в схеме заведено питание от двух разных стабилизаторов на VDD и VDDA, я хочу приспособить Дискавери для этой схемы, но VDDA (VSSA тоже) там не выведены. Нужно ли подпаиваться к этим пинам?
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

VDDA/VSSA - (аналоговые питатие и земля) отдельно запитывают для повышения точности работы ЦАП и АЦП. Обычно, достаточно фильтра по питанию (LC). Discovery запитана по упрощенному варианту - все подключено напрямую. Если Вам высокая точность ADC не нужна, то можете не заморачиваться с подключением отдельного питания к VDDA.
drakon писал(а):coredumped, есть пользовательский и привилегированный режимы.
Можете ссылку дать на документ? Что-то я такого нигде не встречал. Кмк Вы путаете с режимом работы процессора.

Вот код, который использую я:

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

 
#include "stm32f0xx_it.h"

#define SYSCONF_FLASH_ADDRESS		(uint32_t)0x0800FC00
uint32_t conf_data;

//skip

  	FLASH_Unlock();
  	FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR); 

 	FLASH_ErasePage(SYSCONF_FLASH_ADDRESS);
	
 	FLASH_ProgramWord(SYSCONF_FLASH_ADDRESS,   conf_data);
	
 	FLASH_Lock();
Процессор STM32F051
Функции стандартные, из либ ST.
В обработчике прерывания не проверял, но могу попробовать на выходных, если хотите. Чтоб эксперимент был точным, скажите какой у Вас контроллер,
я могу проверить на STM32F051, F417, F103
Последний раз редактировалось coredumped Чт окт 10, 2013 07:00:48, всего редактировалось 1 раз.
Все будет только лучше, в крайнем случае - хуже.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

coredumped, да, режим работы ядра.
вопрос снимается. разбил процедуру на 2части: 1) вычисление внутреннего адреса и, если нужно, стирание страници (подготовка). 2) собственно запись, которая вызывается из обработчика прерывания от PVD.
Реклама
zöner
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

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

Сообщение zöner »

В stm32f4 что бы записать 1 байт надо весь сектор что ли стереть ???
в stm32f1хх можно стирать целый сектор (1..2..4К в зависимости от чипа), зато писать можно побайтно, или, для ускорения, по 4-байтному слову.
если количество данных небольшое, выделите последний сектор и пишите как в кольцевой буфер - каждый раз на новый адрес. По достижении конца страницы - полное стирание.

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

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

Сообщение Myp3ik »

Такой принцип реализован в EEPROM emulation от ST. Только они там используют 2 страницы, что обеспечивает сохранность данных, если при стирании страницы произойдет, например, сбой по питанию.

http://www.st.com/web/en/catalog/tools/PF257902
http://www.st.com/web/en/catalog/tools/PF258153
Иван Сусанин - первый полупроводник :solder:
zöner
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

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

Сообщение zöner »

можно и так. Я писал свой велосипед, т.к. особых требований по надежности не было, и в работе пропадание питания не мешает.
GHOST_J_D
Родился
Сообщения: 12
Зарегистрирован: Пт дек 14, 2012 21:07:49
Откуда: Екатеринбург
Контактная информация:

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

Сообщение GHOST_J_D »

Среда IDE эклипс с примочками собраная как написано тут http://kazus.ru/forums/showthread.php?t=105029 "Изучаем ARM. Собираем свою IDE для ARM.pdf."
Дошел до методы "Изучаем ARM. Отладка ARM приложений в Eclipse IDE.pdf" (http://kazus.ru/forums/showthread.php?t=105029 ) там автор прикручивает клон JLINK
Вопросы
1) Имеется плата DISCO f3 с отладчиком stlink v2 на борту, стоит ли заказывать клон JLINK V8 с алиэкспреса, или можно обойтися встроеным stlink v2 (который вроде как чем то урезан).
2) Если заказывать то какой клон JLINK поддерживающий семейства кортекс M0, M1, M2, M3, M4 выбрать на илиэкспрессе ?
http://www.aliexpress.com/wholesale?Sea ... 1013035819
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

Если будете отлаживать процы от ST (STM32), кроме ST-LINK ничего не нужно. И все эти мифы о его "урезанности" можете не слушать. Те ST-LINKи, что ставят на всякие девборды, обычно имеют только SWD. "Полный" имеет еще и JTAG. Однако это не проблема, тк нет никаких ограничений в отладке по SWD в сравнении с JTAG.
J-Link хорош своей "всеядностью" - те он умеет практически все ARM-ы. Если думаете осваивать ARMы, например от NXP или TI, тогда есть смысл прикупить J-Link. Если надумаете, берите J-Link Pro (тот, что с Ethernet). Очень удобно делать удаленную отладку.
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

coredumped писал(а): И все эти мифы о его "урезанности" можете не слушать. Те ST-LINKи, что ставят на всякие девборды, обычно имеют только SWD. "Полный" имеет еще и JTAG.
Дело то не в JTAG, JTAG как таковой и на не упал . Полный STLink имеет согласование уровней и имеет SWIM.
А вот JLink имеет еще и SWO.
Так что не надо свои надумки приводить...
GHOST_J_D
Родился
Сообщения: 12
Зарегистрирован: Пт дек 14, 2012 21:07:49
Откуда: Екатеринбург
Контактная информация:

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

Сообщение GHOST_J_D »

http://www.aliexpress.com/item/Free-Shi ... 07502.html Если его перешить то будет STM32 F0 (Cortex M0)семейство шить? Или этот http://www.aliexpress.com/item/V8-emula ... 18871.html заказать лучше под Сortex M0 ?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

GHOST_J_D, это одно и то же .
Возможно у второго плата качественней , да и то не факт .
STM32F0x есть поддержка вплоть до STM32F03x на новых дровах от Segger - 4.78.
Для сравнения фото платы моего .

Изображение
Аватара пользователя
black_lizard
Встал на лапы
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

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

Сообщение black_lizard »

Здравствуйте, хочу задать вопрос про DMA.
Плата STM32VLDISCOVERY на stm32f100rb.
Хочу прикрутить к ней видеовывод на телевизор.
Делаю следующим образом:
Вывод одной строки занимает 64 мкс. Создаю массив на 64 байта, в котором байт задаёт выводы на GPIO порта, на котором через резисторы подключён RCA вывод.
Настраиваю DMA на циклический вывод, раз в мкс менять этот самый байт.
Заполняю массив информацией, запускаю, работает, на экране телевизора появляются ровные белые полосы там, где я задал вывод белого цвета в массиве.
Увеличиваю точность до 128, то есть сигнал меняется два раза в 1 мкс(2 мгц по сути, скорость смены сигнала на GPIO).
Линии тоньше, ровные, работает.
И вот тут начинаются проблемы. Если увеличиваю точность ещё выше, то изображение выходит прыгающее, бегающее и вообще не стабильное. Даже не зубчики на линиях, как бывает при неправильных таймингах, а просто мельтешение белыми строками. Пробовал править тайминги, но для телевизора по сути важна только предельная одинаковость сигнала синхронизации. Ему достаточно этого, чтобы строчки выводились ровно.

DMA управляется таймером, который срабатывает каждые 24 такта(24 мгц камень, то есть один мкс это 24 000 000 / 1 000 000 тактов). 12 тактов тоже работает. Четырёхкратная точность это обращение к DMA каждые 6 тактов. Мне нужна 6-кратная точность, то есть чтобы DMA срабатывало каждые 4 такта.

Единственное, что мне пришло в голову - проблема в аппаратной части :dont_know: подскажите, в какую сторону копать? GPIO пробовал настраивать на 10 и 50 мгц, но это ничего не изменило. Может быть дело в DMA?
Для генерации сигнала используется DMA1, 5 канал и 15 таймер.

Инициализируются так:

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

#define CLK_SPEED 24000000
#define PRECISION 2
#define US_FROM_CLK CLK_SPEED / (1000000 * PRECISION)

unsigned char dmaVideoBytes[64*PRECISION];

...

RCC->APB2ENR |= RCC_APB2ENR_TIM15EN;
TIM15->ARR = US_FROM_CLK-1;
TIM15->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE;
TIM15->CCER = TIM_CCER_CC1E;
TIM15->BDTR = TIM_BDTR_MOE;
TIM15->DIER = TIM_DIER_CC1DE;
TIM15->CR1 = TIM_CR1_CEN | TIM_CR1_ARPE;

DMA1_Channel5->CPAR = (uint32_t) & GPIOA->ODR;
DMA1_Channel5->CMAR = (uint32_t) & dmaVideoBytes[0];
DMA1_Channel5->CNDTR = (64*PRECISION)-PRECISION;
DMA1_Channel5->CCR = DMA_CCR1_MINC | DMA_CCR1_CIRC | DMA_CCR1_DIR
	            | DMA_CCR1_EN;
Собираю самопальный мини-компьютер
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Попробуйте формировать видеопоток через SPI(у него должны быть более точные тайминги). А в SPI уже грузить с DMA.
У вас похоже композитный выход. Я надеюсь вы помните что там нужен трёхуровневый сигнал?
Аватара пользователя
drakon
Грызет канифоль
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

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

Сообщение drakon »

black_lizard, разгоняй до 48MHz.
Аватара пользователя
black_lizard
Встал на лапы
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

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

Сообщение black_lizard »

Спасибо за ответы, дело пошло вперёд.
Попробуйте формировать видеопоток через SPI(у него должны быть более точные тайминги). А в SPI уже грузить с DMA.
Не совсем понял, что вы имеете ввиду. Не могли бы вы пояснить?
У вас похоже композитный выход. Я надеюсь вы помните что там нужен трёхуровневый сигнал?
Синхросигнал - 0в, 0.3 - 1.0в это цвет. Это учитывается, первые 12 байт массива нули, так и формируется синхросигнал.
black_lizard, разгоняй до 48MHz.
Проблема и правда решается разгоном и тут я встретил несколько новых проблем. HSE режим внешнего тактирования включается без проблем. А вот PLL не перенастраивается и продолжает работать в режиме умножения частоты на три. Я поменял кварц на плате на 12MHZ и получил 36 MHZ, в котором удалось менять сигнал на GPIO 3 раза за 1мкс(раз в 12 тактов). Выше не работает. Подскажите, что я делаю не правильно в инициализации PLL, 60 мгц были бы очень кстати, но умножитель просто не переключается:

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

void initPLL(){
	uint32_t StartUpCounter = 0, HSEStatus = 0;

	/* enable HSE */
	RCC->CR |= ((uint32_t)RCC_CR_HSEON);

	/* wait until HSE will work */
	do{
	    HSEStatus = RCC->CR & RCC_CR_HSERDY;
	    StartUpCounter++;
	}while( (HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));

	if ( (RCC->CR & RCC_CR_HSERDY) != RESET)
	    	HSEStatus = (uint32_t)0x01;
	else
		HSEStatus = (uint32_t)0x00;

	/* If HSE started */
	if ( HSEStatus == (uint32_t)0x01){
	    	/* configure FLASH for good work */
	    	FLASH->ACR |= FLASH_ACR_PRFTBE;
	    	FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
	    	FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;


	    	RCC->CR &= ~RCC_CR_PLLON;

	    	/* HCLK = SYSCLK */
	    	RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
	    	/* PCLK2 = HCLK */
	    	RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
	    	/* PCLK1 = HCLK */
	    	RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

	    	RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
	    	RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL5);

	    	/* Init PLL */
	    	RCC->CR |= RCC_CR_PLLON;

	    	/* wait until PLL will work */
	    	while((RCC->CR & RCC_CR_PLLRDY) == 0);

	    	/* configure PLL as system clock */
	    	RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
	    	RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

	    	/* wait, until PLL will work*/
	    	while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08);

	  }else
	 	while(1);
}
Последний раз редактировалось black_lizard Вт окт 15, 2013 20:09:29, всего редактировалось 1 раз.
Собираю самопальный мини-компьютер
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

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

Сообщение The_D »

удалось менять сигнал на GPIO 3 раза за 1мкс
Простите что вы имеете ввиду? (_/\_) или (_/\_/\_/\_)
Длительность 1 импульса сколько в нс?
Аватара пользователя
black_lizard
Встал на лапы
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

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

Сообщение black_lizard »

The_D писал(а):
удалось менять сигнал на GPIO 3 раза за 1мкс
Простите что вы имеете ввиду? (_/\_) или (_/\_/\_/\_)
Длительность 1 импульса сколько в нс?
Обращение к регистру GPIOA->ODR; Он меняется 3 раза в мкс максимум, то есть 333 нс импульс, как я понимаю.

Говоря проще есть DMA. Есть массив. DMA читает байт из этого массива и записывает его в GPIOA порт каждые 12 тактов, по таймеру. Но выше 12 тактов он этого не делает почему-то. И потому здесь либо нужно как-то аппаратно решить проблему, либо разогнать проц.
Собираю самопальный мини-компьютер
Аватара пользователя
black_lizard
Встал на лапы
Сообщения: 132
Зарегистрирован: Вс сен 23, 2012 05:51:35

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

Сообщение black_lizard »

UPD
Проблема решена. Порылся в настройках камня в кукоксе, исправил ошибки в дефайнах и настроил PLL на семикратное умножение(модифицировал режим 48mhz). На данной частоте без проблем можно менять сигнал на GPIO 5 раз в мкс. Судя по всему это предел для этого чипа..
Собираю самопальный мини-компьютер
Ответить

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