1回答

0收藏

[评测分享] 【灵动Motor-DK电机控制板】-03-定时器测试

#板卡评测 #板卡评测 3482 人阅读 | 1 人回复 | 2023-07-24

今天抽空测试了一下定时器,看定时器的时候我们先来看看mm32的时钟树

可以通过数据手册看到,TIM1的最大时钟是60M,在硬件处理上芯片没有设计外部时钟,所以可以判定芯片使用的是内部时钟,我们这里就不做修改了。
在说定时器程序的时候,我们来看看点灯的电路设计。

这里的4.7K的电阻着实没有看清楚是啥用意……拍视屏的时候就比较恼火,这个灯到底是亮了呢还是没亮,从考虑到节能的方向么?

然后我们开始今天的代码分享吧,主函数是这个开始,主函数很简单。
  1. #include "Delay.h"
  2. #include "DRV_TIM.h"
  3. int main(void)
  4. {
  5.         InitDelay();
  6.         LED_Init();
  7.     TIM1_Init( );
  8.         while(1)
  9.         {
  10.                
  11.         }
  12. }

复制代码
然后就是定时器的代码了,我们设定为1ms 中断一次,1s改变一次灯的状态

  1. #include "DRV_TIM.h"

  2. unsigned TimeCount=0;
  3. void TIM1_Init(void)
  4. {
  5.     NVIC_InitTypeDef        NVIC_InitStruct;
  6.     RCC_ClocksTypeDef       RCC_Clocks;
  7.     TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

  8.     RCC_GetClocksFreq(&RCC_Clocks);//--获取当前时钟--

  9.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM1, ENABLE);

  10.     TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);
  11.     TIM_TimeBaseInitStruct.TIM_Prescaler         = (60);//--设置分频--
  12.     TIM_TimeBaseInitStruct.TIM_CounterMode       = TIM_CounterMode_Up;
  13.     TIM_TimeBaseInitStruct.TIM_Period            = (1000 - 1);
  14.     TIM_TimeBaseInitStruct.TIM_ClockDivision     = TIM_CKD_Div1;
  15.     TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
  16.     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);

  17.     TIM_ClearFlag(TIM1, TIM_FLAG_Update);
  18.     TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);

  19.     NVIC_InitStruct.NVIC_IRQChannel = TIM1_BRK_UP_TRG_COM_IRQn;
  20.     NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01;
  21.     NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  22.     NVIC_Init(&NVIC_InitStruct);

  23.     TIM_Cmd(TIM1, ENABLE);
  24. }


  25. void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
  26. {
  27.     if (SET == TIM_GetITStatus(TIM1, TIM_IT_Update))
  28.     {
  29.                
  30.                 TimeCount++;
  31.                 if(TimeCount==1000)
  32.                 {
  33.                         TimeCount=0;
  34.                     GPIO_IO_Toggle(GPIOB,GPIO_Pin_9);
  35.                 }
  36.         TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
  37.     }
  38. }

复制代码




然后,视频就不发了,因为闪灯结果都一样,大家可以下载代码试试看。
代码如下:
MM32SPIN 0230_Demo.rar (373.4 KB, 下载次数: 0)




分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

yangjiaxu

发表于 2023-7-28 09:30:43 | 只看该作者

4.7K的话,灯亮度估计不会很刺眼,可能是这么考虑的吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条