小华半导体L196对于高级定时器输出PWM的代码分析20221211

//20221211
    App_ClockInit();     //时钟初始化//这一块是时钟的初始化//number1
//
    App_AdvTimerInit(0xC000, 0x4000, 0x8000);  //AdvTimer4初始化//number2
    //配置为锯齿波模式: 周期0xC000, CHA占空比设置0x4000,CHB占空比设置0x8000
//对于锯齿波的理解   
    App_AdvTimerPortInit();    //AdvTimer端口初始化//number3
    
    Adt_StartCount(M0P_ADTIM4); //AdvTimer4运行
    
    while(1);
//number1 时钟初始化

//number2 App_AdvTimerInit 的分析
    Sysctrl_SetPeripheralGate(SysctrlPeripheralAdvTim, TRUE);    //ADT外设时钟使能
    
    stcAdtBaseCntCfg.enCntMode = AdtSawtoothMode;                 //锯齿波模式
    stcAdtBaseCntCfg.enCntDir = AdtCntUp;							//向上计数
    stcAdtBaseCntCfg.enCntClkDiv = AdtClkPClk0;					  //CLK的零分配
    
    Adt_Init(M0P_ADTIM4, &stcAdtBaseCntCfg);                      //ADT载波、计数模式、时钟配置
    
    Adt_SetPeriod(M0P_ADTIM4, u16Period);                         //周期设置
    
    enAdtCompareA = AdtCompareA;
    Adt_SetCompareValue(M0P_ADTIM4, enAdtCompareA, u16CHA_PWMDuty);  //通用比较基准值寄存器A设置
    
    enAdtCompareB = AdtCompareB;
    Adt_SetCompareValue(M0P_ADTIM4, enAdtCompareB, u16CHB_PWMDuty);  //通用比较基准值寄存器B设置
    
    stcAdtTIM4ACfg.enCap = AdtCHxCompareOutput;            //比较输出
    stcAdtTIM4ACfg.bOutEn = TRUE;                          //CHA输出使能
    stcAdtTIM4ACfg.enPerc = AdtCHxPeriodLow;               //计数值与周期匹配时CHA电平保持不变
    stcAdtTIM4ACfg.enCmpc = AdtCHxCompareHigh;             //计数值与比较值A匹配时,CHA电平翻转
    stcAdtTIM4ACfg.enStaStp = AdtCHxStateSelSS;            //CHA起始结束电平由STACA与STPCA控制
    stcAdtTIM4ACfg.enStaOut = AdtCHxPortOutLow;            //CHA起始电平为低
    stcAdtTIM4ACfg.enStpOut = AdtCHxPortOutLow;            //CHA结束电平为低
    Adt_CHxXPortCfg(M0P_ADTIM4, AdtCHxA, &stcAdtTIM4ACfg);   //端口CHA配置
    
    stcAdtTIM4BCfg.enCap = AdtCHxCompareOutput;
    stcAdtTIM4BCfg.bOutEn = TRUE;
    stcAdtTIM4BCfg.enPerc = AdtCHxPeriodInv;
    stcAdtTIM4BCfg.enCmpc = AdtCHxCompareInv;
    stcAdtTIM4BCfg.enStaStp = AdtCHxStateSelSS;
    stcAdtTIM4BCfg.enStaOut = AdtCHxPortOutLow;
    stcAdtTIM4BCfg.enStpOut = AdtCHxPortOutLow;
    Adt_CHxXPortCfg(M0P_ADTIM4, AdtCHxB, &stcAdtTIM4BCfg);    //端口CHB配置
//number3 ///< AdvTimer端口初始化
void App_AdvTimerPortInit(void)
{
    stc_gpio_cfg_t         stcTIM4Port;
    
    DDL_ZERO_STRUCT(stcTIM4Port);
    
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //端口外设时钟使能
    
    stcTIM4Port.enDir  = GpioDirOut;//配置成输出
	
    //PA08设置为TIM4_CHA
    Gpio_Init(GpioPortA, GpioPin8, &stcTIM4Port);
    Gpio_SetAfMode(GpioPortA,GpioPin8,GpioAf6);
    
    //PA11设置为TIM4_CHB
    Gpio_Init(GpioPortA, GpioPin11, &stcTIM4Port);
    Gpio_SetAfMode(GpioPortA,GpioPin11,GpioAf7);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32L431RCT6是意法半导体(STMicroelectronics)推出的一款低功耗微控制器,它基于ARM Cortex-M4内核,并且具有丰富的外设和功能。其中包括定时器模块,用于实现各种计时和定时任务。 在STM32L431RCT6中,有多个定时器模块可供使用,包括通用定时器(TIM)和基本定时器(BASIC TIM)。这些定时器模块具有不同的特性和功能,可以满足不同的应用需求。 通用定时器模块(TIM)主要用于精确的计时和周期性触发事件。它们具有多个计数器和通道,可以配置为不同的工作模式,例如定时器模式、输入捕获模式和输出比较模式。通用定时器还支持硬件定时器触发、PWM生成、编码器接口等功能。 基本定时器(BASIC TIM)是一个简化版本的通用定时器,它通常用于较简单的计时任务。基本定时器只有一个计数器和一个通道,可以配置为定时器模式或单脉冲模式。 在使用这些定时器模块时,你可以通过编程配置其工作模式、预分频因子、计数模式等参数。通过读取计数器的值,你可以获取定时器的当前计数值,从而实现精确的计时功能。同时,你还可以配置定时器的中断使能,当计数器到达设定值时,触发中断并执行相应的中断服务程序。 总之,STM32L431RCT6的定时器模块提供了丰富的功能和灵活性,可以用于各种计时和定时任务的应用场景。通过合理配置和使用这些定时器,你可以实现精确的计时控制和时间触发功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值