查看: 2548|回复: 1

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

[复制链接]
  • TA的每日心情
    开心
    2024-8-5 17:13
  • 签到天数: 333 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2023-7-24 17:28:10 | 显示全部楼层 |阅读模式
    分享到:
    今天抽空测试了一下定时器,看定时器的时候我们先来看看mm32的时钟树
    1 时钟树.png
    可以通过数据手册看到,TIM1的最大时钟是60M,在硬件处理上芯片没有设计外部时钟,所以可以判定芯片使用的是内部时钟,我们这里就不做修改了。
    在说定时器程序的时候,我们来看看点灯的电路设计。
    2-灯.png
    这里的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)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-17 11:18
  • 签到天数: 491 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2023-7-28 09:30:43 | 显示全部楼层
    4.7K的话,灯亮度估计不会很刺眼,可能是这么考虑的吧
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 08:58 , Processed in 0.136052 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.