Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Архив » STM32 Система тактирования


STM32 Система тактирования

Сообщений 31 страница 37 из 37

31

Непонятно про какой обход идет речь. Ядро тактируеться от AHB (системный таймер может брать эту тактовую), а второй источник AHB/8 идет только на системный таймер. Ну и в RM в разделе RCC про переключение написано. (только сегодня увидел). Вроде так все и нарисовано.

32

STM32L053R

столкнулся с непонятным для меня моментом. Делаю тактирование от внутреннего резонатора. он 16MГц.  хочу получить 8M

сделал так

Код:
void SystemInit(void)
  { 
    RCC->APB1ENR |= (RCC_APB1ENR_PWREN); // Enable power interface clock */
    PWR->CR = (PWR->CR & ~(PWR_CR_VOS)) | PWR_CR_VOS_0; //Select voltage scale 1 (1.65V - 1.95V) i.e. (01)  for VOS bits in PWR_CR  
    RCC->CR |= RCC_CR_HSION | RCC_CR_HSIDIVEN; //Enable HSI divided by 4 in RCC-> CR
     while ((RCC->CR & (RCC_CR_HSIRDY |RCC_CR_HSIDIVF)) != (RCC_CR_HSIRDY |RCC_CR_HSIDIVF)){} //Wait for HSI ready flag and HSIDIV flag
    RCC->CFGR |= RCC_CFGR_PLLSRC_HSI | RCC_CFGR_PLLMUL8 | RCC_CFGR_PLLDIV4; //Set PLL on HSI, multiply by 8 and divided by 4
    RCC->CR |= RCC_CR_PLLON; //Enable the PLL in RCC_CR register
     while ((RCC->CR & RCC_CR_PLLRDY)  == 0){} //Wait for PLL ready flag
    RCC->CFGR |= RCC_CFGR_SW_PLL; // Select PLL as system clock  
     while ((RCC->CFGR & RCC_CFGR_SWS_PLL)  == 0){} //Wait for clock switched on PLL  
  }

вроде все работало... но были странности с SPI, а именно с датчиком температуры ADT7301. датчик находится на отдельной платке и соединен с основном платой шлейфом примерно 15-20см.   Если уменьшить до 4-5см, то глюков нет.  На большем уже стали проявлятся глюки. Т.е. считывает всякую лажу.   Игрался с настройкой частоты SPI - результата не дало. Поставил скорость ножек на максимум.  В общем ничего проблему не решило.

Последнее что сделал , это изменил тактирование и сделал так

Код:
void SystemInit(void)
  { 
    RCC->APB1ENR |= (RCC_APB1ENR_PWREN); // Enable power interface clock */
    PWR->CR = (PWR->CR & ~(PWR_CR_VOS)) | PWR_CR_VOS_0; //Select voltage scale 1 (1.65V - 1.95V) i.e. (01)  for VOS bits in PWR_CR  
    RCC->CR |= RCC_CR_HSION| RCC_CR_HSIDIVEN; //Enable HSI divided by 4 in RCC-> CR
     while ((RCC->CR & (RCC_CR_HSIRDY |RCC_CR_HSIDIVF)) != (RCC_CR_HSIRDY |RCC_CR_HSIDIVF)){} //Wait for HSI ready flag and HSIDIV flag
    RCC->CFGR |= RCC_CFGR_PLLSRC_HSI | RCC_CFGR_PLLMUL4 | RCC_CFGR_PLLDIV2; //Set PLL on HSI, multiply by 4 and divided by 2
    RCC->CR |= RCC_CR_PLLON; //Enable the PLL in RCC_CR register
     while ((RCC->CR & RCC_CR_PLLRDY)  == 0){} //Wait for PLL ready flag
    RCC->CFGR |= RCC_CFGR_SW_PLL; // Select PLL as system clock  
     while ((RCC->CFGR & RCC_CFGR_SWS_PLL)  == 0){} //Wait for clock switched on PLL  
  }

и это сработало.

разница только в одной строчке
1 вариант -     RCC->CFGR |= RCC_CFGR_PLLSRC_HSI | RCC_CFGR_PLLMUL8 | RCC_CFGR_PLLDIV4; //Set PLL on HSI, multiply by 8 and divided by 4
2 вариант -     RCC->CFGR |= RCC_CFGR_PLLSRC_HSI | RCC_CFGR_PLLMUL4| RCC_CFGR_PLLDIV2; //Set PLL on HSI, multiply by 4 and divided by 2

и там и там 8МГц от внутреннего HSI16.  но в первом варианте стабильной работы на длинных проводах добиться не удается никак.  Во втором варианте все нормально работает, а редкие глюки можно спокойно убрать программно.
Вот сижу и чешу репу - почему так ? я может что-то не знаю.... не прочел что-то важное ?!?

В общем если у кого будут мысли  - отпишитесь.

33

Atomic-dm написал(а):

стабильной работы на длинных проводах добиться

Посмотрите настройку пинов SPI. Точнее их скорость. Чем больше скорость, тем более крутой фронт такта, тем более "громче" звон отраженного сигнала на длинных проводах. Уменьшайте скорость пинов, тем самым увеличится время переключения с 0 в 1, и тем менее будет идти отражение сигнала, и меньше будет "звенеть" ("звонить", шуметь.... и т.д.).
Ну и я для себя понял, чем длиннее провода, тем меньше должна быть скорость нарастания уровня, т.е. фронта такта.

Забыл добавить:
"звон" == помехи.
Так как звонить может от 0 вольт до 5 вольт, а может и от -15ти то +15 вольт. И это может как и убить пины, так и выдавать "неправильные" такты сигналов

Отредактировано MasterAlexei (2019-06-05 10:32:37)

34

дык дело в том, что изначально скорость стояла по дефолту. потом поставил на максимум.
с тактированием SPI тоже игрался и проверил все возможные комбинации...

в общем удивительное дело.

P.S. на одном приборе еще поэкспериментирую.  Просто срочность такая, что три прибора нужно отдать в пятницу :) Ну короче как обычно все....

35

PLL VCO не может быть больше 96 МГц (по крайней мере у L073)

36

Часть картинок не грузится. И не только в этой теме так. Лучше бы форум сделали бы не на "создай бесплатный форум", а нормальный хостинг с движком.

37

Atomic-dm написал(а):

P.S. вообще считаю что не стоит захламлять эту тему . если есть возможность - последние непрофильные посты надо или в отдельную тему перебросить или удалить вообще.

Перенёс дискуссию про картинки и хостинг в тему О форуме


Вы здесь » Микроконтроллеры » Архив » STM32 Система тактирования