STM32 новичку в ARM что к чему
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
}
Подсоединил кварц на 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 что к чему
Программу не читал, рекомендую начать с проверки по даташиту диапазона допустимых частот кварца и частоты ядра.
Giggity giggity goo!
Re: STM32 новичку в ARM что к чему
спящий писал(а):Подсоединил кварц на 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)
Как там у Вас с таймерами? рассосалось?
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.Спасибо за помощь.
Сделал от внутреннего 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.Спасибо за помощь.
Re: STM32 новичку в ARM что к чему
А вот такой вопрос: Ethernet устройство PHY он встроен в STM32 ,илиэто какая нибудь добавочная микросхема(или это просто провода витая) ENC28J60 ? Какое напряжение сигнала из компа по витой, и где глянуть примеры по Ethernet (да и вообще по переферии ,чтобы лишних вопросов не задавать) STM32L.
Ктонить настраивал,может кто-нить кинуть пример.
Ктонить настраивал,может кто-нить кинуть пример.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: STM32 новичку в ARM что к чему
посмотрите в интернет-магазинах какие-нибудь отладочные платы на STM32 с Ethernet. На них посмотрите схему (обычно можно скачать). Если фирма, выпускающая отладочные платы известная, то там же и куча программ-примеров для этой платы. Бери и изучай.
Ставим плюсы: )
Re: STM32 новичку в ARM что к чему
[quote="спящий"]А вот такой вопрос: Ethernet устройство PHY он встроен в STM32 ,илиэто какая нибудь добавочная микросхема(или это просто провода витая) ENC28J60 ? /quote]
В STM32 внутри только MAC. нужен PHY - внешняя микросхема.
ENC28J60 это MAC+PHY в одном флаконе.
В STM32 внутри только MAC. нужен PHY - внешняя микросхема.
ENC28J60 это MAC+PHY в одном флаконе.
Re: STM32 новичку в ARM что к чему
спящий писал(а):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 конфигурировать не надо, достаочно включить генератор и все само должно заработать без всякой конфигурации.
Re: STM32 новичку в ARM что к чему
Бодрого времени суток всем.
Купил себе для исследований платку STM32L DISCOVERY.
Не получается разобраться с программатором STLink на ней.
Скачал фирменную утилиту STM32 STLink Utility, драйвера... Всё самой последней версии. При подключении платы, утилита выдала мне что мол требуется обновить ПО. И выбор там был- JTAG, SWD и еще что-то... Прочитал мануал к плате, вроде бы там используется только SWD интерфейс. Ну я и выбрал SWD-> обновить. Теперь плата у меня видится этой утилитой как V2.J0.S4 SWIM Debugger. Естественно, программатор не работает. Но почему SWIM ? Свим - это же вроде интерфейс для STM8 ?
Можно ли как-то исправить ситуацию? У меня есть еще один программатор STLink, рабочий. В чем отличия между SWIM и SWD ?
Если здесь уже этот вопрос обсуждался, прошу не пинать ногами
Купил себе для исследований платку STM32L DISCOVERY.
Не получается разобраться с программатором STLink на ней.
Скачал фирменную утилиту STM32 STLink Utility, драйвера... Всё самой последней версии. При подключении платы, утилита выдала мне что мол требуется обновить ПО. И выбор там был- JTAG, SWD и еще что-то... Прочитал мануал к плате, вроде бы там используется только SWD интерфейс. Ну я и выбрал SWD-> обновить. Теперь плата у меня видится этой утилитой как V2.J0.S4 SWIM Debugger. Естественно, программатор не работает. Но почему SWIM ? Свим - это же вроде интерфейс для STM8 ?
Можно ли как-то исправить ситуацию? У меня есть еще один программатор STLink, рабочий. В чем отличия между SWIM и SWD ?
Если здесь уже этот вопрос обсуждался, прошу не пинать ногами
Опыт- сын ошибок трудных....
Re: STM32 новичку в ARM что к чему
Подскажите чет непойму в STM32l152 есть Ethernet ?
из всего reference manual нашел расчет контрольной суммы
CRC main features
Uses CRC-32 (Ethernet) polynomial: 0x4C11DB7
или надо тут пользоваться ENC28j60.
из всего reference manual нашел расчет контрольной суммы
CRC main features
Uses CRC-32 (Ethernet) polynomial: 0x4C11DB7
или надо тут пользоваться ENC28j60.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: STM32 новичку в ARM что к чему
Данные звука в WAV файлах кодируются как 16-битные знаковые числа. ЦАП STM32 принимает беззнаковые числа. Поэтому при воспроизведении надо первое перегонять во второе. Я сделал так:
Далее звуковые буферы отдаются на обработку DMA. За одну транзакцию передается 32бит - 1 стереовыборка.
На уровнях оптимизации меньше -О3 в KEIL звук начинает тормозить.
Как упростить/ускорить преобразование знак-беззнак или придется поднимать тактовую частоту?
Код: Выделить всё
//доступ к байтам через юнион
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 звук начинает тормозить.
Как упростить/ускорить преобразование знак-беззнак или придется поднимать тактовую частоту?
Re: STM32 новичку в ARM что к чему
не проще прибавлять 0x8000 ?Как упростить/ускорить преобразование знак-беззнак или придется поднимать тактовую частоту?
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: STM32 новичку в ARM что к чему
... для этого есть Saturating instructionsКак упростить/ускорить преобразование знак-беззнак
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: STM32 новичку в ARM что к чему
polyname писал(а):проще прибавлять 0x8000 ?
0x8000 = 32768(10)
Или я что-то не понимаю?
ChipKiller писал(а):есть Saturating instructions
__ssat, __usat ?
Если не сложно, покажите как их сюда применить.
Спасибо.
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: STM32 новичку в ARM что к чему
Так ведь для ЦАП это и нужно. И это правильнее, чем Ваш длинный код с условиями, т.к. отнимать нужно 32768, а не 32767, а это тоже самое что прибавить 32768 для 16-битного числа.uk8amk писал(а):0x8000 = 32768(10)
Или я что-то не понимаю.
В Вашем коде значение -1 (0xFFFF) и 0 (0x0000) преобразуется в одинаковый результат 32768, а это неправильно. А значение 0 на выходе не получится вообще никогда. Так что учите матчасть.
Хочу также напомнить, что в WAV есть header, в котором задается формат данных. Так что чисто технически может попасться WAV с беззнаковыми целыми.
Giggity giggity goo!
Re: STM32 новичку в ARM что к чему
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 что к чему
Foks писал(а):И это правильнее, чем Ваш длинный код с условиями, т.к. отнимать нужно 32768,
Действительно, достаточно было от числа просто отнять 32768 как оно стало беззнаковым.
Foks писал(а):Так что чисто технически может попасться WAV с беззнаковыми целыми.
Чанки разбираются. Конечно я не добрался до извлечения инфы из таких чанков как LIST, fact и прочих. Но инфу из fmt,data получаю и использую для настройки проигрывателя.
Galizin писал(а):это ничто, по сравнению с вот этими 2 строчками.
Распотрошил функцию read_file и вставил ее внутренности в цикл загрузки буфера. Звук пошел нормальный.
До этого пытался поднять тактовую частоту, но столкнулся с проблемой доступа к флешке. Купленная недорогая SanDisk SD карта нормально работает до 6МГц SPI(12МГц кварц).
Пока проблема решена.
Спасибо всем за участие.
Re: STM32 новичку в ARM что к чему
почему не прибавить ?Действительно, достаточно было от числа просто отнять 32768 как оно стало беззнаковым.
-32768 + 0x8000 = 0,
32767 + 0x8000 = 0xFFFF.
Для диапазона ЦАП вроде правильно.
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: STM32 новичку в ARM что к чему
Да блин, для 16-битного целого отнять и добавить 0x8000 - одно и то же - инверсия старшего бита.
Giggity giggity goo!