Непонятно про какой обход идет речь. Ядро тактируеться от AHB (системный таймер может брать эту тактовую), а второй источник AHB/8 идет только на системный таймер. Ну и в RM в разделе RCC про переключение написано. (только сегодня увидел). Вроде так все и нарисовано.
STM32 Система тактирования
Сообщений 31 страница 37 из 37
Поделиться322019-06-05 10:16:26
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. но в первом варианте стабильной работы на длинных проводах добиться не удается никак. Во втором варианте все нормально работает, а редкие глюки можно спокойно убрать программно.
Вот сижу и чешу репу - почему так ? я может что-то не знаю.... не прочел что-то важное ?!?
В общем если у кого будут мысли - отпишитесь.
Поделиться332019-06-05 10:31:04
стабильной работы на длинных проводах добиться
Посмотрите настройку пинов SPI. Точнее их скорость. Чем больше скорость, тем более крутой фронт такта, тем более "громче" звон отраженного сигнала на длинных проводах. Уменьшайте скорость пинов, тем самым увеличится время переключения с 0 в 1, и тем менее будет идти отражение сигнала, и меньше будет "звенеть" ("звонить", шуметь.... и т.д.).
Ну и я для себя понял, чем длиннее провода, тем меньше должна быть скорость нарастания уровня, т.е. фронта такта.
Забыл добавить:
"звон" == помехи.
Так как звонить может от 0 вольт до 5 вольт, а может и от -15ти то +15 вольт. И это может как и убить пины, так и выдавать "неправильные" такты сигналов
Отредактировано MasterAlexei (2019-06-05 10:32:37)
Поделиться342019-06-05 10:34:51
дык дело в том, что изначально скорость стояла по дефолту. потом поставил на максимум.
с тактированием SPI тоже игрался и проверил все возможные комбинации...
в общем удивительное дело.
P.S. на одном приборе еще поэкспериментирую. Просто срочность такая, что три прибора нужно отдать в пятницу Ну короче как обычно все....
Поделиться352019-06-05 13:21:32
PLL VCO не может быть больше 96 МГц (по крайней мере у L073)
Поделиться362019-06-09 15:38:38
Часть картинок не грузится. И не только в этой теме так. Лучше бы форум сделали бы не на "создай бесплатный форум", а нормальный хостинг с движком.
Поделиться372019-06-13 16:44:04
P.S. вообще считаю что не стоит захламлять эту тему . если есть возможность - последние непрофильные посты надо или в отдельную тему перебросить или удалить вообще.
Перенёс дискуссию про картинки и хостинг в тему О форуме