|
以下代碼是我自己寫的設定register的lib來實現HRTIM互補式PWM,實在用不慣ST的庫,希望用STM32F334來實現數字電源控制,接下來會繼續更新其他PWM模式,ADC取樣方法,數字補償器,數字濾波器設計代碼。 敬請期待!! 希望大家都可以STM32F334來玩數字電源!! void HRTIM_CLK_Config(void) { /* Initialize the HRTIM clock and DLL */ RCC_CFGR3.bits.HRTIM1SW = 1; //PLL vco output (running up to 144 MHz) RCC_APB2ENR.bits.HRTIM1EN = 1; //Enable HRTIM clock HRTIM_DLLCR.bits.CALRTE = 3; HRTIM_DLLCR.bits.CALEN = 1; while(!HRTIM_ISR.bits.DLLRDY); //Wait calibration completion } void HRTIM_ComplementaryPWM_Config(void) { HRTIM_TIMACR.bits.CKPSCx = 0; // 144MHz * 32 HRTIM_TIMACR.bits.CONT = 1; HRTIM_TIMACR.bits.HALF = 0; HRTIM_TIMACR.bits.SYNCSTRTx = 0; HRTIM_TIMACR.bits.SYNCRSTx = 0; HRTIM_TIMACR.bits.DACSYNC = 0; HRTIM_TIMACR.bits.PREEN = 1; HRTIM_TIMACR.bits.UPDGAT = 0; HRTIM_BMCR.bits.MTBM = 0; HRTIM_TIMACR.bits.TxREPU = 1; HRTIM_TIMACR.bits.TxRSTU = 0; HRTIM_TIMACR.bits.PSHPLL = 0; HRTIM_FLTAR.bits.FLT1EN = 1; HRTIM_FLTAR.bits.FLTLCK = 0; HRTIM_OUTAR.bits.DTEN = 1; HRTIM_OUTAR.bits.DLYPRTEN = 0; HRTIM_OUTAR.bits.POL1 = 0; HRTIM_SETA1R.bits.PER = 1; HRTIM_RSTA1R.bits.CMP1 = 1; HRTIM_OUTAR.bits.IDLEM1 = 0; HRTIM_OUTAR.bits.IDLES1 = 0; HRTIM_OUTAR.bits.FAULT1 = 0; HRTIM_OUTAR.bits.CHP1 = 0; HRTIM_OUTAR.bits.DIDL1 = 0; HRTIM_OUTAR.bits.POL2 = 0; HRTIM_SETA2R.bits.PER = 1; HRTIM_RSTA2R.bits.CMP1 = 1; HRTIM_OUTAR.bits.IDLEM2 = 0; HRTIM_OUTAR.bits.IDLES2 = 0; HRTIM_OUTAR.bits.FAULT2 = 0; HRTIM_OUTAR.bits.CHP2 = 0; HRTIM_OUTAR.bits.DIDL2 = 0; HRTIM_PERAR.all = 46080; // 100KHz = 144MHz * 32 / 100KHz HRTIM_CMP1AR.all = 46080>>2; // 50% Duty setting //Dead time setting HRTIM_DTAR.bits.DTPRSC = 0; //Deadtime resoultion setting to 868psec //Falling side HRTIM_DTAR.bits.DTFLKx = 0; HRTIM_DTAR.bits.SDTFx = 0; HRTIM_DTAR.bits.DTFSLKx = 1; HRTIM_DTAR.bits.DTFx = 500; //500 * 868p = 434ns //Rising side HRTIM_DTAR.bits.DTRLKx = 0; HRTIM_DTAR.bits.SDTRx = 0; HRTIM_DTAR.bits.DTRSLKx = 1; HRTIM_DTAR.bits.DTRx = 500; HRTIM_MCR.bits.TACEN = 1; HRTIM_OENR.bits.TA1OEN = 1; HRTIM_OENR.bits.TA2OEN = 1; } void HRTIM_Outputs_Config(void) { /* Enable GPIOA clock for timer A outputs */ RCC_AHBENR.bits.IOPAEN = 1; /* Configure HRTIM output: TA1 (PA8) and TA2 (PA9)*/ GPIOA_MODER.bits.MODER8 = GPIO_Mode_AF; GPIOA_OTYPER.bits.OT8 = GPIO_OType_PP; GPIOA_OSPEEDR.bits.OSPEEDR8 = GPIO_Speed_50MHz; GPIOA_PUPDR.bits.PUPDR8 = GPIO_PuPd_NOPULL; GPIOA_AFRH.bits.AFR8 = GPIO_AF_13; GPIOA_MODER.bits.MODER9 = GPIO_Mode_AF; GPIOA_OTYPER.bits.OT9 = GPIO_OType_PP; GPIOA_OSPEEDR.bits.OSPEEDR9 = GPIO_Speed_50MHz; GPIOA_PUPDR.bits.PUPDR9 = GPIO_PuPd_NOPULL; GPIOA_AFRH.bits.AFR9 = GPIO_AF_13; } int main(void) { SystemInit(); HRTIM_Outputs_Config(); HRTIM_CLK_Config(); HRTIM_ComplementaryPWM_Config(); while(1) { } } |
|
微信公众号
手机版