这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » GD32 » GD32105R_START初体验之定时器测试

共2条 1/1 1 跳转至

GD32105R_START初体验之定时器测试

高工
2015-03-28 23:49:40     打赏

    之前对GD32105R的串口进行了测试体验,感觉很满意,为了达到移植FreeModbus的目的还需要定时器的配合(判断一帧数据是否传输结束),那么今天就对GD32的定时器1进行简单的测试体验一把。

    定时器,顾名思义就是起定时提醒的作用,他在我们的生活中起到举足轻重的作用,不知道诸君是否需要定闹钟,楼主这种屌丝每天早上是要定两三个闹钟的,否则无疑会起床失败进而导致上班迟到,楼主是多么羡慕那些上班不用打卡的人们啊!惭愧。。。

    还是按照STM32习惯,对GD32的定时器1进行初始化配置,首先是定时周期的设定,为了便于观察LED的变化状态,楼主设定GD32的定时周期为500ms,即每500ms进一次定时中断,在中断中翻转一次LED的指示状态,具体配置如下:


/*************************************************************************************
** 函数名称 :void Timer1Init(void)
** 函数功能 :定时器1初始化函数,   500ms定时
**串口:起始位1 数据位8 无校验位 停止位1
**波特率:9600  3.5个字符时间为3.65ms
**波特率:115200  3.5个字符时间为0.304ms
测试定时器,暂时修改定时周期为500ms。
***************************************************************************************/
void Timer1Init(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //打开定时器时钟 
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;   
  //定时器1 设置 72分频  1MHz 向上计数   定时0.1ms
  TIM_TimeBaseStructure.TIM_Period =9999 ;   //16位的值,最大65536
  TIM_TimeBaseStructure.TIM_Prescaler =3599;    //3600分频 即为20KHz,16位的值,最大65536
  TIM_TimeBaseStructure.TIM_ClockDivision =0x00;  //TIM_CKD_DIV1;//0; //时钟分频系数,不分频
  TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_RepetitionCounter= 0; //周期计数器的值
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);     //初始化定时器
  TIM_ClearFlag(TIM1,TIM_FLAG_Update);
  TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);            //开定时器中断 
  TIM_Cmd(TIM1, ENABLE); //使能定时器1
}
 /* 使能TIM1中断 */
  NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_TIM16_IRQn; //TIM1_UP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);
/*********************************************************************************************************
** 函数名称 :void Timer1_Exception(void)
** 函数功能 :定时器1中断服务函数,用来检测串行通讯中接收完1帧数据是否结束 
**测试用例,中断中闪烁LED
*********************************************************************************************************/
void Timer1_Exception(void)
{				 
  TIM_ClearITPendingBit(TIM1,TIM_FLAG_Update);//请中断
  static unsigned char i=0;
  if(i==1)
  {
     GPIO_SetBits(GPIOC,GPIO_Pin_6); /* 点亮LED */
     i=0;
  }
  else
  {
     GPIO_ResetBits(GPIOC,GPIO_Pin_6); /* 熄灭LED */
     i=1;
  }
} 
调试截图:

实物连接图:

经过简单的测试,一切运行正常,为移植FreeModbus彻底扫清了障碍,下一步就要进行移植测试了。。。





关键词: GD32     Timer     FreeModbus    

院士
2015-03-30 19:57:09     打赏
2楼
使用TIM1 做为普通定时器来使用,好奢侈的事情啊

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]