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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Читал референс мануал - там нет ,зато нашел в другом они выставляются на H0 H1
Подсоединил кварц на 16 МГц,он начал виснуть ну проверки включения флага PLL,в чем проблемма? Делал по примеру токогоже проекта но там был внутренний HSI.

int main()
{uint32_t i;
int m,l1,l2,l3;

//настройка входа и выхода OSC H0- ВХОД, H1- ВЫХОД

RCC->AHBENR |= RCC_AHBENR_GPIOHEN;
GPIOH ->MODER |= (GPIO_MODER_MODER1_1|GPIO_MODER_MODER0_1);
GPIOH->OTYPER &= ~(GPIO_OTYPER_OT_1|GPIO_OTYPER_OT_0);
GPIOH->PUPDR &= ~(GPIO_PUPDR_PUPDR1|GPIO_PUPDR_PUPDR0);
GPIOH->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR1|GPIO_OSPEEDER_OSPEEDR0);
GPIOH->AFR[0] = 0X000000; //УСТАНАВЛИВАЕМ afio0

RCC->CR |=RCC_CR_HSEON ;//врубаем внешний резнатор и ждем
while(!(RCC->CR & RCC_CR_HSEON));
RCC->CFGR |= RCC_CFGR_PLLSRC_HSE;//вход HSE для PLL
RCC->CFGR |= RCC_CFGR_PLLMUL4; //делитель и умножение
RCC->CFGR |= RCC_CFGR_PLLDIV2;
RCC->CR |= RCC_CR_PLLON; //включает PLL
while(!(RCC->CR&RCC_CR_PLLRDY)); //ждем = виснет,неустанавливает флаг.
FLASH->ACR |= FLASH_ACR_ACC64;
FLASH->ACR |= FLASH_ACR_LATENCY;
RCC->CFGR |= RCC_CFGR_SW_PLL;//выбираем PLL для SYSCL

}
Реклама
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

Программу не читал, рекомендую начать с проверки по даташиту диапазона допустимых частот кварца и частоты ядра.
Giggity giggity goo!
Реклама
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

спящий писал(а):Подсоединил кварц на 16 МГц,он начал виснуть ну проверки включения флага PLL,в чем проблемма
Возможно вот эта выдержка из даташита поможет
6. The PH0 and PH1 I/Os are only configured as OSC_IN/OSC_OUT when the HSE oscillator is on ( by setting the HSEON bit
in the RCC_CR register). The HSE oscillator pins OSC_IN/OSC_OUT can be used as general-purpose PH0/PH1 I/Os,
respectively, when the HSE oscillator is off (after reset, the HSE oscillator is off ). The HSE has priority over the GPIO
function.
А это выдержка из reference manual
After reset all I/Os are connected to the system’s alternate function 0 (AF0)

Как там у Вас с таймерами? рассосалось?
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Да с таймерами разобрался,прям как по часам работает).
Сделал от внутреннего MSI(16 МГЦ) работает.

Впринципе соблюдал выдержки(я по ним делал). HSEON bit врубил
The HSE oscillator pins OSC_IN/OSC_OUT can be used as general-purpose PH0/PH1 I/Os как я понял недолжны использоваться както подругому.
alternate function врубил.

Впринципе от внутреннего даже лучше,лишних элементов не надо,а точность мне и не обязательна для TSOP1736.Спасибо за помощь.
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

А вот такой вопрос: Ethernet устройство PHY он встроен в STM32 ,илиэто какая нибудь добавочная микросхема(или это просто провода витая) ENC28J60 ? Какое напряжение сигнала из компа по витой, и где глянуть примеры по Ethernet (да и вообще по переферии ,чтобы лишних вопросов не задавать) STM32L.
Ктонить настраивал,может кто-нить кинуть пример.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

посмотрите в интернет-магазинах какие-нибудь отладочные платы на STM32 с Ethernet. На них посмотрите схему (обычно можно скачать). Если фирма, выпускающая отладочные платы известная, то там же и куча программ-примеров для этой платы. Бери и изучай.
Ставим плюсы: )
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Сообщение Satyr »

[quote="спящий"]А вот такой вопрос: Ethernet устройство PHY он встроен в STM32 ,илиэто какая нибудь добавочная микросхема(или это просто провода витая) ENC28J60 ? /quote]
В STM32 внутри только MAC. нужен PHY - внешняя микросхема.
ENC28J60 это MAC+PHY в одном флаконе.
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

спящий писал(а): alternate function врубил.
Перевожу дословно
Пины PH0 и PH1конфигурирубтся как OSC_IN/OSC_OUT только тогда, когда HSE генератор включен (установкой бита HSEON в RCC_CR регистре). Пины HSE генератора OSC_IN/OSC_OUT могут быть использованы как порты ввода вывода PH0/PH1,
сщщтвественно , когда HSE выключен (после сброса, HSE генератор выключен ). Функция HSE hимеет приоритет над GPIO
функцией.
После сброса все пины соединены с альтернативнсой функцией 0.

Последнее замечание означает, что ничего специально для AF0 конфигурировать не надо, достаочно включить генератор и все само должно заработать без всякой конфигурации.
Мучитель микросхем
Сообщения: 451
Зарегистрирован: Ср янв 06, 2010 20:57:49

Сообщение Слон »

