700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 华大单片机HC32L130/HC32L136PWM配置

华大单片机HC32L130/HC32L136PWM配置

时间:2020-01-28 13:33:55

相关推荐

华大单片机HC32L130/HC32L136PWM配置

标题可编程计数阵列PCA

PCA(可编程计数器阵列 Programmable Counter Array)支持最多 5 个 16 位的捕获/比较

模块。该定时/计数器可用作为一个通用的时钟计数/事件计数器的捕获/比较功能。PCA

的每个模块都可以进行独立编程,以提供输入捕捉,输出比较或脉冲宽度调制。另外

模块 4 有额外的看门狗定时器模式。

16 位重载 位重载 计数模式即PWM模式

计数器计数到与寄存器 CARR 的值相同时溢出后计数器的值变为 0,继续开始向上计

数,可用于 PCA 捕获模式,16 位 PWM 模式。

设置流程

设置 PCA_EPWM 的 EPMW 为 1设置 PCA_CARR 设置计数周期值设置 PCA_CMOD.CPS 选择计数时钟根据需要设置 PCA_CMOD.CFIE 设置计数溢出中断使能时钟 PCA_CCON.CR 启动 PCA 计数器

PCA计数阵列PWM代码

void PCA_PWM_Config(void){stc_pca_config_t stcConfig;stc_pca_capmodconfig_t stcModConfig;stc_gpio_cfg_t stcPCA0Port;uint16_tu16ArrData = 120; //PWM周期相关uint16_tu16CmpData = 60; //PWM占空比相关DDL_ZERO_STRUCT(stcConfig);DDL_ZERO_STRUCT(stcModConfig);DDL_ZERO_STRUCT(stcPCA0Port);//PCA、GPIO外设时钟开启Sysctrl_SetPeripheralGate(SysctrlPeripheralPca, TRUE);Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);//GPIO CFG//PA06设置为PCA_CH0//Gpio_ClrAnalogMode(GpioPortA, GpioPin6);stcPCA0Port.enDrv = GpioDrvH;stcPCA0Port.enDir = GpioDirOut;Gpio_Init(PIN_PWM_Tune, &stcPCA0Port);Gpio_SetAfMode(PIN_PWM_Tune, GpioAf2);stcConfig.enCIDL = IdleGoOn; //休眠模式PCA工作 stcConfig.enWDTE = PCAWDTDisable; //wdt功能关闭stcConfig.enCPS = PCAPCLKDiv2;//PCLK/2stcConfig.pfnPcaCb = PcaInt; //中断函数入口stcModConfig.enECOM= ECOMEnable;//比较器功能允许stcModConfig.enCAPP= CAPPDisable; //上升沿捕获禁止stcModConfig.enCAPN= CAPNDisable; //下降沿捕获禁止stcModConfig.enMAT= MATEnable; //允许匹配stcModConfig.enTOG= TOGEnable; //允许翻转stcModConfig.en8bitPWM = PCA8bitPWMDisable; //禁止8位PWM功能Pca_Enable16bitPWM();//增强PWM功能使能if (Ok != Pca_Init(&stcConfig)){// return Error;}if (Ok != Pca_CapModConfig(Module0, &stcModConfig)){// return Error;}Pca_CARRSet(u16ArrData); //周期重载值设置Pca_CmpData16Set(Module0, u16CmpData); //(比较值)比较捕获寄存器设置Pca_Run();}

以上是pwm的GPIO配置跟PWM模式配置

/******************************************************************************** Function implementation - global ('extern') and local ('static')******************************************************************************//******************************************************************************** Pca中断服务程序******************************************************************************/static volatile uint32_t u32PcaTestFlag = 0;void PcaInt(void){if (TRUE == Pca_GetCntIntFlag()){Pca_ClearCntIntFlag();u32PcaTestFlag |= 0x20;}if (TRUE == Pca_GetIntFlag(Module0)){Pca_ClearIntFlag(Module0);u32PcaTestFlag |= 0x01;}if (TRUE == Pca_GetIntFlag(Module1)){Pca_ClearIntFlag(Module1);u32PcaTestFlag |= 0x02;}if (TRUE == Pca_GetIntFlag(Module2)){Pca_ClearIntFlag(Module2);u32PcaTestFlag |= 0x04;}if (TRUE == Pca_GetIntFlag(Module3)){Pca_ClearIntFlag(Module3);u32PcaTestFlag |= 0x08;}if (TRUE == Pca_GetIntFlag(Module4)){Pca_ClearIntFlag(Module4);u32PcaTestFlag |= 0x10;}}

以上是中断函数清理标志位。

主函数里面初始化PCA_PWM_Config();

然后根据Pca_CmpData16Set(Module0, u16CmpData);更改占空比,然后就可以输出你想要的PWM了,祝你好运!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。