[技术问答] 关于定时器的问题请教

[复制链接]
2181|7
 楼主| shenxiaolin 发表于 2019-11-14 11:14 | 显示全部楼层 |阅读模式
最近在使用华大的130系列单片机,有一个关于定时器的问题想要请教;官方给的代码是这样的,
  1. int32_t main(void)
  2. {
  3.     uint16_t                    u16ArrValue;
  4.     uint16_t                    u16CntValue;
  5.     stc_tim3_mode0_config_t     stcTim3BaseCfg;
  6.     stc_gpio_config_t           stcLEDPortCfg;
  7.    
  8.     DDL_ZERO_STRUCT(stcTim3BaseCfg);
  9.     DDL_ZERO_STRUCT(stcLEDPortCfg);
  10.    
  11.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //GPIO 外设时钟使能
  12.     Sysctrl_SetPeripheralGate(SysctrlPeripheralTim3, TRUE); //Base Timer外设时钟使能
  13.    
  14.     //PD05设置为LED 控制引脚
  15.     //Gpio_ClrAnalogMode(GpioPortD, GpioPin5);
  16.     stcLEDPortCfg.enDir  = GpioDirOut;
  17.     Gpio_Init(GpioPortD, GpioPin5, &stcLEDPortCfg);
  18.    
  19.     stcTim3BaseCfg.enWorkMode = Tim3WorkMode0;              //定时器模式
  20.     stcTim3BaseCfg.enCT       = Tim3Timer;                  //定时器功能,计数时钟为内部PCLK
  21.     stcTim3BaseCfg.enPRS      = Tim3PCLKDiv64;              //PCLK/64
  22.     stcTim3BaseCfg.enCntMode  = Tim316bitArrMode;           //自动重载16位计数器/定时器
  23.     stcTim3BaseCfg.bEnTog     = FALSE;
  24.     stcTim3BaseCfg.bEnGate    = FALSE;
  25.     stcTim3BaseCfg.enGateP    = Tim3GatePositive;
  26.    
  27.     stcTim3BaseCfg.pfnTim3Cb  = Tim3Int;                    //中断函数入口
  28.    
  29.     Tim3_Mode0_Init(&stcTim3BaseCfg);                       //TIM3 的模式0功能初始化
  30.    
  31.     Tim3_ClearIntFlag(Tim3UevIrq);                          //清中断标志
  32.    
  33.     EnableNvic(TIM3_IRQn, IrqLevel3, TRUE);                 //TIM3 开中断
  34.    
  35.     Tim3_Mode0_EnableIrq();                                 //使能TIM3中断(模式0时只有一个中断)
  36.    
  37.     u16ArrValue = 0xA000;
  38.    
  39.     Tim3_M0_ARRSet(u16ArrValue);                            //设置重载值
  40.    
  41.     u16CntValue = 0xA000;
  42.    
  43.     Tim3_M0_Cnt16Set(u16CntValue);                          //设置计数初值
  44.    
  45.     Tim3_M0_Run();                                          //TIM3 运行。
  46.    
  47.     while (1);
  48. }
我想请问,这个计数值和重载值分别代表说明含义,如果我想设置定时器为1ms的中断应该如歌设置呢?现在单片机的时钟为4M。
2355898179@q 发表于 2019-11-14 15:02 | 显示全部楼层
华大一级代理&技术支持  Q765812964
中子家 发表于 2019-11-14 15:45 | 显示全部楼层
计数值就是计数器数多少次产生一次中断,重载值是用于连续计数的,使用重载的方式可以不需要每次产生中断后去写计数值。每款MCU的手册都都会详细描写这一部分,你仔细看看用户手册吧
martinhu 发表于 2019-11-14 21:10 | 显示全部楼层
这个是通用定时器的模式0,在模式0里面,当定时器启动的时候,会从计数初值向上计数,一直到16bit 计数器溢出,然后计时器重载ARR的值,再次向上计数
buffered 发表于 2019-11-17 18:30 | 显示全部楼层
很多芯片的定时器配置都是类似的,再详细看一下手册吧
wiba 发表于 2019-12-4 10:09 | 显示全部楼层
可以自己换数试试看 就知道了
zljiu 发表于 2019-12-4 10:25 | 显示全部楼层
看不出来什么问题啊
coshi 发表于 2019-12-4 10:52 | 显示全部楼层
我也没注意过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:运达电气-产品经理
简介:毕业于西南科技大学,从事MCU、MPU开发工作近8年,熟悉嵌入式软硬件开发流程,产品管理以及现场项目管理。

94

主题

1363

帖子

7

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