[方案相关] 小华半导体L196对于高级定时器输出PWM的代码分析20221211

[复制链接]
789|7
 楼主| grfqq325 发表于 2023-6-25 19:19 | 显示全部楼层 |阅读模式
  1. //20221211
  2.     App_ClockInit();     //时钟初始化//这一块是时钟的初始化//number1
  3. //
  4.     App_AdvTimerInit(0xC000, 0x4000, 0x8000);  //AdvTimer4初始化//number2
  5.     //配置为锯齿波模式: 周期0xC000, CHA占空比设置0x4000,CHB占空比设置0x8000
  6. //对于锯齿波的理解   
  7.     App_AdvTimerPortInit();    //AdvTimer端口初始化//number3
  8.    
  9.     Adt_StartCount(M0P_ADTIM4); //AdvTimer4运行
  10.    
  11.     while(1);
  12. //number1 时钟初始化

  13. //number2 App_AdvTimerInit 的分析
  14.     Sysctrl_SetPeripheralGate(SysctrlPeripheralAdvTim, TRUE);    //ADT外设时钟使能
  15.    
  16.     stcAdtBaseCntCfg.enCntMode = AdtSawtoothMode;                 //锯齿波模式
  17.     stcAdtBaseCntCfg.enCntDir = AdtCntUp;                                                        //向上计数
  18.     stcAdtBaseCntCfg.enCntClkDiv = AdtClkPClk0;                                          //CLK的零分配
  19.    
  20.     Adt_Init(M0P_ADTIM4, &stcAdtBaseCntCfg);                      //ADT载波、计数模式、时钟配置
  21.    
  22.     Adt_SetPeriod(M0P_ADTIM4, u16Period);                         //周期设置
  23.    
  24.     enAdtCompareA = AdtCompareA;
  25.     Adt_SetCompareValue(M0P_ADTIM4, enAdtCompareA, u16CHA_PWMDuty);  //通用比较基准值寄存器A设置
  26.    
  27.     enAdtCompareB = AdtCompareB;
  28.     Adt_SetCompareValue(M0P_ADTIM4, enAdtCompareB, u16CHB_PWMDuty);  //通用比较基准值寄存器B设置
  29.    
  30.     stcAdtTIM4ACfg.enCap = AdtCHxCompareOutput;            //比较输出
  31.     stcAdtTIM4ACfg.bOutEn = TRUE;                          //CHA输出使能
  32.     stcAdtTIM4ACfg.enPerc = AdtCHxPeriodLow;               //计数值与周期匹配时CHA电平保持不变
  33.     stcAdtTIM4ACfg.enCmpc = AdtCHxCompareHigh;             //计数值与比较值A匹配时,CHA电平翻转
  34.     stcAdtTIM4ACfg.enStaStp = AdtCHxStateSelSS;            //CHA起始结束电平由STACA与STPCA控制
  35.     stcAdtTIM4ACfg.enStaOut = AdtCHxPortOutLow;            //CHA起始电平为低
  36.     stcAdtTIM4ACfg.enStpOut = AdtCHxPortOutLow;            //CHA结束电平为低
  37.     Adt_CHxXPortCfg(M0P_ADTIM4, AdtCHxA, &stcAdtTIM4ACfg);   //端口CHA配置
  38.    
  39.     stcAdtTIM4BCfg.enCap = AdtCHxCompareOutput;
  40.     stcAdtTIM4BCfg.bOutEn = TRUE;
  41.     stcAdtTIM4BCfg.enPerc = AdtCHxPeriodInv;
  42.     stcAdtTIM4BCfg.enCmpc = AdtCHxCompareInv;
  43.     stcAdtTIM4BCfg.enStaStp = AdtCHxStateSelSS;
  44.     stcAdtTIM4BCfg.enStaOut = AdtCHxPortOutLow;
  45.     stcAdtTIM4BCfg.enStpOut = AdtCHxPortOutLow;
  46.     Adt_CHxXPortCfg(M0P_ADTIM4, AdtCHxB, &stcAdtTIM4BCfg);    //端口CHB配置
  47. //number3 ///< AdvTimer端口初始化
  48. void App_AdvTimerPortInit(void)
  49. {
  50.     stc_gpio_cfg_t         stcTIM4Port;
  51.    
  52.     DDL_ZERO_STRUCT(stcTIM4Port);
  53.    
  54.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //端口外设时钟使能
  55.    
  56.     stcTIM4Port.enDir  = GpioDirOut;//配置成输出
  57.        
  58.     //PA08设置为TIM4_CHA
  59.     Gpio_Init(GpioPortA, GpioPin8, &stcTIM4Port);
  60.     Gpio_SetAfMode(GpioPortA,GpioPin8,GpioAf6);
  61.    
  62.     //PA11设置为TIM4_CHB
  63.     Gpio_Init(GpioPortA, GpioPin11, &stcTIM4Port);
  64.     Gpio_SetAfMode(GpioPortA,GpioPin11,GpioAf7);
  65. }


lajfda001 发表于 2023-6-26 11:02 | 显示全部楼层
这个代码写的还是很规整的。不错的。
勇者无惧你和我 发表于 2023-6-26 11:12 | 显示全部楼层
感谢楼主的分享,很棒
lix1yr 发表于 2023-10-18 11:15 | 显示全部楼层
话说,这方面的程序是不是例程里也有啊?
g0d5xs 发表于 2023-10-18 12:07 | 显示全部楼层
挺好的啊,定时器一般程序里都会有的,都需要用到
zhizia4f 发表于 2023-10-18 13:12 | 显示全部楼层
你这个很不错,确实很有用,不过这Adt_StartCount是干啥的啊?
q1ngt12 发表于 2023-10-18 15:07 | 显示全部楼层
高级定时器这块我还真没弄太明白
w2nme1ai7 发表于 2023-10-18 18:23 | 显示全部楼层
一般是不是都用普通定时器计数啥的就可以了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

687

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部