本文主要介紹CWL083VCT6芯片在不同主頻下的功耗測試方法和測試結果。
1.HSIOSC時鐘
HSIOSC 時鐘由內部 RC 振蕩器產生,不需要外部電路,比 HSE 時鐘的成本低,啟動速度快。HSIOSC 時鐘頻率固定為 48MHz,頻率精度低于 HSE 時鐘。RC 振蕩器輸出時鐘的頻率受芯片加工過程、工作電壓、環境溫度等因素影響,CW32L083 提供了 HSIOSC 時鐘頻率校準功能,用戶可通過設置內置高頻時鐘控制寄存器 SYSCTRL_HSI 的 TRIM 位域值來校準 HSIOSC 時鐘頻率,HSIOSC 內部高速 RC 振蕩器在芯片上電后,默認處于開啟狀態,用戶可通過設置系統控制寄存器的 SYSCTRL_CR1 的HSIEN 位域為 0 來關閉。如用戶停止并重新啟動了 HSIOSC 振蕩器,可通過內置高頻時鐘控制寄存器 SYSCTRL_HSI的 STABLE 標志位來確定 HSI 時鐘是否穩定,STABLE 標志為 1 表示 HSIOSC 時鐘已穩定,為 0 則表示 HSIOSC 時鐘還未穩定。
HSIOSC 時鐘經過分頻后輸出 HSI 時鐘,分頻系數通過內置高頻時鐘控制寄存器 SYSCTRL_HSI 的 DIV 位域設置,有效分頻系數為 1、2、4、6、8、10、12、14、16,上電后默認值為 6,所以 HSI 時鐘默認頻率為 8MHz。
2.PLL時鐘
CW32L083 內部集成鎖相環 PLL 電路,可對輸入時鐘源進行鎖相倍頻輸出 PLL 時鐘。用戶可通過內置鎖相環控制寄存器 SYSCTRL_PLL 的 SOURCE 位域選擇 PLL 的輸入參考時鐘源,如下表所示
鎖相環倍頻系數通過內置鎖相環控制寄存器 SYSCTRL_PLL 的 MUL 位域進行設置,可設置范圍為 2 ~ 12,默認值 為 8。為保證鎖相環的鎖定收斂速度及輸出時鐘相噪性能,用戶需根據實際的輸入參考時鐘頻率和輸出時鐘頻率分別設置 SYSCTRL_PLL.FREQIN 和 SYSCTRL_PLL.FREQOUT 位域的值。
PLL 默認處于關閉狀態,通過設置系統控制寄存器 SYSCTRL_CR1 的 PLLEN 位域為 1 來啟動。PLL 啟動后,芯片 內部時鐘監控模塊檢測到一定數量的 PLL 時鐘信號,則認為 PLL 時鐘已穩定。檢測時鐘數量可通過內置鎖相環控制寄存器 SYSCTRL_PLL 的 WAITCYCLE 位域進行設置,通過內置鎖相環控制寄存器 SYSCTRL_PLL 的 STABLE 標志位,可確定 PLL 時鐘是否穩定,STABLE 標志為 1 表 示 PLL 時鐘已穩定,為 0 則表示 PLL 時鐘還未穩定。
修改 PLL 參數流程如下:
步驟 1:設置 SYSCTRL_CR1.PLLEN 為 0,關閉 PLL;
步驟 2:等待 SYSCTRL_PLL.STABLE 標志被系統硬件清零;
步驟 3:更改 PLL 的參數;
步驟 4:設置 SYSCTRL_CR1.PLLEN 為 1,啟動 PLL;
步驟 5:等待 SYSCTRL_PLL.STABLE 標志被系統硬件置 1,標識 PLL 時鐘已穩定。
3.實例演示
通過按鍵KEY1中斷調節運行主頻(4M/12M/24M/48M/64M),LCD顯示對應數字。
(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中斷控制函數
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); //切換系統時鐘到HSI 4MHz RCC_PLL_Disable(); //關閉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); //切換系統時鐘到HSI 8MHz RCC_PLL_Disable(); //關閉PLL FLASH_SetLatency(FLASH_Latency_2); //頻率大于24M需要配置FlashWait=2 CW_SYSCTRL->AHBEN_f.FLASH = 0; //關閉FLASH時鐘 RCC_HSI_Enable(RCC_HSIOSC_DIV1); RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切換系統時鐘到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); //開啟PLL,PLL源為HSI 8MHz FLASH_SetLatency(FLASH_Latency_3); //頻率大于48M需要配置FlashWait=3 CW_SYSCTRL->AHBEN_f.FLASH = 0; //關閉FLASH時鐘 RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL); //切換系統時鐘到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(); //啟動LSI為LCD提供時鐘 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); //顯示對比度,僅內部電阻模式時有效 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)主函數
int32_t main(void) { RCC_HSI_Enable(RCC_HSIOSC_DIV6); GPIO_Configuration(); LCD_Configuration(); NVIC_Configuration(); while(1){} }
4.測試結果
將電流表串接在單板J23跳線上,單板上電,默認主頻為8MHz然后通過KEY1按鍵,控制主頻在4 MHz -12 MHz -24 MHz -48 MHz -64 MHz之間進行切換,記錄不同主頻下的電流值,如下:
-
單片機
+關注
關注
6039文章
44583瀏覽量
636508 -
mcu
+關注
關注
146文章
17185瀏覽量
351717
發布評論請先 登錄
相關推薦
評論