本文主要介紹CWL083VCT6芯片在不同主頻下的功耗測(cè)試方法和測(cè)試結(jié)果。
1.HSIOSC時(shí)鐘
HSIOSC 時(shí)鐘由內(nèi)部 RC 振蕩器產(chǎn)生,不需要外部電路,比 HSE 時(shí)鐘的成本低,啟動(dòng)速度快。HSIOSC 時(shí)鐘頻率固定為 48MHz,頻率精度低于 HSE 時(shí)鐘。RC 振蕩器輸出時(shí)鐘的頻率受芯片加工過(guò)程、工作電壓、環(huán)境溫度等因素影響,CW32L083 提供了 HSIOSC 時(shí)鐘頻率校準(zhǔn)功能,用戶可通過(guò)設(shè)置內(nèi)置高頻時(shí)鐘控制寄存器 SYSCTRL_HSI 的 TRIM 位域值來(lái)校準(zhǔn) HSIOSC 時(shí)鐘頻率,HSIOSC 內(nèi)部高速 RC 振蕩器在芯片上電后,默認(rèn)處于開(kāi)啟狀態(tài),用戶可通過(guò)設(shè)置系統(tǒng)控制寄存器的 SYSCTRL_CR1 的HSIEN 位域?yàn)?0 來(lái)關(guān)閉。如用戶停止并重新啟動(dòng)了 HSIOSC 振蕩器,可通過(guò)內(nèi)置高頻時(shí)鐘控制寄存器 SYSCTRL_HSI的 STABLE 標(biāo)志位來(lái)確定 HSI 時(shí)鐘是否穩(wěn)定,STABLE 標(biāo)志為 1 表示 HSIOSC 時(shí)鐘已穩(wěn)定,為 0 則表示 HSIOSC 時(shí)鐘還未穩(wěn)定。
HSIOSC 時(shí)鐘經(jīng)過(guò)分頻后輸出 HSI 時(shí)鐘,分頻系數(shù)通過(guò)內(nèi)置高頻時(shí)鐘控制寄存器 SYSCTRL_HSI 的 DIV 位域設(shè)置,有效分頻系數(shù)為 1、2、4、6、8、10、12、14、16,上電后默認(rèn)值為 6,所以 HSI 時(shí)鐘默認(rèn)頻率為 8MHz。
2.PLL時(shí)鐘
CW32L083 內(nèi)部集成鎖相環(huán) PLL 電路,可對(duì)輸入時(shí)鐘源進(jìn)行鎖相倍頻輸出 PLL 時(shí)鐘。用戶可通過(guò)內(nèi)置鎖相環(huán)控制寄存器 SYSCTRL_PLL 的 SOURCE 位域選擇 PLL 的輸入?yún)⒖紩r(shí)鐘源,如下表所示
鎖相環(huán)倍頻系數(shù)通過(guò)內(nèi)置鎖相環(huán)控制寄存器 SYSCTRL_PLL 的 MUL 位域進(jìn)行設(shè)置,可設(shè)置范圍為 2 ~ 12,默認(rèn)值 為 8。為保證鎖相環(huán)的鎖定收斂速度及輸出時(shí)鐘相噪性能,用戶需根據(jù)實(shí)際的輸入?yún)⒖紩r(shí)鐘頻率和輸出時(shí)鐘頻率分別設(shè)置 SYSCTRL_PLL.FREQIN 和 SYSCTRL_PLL.FREQOUT 位域的值。
PLL 默認(rèn)處于關(guān)閉狀態(tài),通過(guò)設(shè)置系統(tǒng)控制寄存器 SYSCTRL_CR1 的 PLLEN 位域?yàn)?1 來(lái)啟動(dòng)。PLL 啟動(dòng)后,芯片 內(nèi)部時(shí)鐘監(jiān)控模塊檢測(cè)到一定數(shù)量的 PLL 時(shí)鐘信號(hào),則認(rèn)為 PLL 時(shí)鐘已穩(wěn)定。檢測(cè)時(shí)鐘數(shù)量可通過(guò)內(nèi)置鎖相環(huán)控制寄存器 SYSCTRL_PLL 的 WAITCYCLE 位域進(jìn)行設(shè)置,通過(guò)內(nèi)置鎖相環(huán)控制寄存器 SYSCTRL_PLL 的 STABLE 標(biāo)志位,可確定 PLL 時(shí)鐘是否穩(wěn)定,STABLE 標(biāo)志為 1 表 示 PLL 時(shí)鐘已穩(wěn)定,為 0 則表示 PLL 時(shí)鐘還未穩(wěn)定。
修改 PLL 參數(shù)流程如下:
步驟 1:設(shè)置 SYSCTRL_CR1.PLLEN 為 0,關(guān)閉 PLL;
步驟 2:等待 SYSCTRL_PLL.STABLE 標(biāo)志被系統(tǒng)硬件清零;
步驟 3:更改 PLL 的參數(shù);
步驟 4:設(shè)置 SYSCTRL_CR1.PLLEN 為 1,啟動(dòng) PLL;
步驟 5:等待 SYSCTRL_PLL.STABLE 標(biāo)志被系統(tǒng)硬件置 1,標(biāo)識(shí) PLL 時(shí)鐘已穩(wěn)定。
3.實(shí)例演示
通過(guò)按鍵KEY1中斷調(diào)節(jié)運(yùn)行主頻(4M/12M/24M/48M/64M),LCD顯示對(duì)應(yīng)數(shù)字。
(1)初始化GPIO
void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.IT = GPIO_IT_FALLING; //KEY1 -- PA04 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pins = GPIO_PIN_4; GPIO_Init(CW_GPIOA, &GPIO_InitStruct); GPIO_ConfigFilter(CW_GPIOA, bv4, GPIO_FLTCLK_LSI); }
(2)GPIO中斷控制函數(shù)
void GPIOA_IRQHandlerCallback(void) { if(CW_GPIOA->ISR_f.PIN4) { GPIOA_INTFLAG_CLR(bv4); Key1Count++; switch(Key1Count) { case 1: CW_LCD->RAM0 = 0x0603;//4 RCC_HSI_Enable(RCC_HSIOSC_DIV12); RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切換系統(tǒng)時(shí)鐘到HSI 4MHz RCC_PLL_Disable(); //關(guān)閉PLL break; case 2: CW_LCD->RAM0 = 0x030e0005;//12 RCC_HSI_Enable(RCC_HSIOSC_DIV4); break; case 3: CW_LCD->RAM0 = 0x0603030e;//24 RCC_HSI_Enable(RCC_HSIOSC_DIV2); break; case 4: CW_LCD->RAM0 = 0x0f0f0603;//48 RCC_HSI_Enable(RCC_HSIOSC_DIV6); RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切換系統(tǒng)時(shí)鐘到HSI 8MHz RCC_PLL_Disable(); //關(guān)閉PLL FLASH_SetLatency(FLASH_Latency_2); //頻率大于24M需要配置FlashWait=2 CW_SYSCTRL->AHBEN_f.FLASH = 0; //關(guān)閉FLASH時(shí)鐘 RCC_HSI_Enable(RCC_HSIOSC_DIV1); RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切換系統(tǒng)時(shí)鐘到HSI 48MHz break; case 5: CW_LCD->RAM0 = 0x0603050f;//64 RCC_HSI_Enable(RCC_HSIOSC_DIV6); RCC_PLL_Enable(RCC_PLLSOURCE_HSI, 8000000, RCC_PLL_MUL_8); //開(kāi)啟PLL,PLL源為HSI 8MHz FLASH_SetLatency(FLASH_Latency_3); //頻率大于48M需要配置FlashWait=3 CW_SYSCTRL->AHBEN_f.FLASH = 0; //關(guān)閉FLASH時(shí)鐘 RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL); //切換系統(tǒng)時(shí)鐘到PLL break; case 6: CW_LCD->RAM0 = 0; CW_LCD->RAM1 = 0; CW_LCD->RAM8 = 0; CW_LCD->RAM9 = 0; Key1Count = 0; break; } } }
(3)初始化LCD
void LCD_Configuration(void) { LCD_InitTypeDef LCD_InitStruct = {0}; LCD_InitStruct.LCD_Bias = LCD_Bias_1_3; LCD_InitStruct.LCD_ClockSource = LCD_CLOCK_SOURCE_LSI; LCD_InitStruct.LCD_Duty = LCD_Duty_1_4; LCD_InitStruct.LCD_ScanFreq = LCD_SCAN_FREQ_256HZ; LCD_InitStruct.LCD_VoltageSource = LCD_VoltageSource_Internal; __RCC_LCD_CLK_ENABLE(); RCC_LSI_Enable(); //啟動(dòng)LSI為L(zhǎng)CD提供時(shí)鐘 LCD_Init(&LCD_InitStruct); //基本配置 LCD_COMConfig(LCD_COM0 | LCD_COM1 | LCD_COM2 | LCD_COM3, ENABLE); //SEG LCD_SEG0to23Config(LCD_SEG0 | LCD_SEG1 | LCD_SEG2 | LCD_SEG3 | LCD_SEG4 | LCD_SEG5 | LCD_SEG6 | LCD_SEG7, ENABLE); LCD_SEG32to55Config(LCD_SEG32 | LCD_SEG33 | LCD_SEG34 | LCD_SEG35 | LCD_SEG36 | LCD_SEG37 | LCD_SEG38 | LCD_SEG39, ENABLE); LCD_ContrastConfig(LCD_Contrast_Level_2); //顯示對(duì)比度,僅內(nèi)部電阻模式時(shí)有效 LCD_DriveVoltageConfig(LCD_INRS_LEVEL_0); //功耗最小 CW_LCD->RAM0 = 0x0f0f; LCD_Cmd(ENABLE); }
(4)配置嵌套的矢量中斷控制器
void NVIC_Configuration(void) { __disable_irq(); NVIC_SetPriority(GPIOA_IRQn, 0); NVIC_EnableIRQ(GPIOA_IRQn); __enable_irq(); }
(5)主函數(shù)
int32_t main(void) { RCC_HSI_Enable(RCC_HSIOSC_DIV6); GPIO_Configuration(); LCD_Configuration(); NVIC_Configuration(); while(1){} }
4.測(cè)試結(jié)果
將電流表串接在單板J23跳線上,單板上電,默認(rèn)主頻為8MHz然后通過(guò)KEY1按鍵,控制主頻在4 MHz -12 MHz -24 MHz -48 MHz -64 MHz之間進(jìn)行切換,記錄不同主頻下的電流值,如下:
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44621瀏覽量
638614 -
mcu
+關(guān)注
關(guān)注
146文章
17324瀏覽量
352658
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論