Бодрого времени суток всем.
Купил себе для исследований платку STM32L DISCOVERY.
Не получается разобраться с программатором STLink на ней.
Скачал фирменную утилиту STM32 STLink Utility, драйвера... Всё самой последней версии. При подключении платы, утилита выдала мне что мол требуется обновить ПО. И выбор там был- JTAG, SWD и еще что-то... Прочитал мануал к плате, вроде бы там используется только SWD интерфейс. Ну я и выбрал SWD-> обновить. Теперь плата у меня видится этой утилитой как V2.J0.S4 SWIM Debugger. Естественно, программатор не работает. Но почему SWIM ? Свим - это же вроде интерфейс для STM8 ?
Можно ли как-то исправить ситуацию? У меня есть еще один программатор STLink, рабочий. В чем отличия между SWIM и SWD ?
Если здесь уже этот вопрос обсуждался, прошу не пинать ногами
Опыт- сын ошибок трудных....
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Подскажите чет непойму в STM32l152 есть Ethernet ?
из всего reference manual нашел расчет контрольной суммы
CRC main features
Uses CRC-32 (Ethernet) polynomial: 0x4C11DB7
или надо тут пользоваться ENC28j60.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

в STM32l152 нет Ethernet
Ставим плюсы: )
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Данные звука в WAV файлах кодируются как 16-битные знаковые числа. ЦАП STM32 принимает беззнаковые числа. Поэтому при воспроизведении надо первое перегонять во второе. Я сделал так:

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

//доступ к байтам через юнион
union ShortByte
{
	uint16_t s;
	uint8_t  b[2];
};

union ShortByte convert;//сам юнион
uint8_t DAC_Buff[SIZE_DAC_BUFF];//буфер данных ЦАПа

  /*     Загрузить весь буфер ЦАПа данными из файла и запустить проигрывание     */ 
  for( i=0; i<SIZE_DAC_BUFF; )
  	{
	convert.b[0] = read_file();//LEFT channel
	convert.b[1] = read_file();//следующий байт с диска FAT16
	if( convert.s > 32767 )//преобразовать в беззнаковое
		{
		convert.s -= 32767;
		}
	else
		{
		convert.s += 32768;
		};
	DAC_Buff[i++] = convert.b[0];//преобразованное число в выходной буфер ЦАПа
	DAC_Buff[i++] = convert.b[1];

	convert.b[0] = read_file();//RIGHT channel
	convert.b[1] = read_file();
	if( convert.s > 32767 )
		{
		convert.s -= 32767;
		}
	else
		{
		convert.s += 32768;
		};
	DAC_Buff[i++] = convert.b[0];
	DAC_Buff[i++] = convert.b[1];
	}
Далее звуковые буферы отдаются на обработку DMA. За одну транзакцию передается 32бит - 1 стереовыборка.
На уровнях оптимизации меньше -О3 в KEIL звук начинает тормозить.

Как упростить/ускорить преобразование знак-беззнак или придется поднимать тактовую частоту?
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Сообщение polyname »

Как упростить/ускорить преобразование знак-беззнак или придется поднимать тактовую частоту?
не проще прибавлять 0x8000 ?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

Как упростить/ускорить преобразование знак-беззнак
... для этого есть Saturating instructions
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

polyname писал(а):проще прибавлять 0x8000 ?
0x8000 = 32768(10)
Или я что-то не понимаю?
ChipKiller писал(а):есть Saturating instructions
__ssat, __usat ?
Если не сложно, покажите как их сюда применить.
Спасибо.
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

uk8amk писал(а):0x8000 = 32768(10)
Или я что-то не понимаю.
Так ведь для ЦАП это и нужно. И это правильнее, чем Ваш длинный код с условиями, т.к. отнимать нужно 32768, а не 32767, а это тоже самое что прибавить 32768 для 16-битного числа.
В Вашем коде значение -1 (0xFFFF) и 0 (0x0000) преобразуется в одинаковый результат 32768, а это неправильно. А значение 0 на выходе не получится вообще никогда. Так что учите матчасть.
Хочу также напомнить, что в WAV есть header, в котором задается формат данных. Так что чисто технически может попасться WAV с беззнаковыми целыми.
Giggity giggity goo!
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

uk8amk писал(а): convert.b[0] = read_file();//LEFT channel
convert.b[1] = read_file();//следующий байт с диска FAT16
звук начинает тормозить.
Как упростить/ускорить преобразование знак-беззнак или придется поднимать тактовую частоту?
Мне кажется, что те 2-5 инструкций, которые можно съэкономить на преобразовании знаковый-беззнаковый, это ничто, по сравнению с вот этими 2 строчками.
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Foks писал(а):И это правильнее, чем Ваш длинный код с условиями, т.к. отнимать нужно 32768,
Действительно, достаточно было от числа просто отнять 32768 как оно стало беззнаковым.
Foks писал(а):Так что чисто технически может попасться WAV с беззнаковыми целыми.
Чанки разбираются. Конечно я не добрался до извлечения инфы из таких чанков как LIST, fact и прочих. Но инфу из fmt,data получаю и использую для настройки проигрывателя.
Galizin писал(а):это ничто, по сравнению с вот этими 2 строчками.
Распотрошил функцию read_file и вставил ее внутренности в цикл загрузки буфера. Звук пошел нормальный.
До этого пытался поднять тактовую частоту, но столкнулся с проблемой доступа к флешке. Купленная недорогая SanDisk SD карта нормально работает до 6МГц SPI(12МГц кварц).

Пока проблема решена.
Спасибо всем за участие.
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

Сообщение polyname »

Действительно, достаточно было от числа просто отнять 32768 как оно стало беззнаковым.
почему не прибавить ?

-32768 + 0x8000 = 0,
32767 + 0x8000 = 0xFFFF.

Для диапазона ЦАП вроде правильно.
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

Да блин, для 16-битного целого отнять и добавить 0x8000 - одно и то же - инверсия старшего бита.
Giggity giggity goo!
Ответить

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