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

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

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

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

Читал референс мануал - там нет ,зато нашел в другом они выставляются на 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

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

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

Сообщение Foks »

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

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

Сообщение 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

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

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

Да с таймерами разобрался,прям как по часам работает).
Сделал от внутреннего 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

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

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

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

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

Сообщение ibiza11 »

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

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

Сообщение Satyr »

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

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

Сообщение 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

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

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

Бодрого времени суток всем.
Купил себе для исследований платку 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

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

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

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

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

Сообщение ibiza11 »

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

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

Сообщение 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 звук начинает тормозить.

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

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

Сообщение polyname »

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

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

Сообщение ChipKiller »

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

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

Сообщение uk8amk »

polyname писал(а):проще прибавлять 0x8000 ?

0x8000 = 32768(10)
Или я что-то не понимаю?
ChipKiller писал(а):есть Saturating instructions

__ssat, __usat ?
Если не сложно, покажите как их сюда применить.
Спасибо.
Foks
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

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

Сообщение Foks »

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

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

Сообщение Galizin »

uk8amk писал(а): convert.b[0] = read_file();//LEFT channel
convert.b[1] = read_file();//следующий байт с диска FAT16
звук начинает тормозить.
Как упростить/ускорить преобразование знак-беззнак или придется поднимать тактовую частоту?

Мне кажется, что те 2-5 инструкций, которые можно съэкономить на преобразовании знаковый-беззнаковый, это ничто, по сравнению с вот этими 2 строчками.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Foks писал(а):И это правильнее, чем Ваш длинный код с условиями, т.к. отнимать нужно 32768,

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

Foks писал(а):Так что чисто технически может попасться WAV с беззнаковыми целыми.

Чанки разбираются. Конечно я не добрался до извлечения инфы из таких чанков как LIST, fact и прочих. Но инфу из fmt,data получаю и использую для настройки проигрывателя.
Galizin писал(а):это ничто, по сравнению с вот этими 2 строчками.

Распотрошил функцию read_file и вставил ее внутренности в цикл загрузки буфера. Звук пошел нормальный.
До этого пытался поднять тактовую частоту, но столкнулся с проблемой доступа к флешке. Купленная недорогая SanDisk SD карта нормально работает до 6МГц SPI(12МГц кварц).

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

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

Сообщение polyname »

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

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

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

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

Сообщение Foks »

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

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