程序運(yùn)行過(guò)程經(jīng)常 變工作主頻 需要注意什么?

我在程序運(yùn)行中修改CH32V208的主頻,經(jīng)常遇到 程序跑著跑著不跑了的情況。但是不變頻就沒(méi)問(wèn)題?請(qǐng)問(wèn)變頻有什么注意事項(xiàng)?以下是我的變頻程序


void MySystemInit (uint8_t clock)? //clock:144 主頻144MHz, clock:32 主頻32MHz,

{

? RCC->CTLR |= (uint32_t)0x00000001;

? RCC->CFGR0 &= (uint32_t)0xF0FF0000;

? RCC->CTLR &= (uint32_t)0xFEF6FFFF;

? RCC->CTLR &= (uint32_t)0xFFFBFFFF;

? RCC->CFGR0 &= (uint32_t)0xFF00FFFF;

? RCC->INTR = 0x009F0000;

? switch(clock){

? ? ? case 144? :

? ? ? ? ? MySetSysClockTo144_HSE();

? ? ? ? ? SystemCoreClock=144000000;

? ? ? ? ?break; /* 可選的 */

? ? ? case 72? :

? ? ? ? ? MySetSysClockTo72_HSE();

? ? ? ? ? SystemCoreClock=72000000;

? ? ? ? ?break; /* 可選的 */


? ? ? case 32? :

? ? ? ? ? MySetSysClockToHSE();//32MHz

? ? ? ? ? SystemCoreClock=((uint32_t)32000000);

? ? ? ? ?break;


? ? ? /* 您可以有任意數(shù)量的 case 語(yǔ)句 */

? ? ? default : /* 可選的 */

? ? ? ? ? MySetSysClockTo144_HSE();

? ? ? ? ? SystemCoreClock=144000000;

? ? ? ? ? ;

? }


? USART_Printf_Init( 1000000 );

? SystemCoreClockUpdate();

? Delay_Init();

}


static void MySetSysClockToHSE(void)

{

? __IO uint32_t StartUpCounter = 0, HSEStatus = 0;



? RCC->CTLR |= ((uint32_t)RCC_HSEON);


? /* Wait till HSE is ready and if Time out is reached exit */

? do

? {

? ? HSEStatus = RCC->CTLR & RCC_HSERDY;

? ? StartUpCounter++;

? } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));


? if ((RCC->CTLR & RCC_HSERDY) != RESET)

? {

? ? HSEStatus = (uint32_t)0x01;

? }

? else

? {

? ? HSEStatus = (uint32_t)0x00;

? }


? if (HSEStatus == (uint32_t)0x01)

? {

? ? /* HCLK = SYSCLK */

? ? RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1;

? ? /* PCLK2 = HCLK */

? ? RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1;

? ? /* PCLK1 = HCLK */

? ? RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV1;


? ? /* Select HSE as system clock source

? ? ?*? CH32V20x_D6 (HSE=8MHZ)

? ? ?*? CH32V20x_D8 (HSE=32MHZ)

? ? ?*? CH32V20x_D8W (HSE=32MHZ)

? ? ?*/

? ? RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_SW));

? ? RCC->CFGR0 |= (uint32_t)RCC_SW_HSE;


? ? /* Wait till HSE is used as system clock source */

? ? while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x04)

? ? {

? ? }

? }

? else

? {

? ? ? ? /* If HSE fails to start-up, the application will have wrong clock

? ? ?* configuration. User can add here some code to deal with this error

? ? ? ? ?*/

? }

}


有沒(méi)有可能堆棧什么需要設(shè)置大一些?因?yàn)榕軒讉€(gè)循環(huán)突然不跑了


您好,請(qǐng)問(wèn)一下程序中不停改變主頻的目的是什么,若是某個(gè)外設(shè)需要改變時(shí)鐘,建議可以改變?cè)撏庠O(shè)所在總線的時(shí)鐘。注意改變主頻后,要注意外設(shè)時(shí)鐘的同步,建議對(duì)外設(shè)重新進(jìn)行初始化,若是程序中含有中斷,建議改變主頻之前先關(guān)閉中斷,然后再開啟。后續(xù)若有問(wèn)題,可郵箱(lzs@wch.cn)溝通。


可能是發(fā)生了時(shí)鐘Glitch的問(wèn)題。建議先切回HSI,然后重新配好PLL等待穩(wěn)定再切回PLL。


你只給出了 MySetSysClockToHSE,卻沒(méi)有 MySetSysClockTo72_HSE、MySetSysClockTo144_HSE

那么無(wú)法看到你是怎么切換的。


但是,你應(yīng)該先切回IRC時(shí)鐘,等待PLL穩(wěn)定后再使用PLL時(shí)鐘。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频