查看: 2839|回复: 0

[经验] 野火i.MX RT1052 MINI试用---应用定时器点灯

[复制链接]
  • TA的每日心情
    慵懒
    2020-5-29 14:13
  • 签到天数: 79 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2018-6-3 01:11:24 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wangdbff 于 2018-6-3 14:54 编辑

            作为一款单片机,该芯片也拥有丰富的外设可以使用。这里使用QuadTimer 来再次点灯。作为PWM输出和普通定时器中断两种操作。该芯片有4路Qtimer,可上下计数,可级联,这种场景下任意选用均可。
            外设库需要增加fsl_qtmr.c,新建文件bsp_qtimer.c。在文件内进行基本配置,如下图,有注释
             b.png

             定时时间到在中断服务函数里点灯,如下
              a.png
             板载RGB蓝色会已1Hz频率点亮。定时时间=cmp1/QTMR1_CLK,使用IPG_CLK_ROOT时钟源。
              TIM图片20180603005652.gif
             简单的定时中断之后,再来感受下呼吸灯。任意定时器比如Qtimer4通道3。首先要初始化

    1. void QTMR4_CH3_PWM_Init(uint8_t prisrc,uint32_t clk, uint8_t duty)
    2. {
    3.     uint8_t fredivi=1;
    4.    
    5.     qtmr_primary_count_source_t qtimer_source;
    6.     qtimer_source=(qtmr_primary_count_source_t)prisrc;
    7.    
    8.         //配置GPIO_B1_11为QTIMER3_TIMER1的输出引脚
    9.         IOMUXC_SetPinMux(IOMUXC_GPIO_B1_11_QTIMER4_TIMER3,0);        
    10.         
    11.         //配置IO引脚GPIO_AD_B1_11的功能
    12.         //低转换速度,驱动能力为R0/6,速度为100Mhz,关闭开路功能,使能pull/keepr
    13.         //选择keeper功能,下拉100K Ohm,关闭Hyst
    14.         IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_11_QTIMER4_TIMER3,0x10B0);
    15.    
    16.     fredivi=Calcu_2invo(prisrc-8);
    17.     //初始化QTIMER4
    18.     QTMR_GetDefaultConfig(&qtimer4pwm_config);
    19.                 //设置第一时钟源        
    20.     qtimer4pwm_config.primarySource=qtimer_source;  
    21.                 //初始化TIM4通道3        
    22.     QTMR_Init(TMR4,kQTMR_Channel_3,&qtimer4pwm_config);         
    23.     QTMR_SetupPwm(TMR4,kQTMR_Channel_3,clk,duty,false,CLOCK_GetFreq(kCLOCK_IpgClk)/fredivi);
    24.                 //上升沿计数
    25.     QTMR_StartTimer(TMR4,kQTMR_Channel_3,kQTMR_PriSrcRiseEdge);
    26. }
    复制代码
                占空比设置函数如下
    1. void QTMER4CH3_PWM_DutySet(uint8_t prisrc,uint32_t clk, uint8_t duty){
    2.     uint8_t fredivi=1;
    3.     uint32_t srcclk,period,hightime,lowtime;
    4.    
    5.     fredivi=Calcu_2invo(prisrc-8);
    6.     srcclk=CLOCK_GetFreq(kCLOCK_IpgClk)/fredivi;
    7.    
    8.     period=(srcclk/clk);               
    9.     hightime=(period*duty)/100;         
    10.     lowtime=period-hightime;            
    11.    
    12.     TMR4->CHANNEL[kQTMR_Channel_3].CMPLD1=lowtime;
    13.     TMR4->CHANNEL[kQTMR_Channel_3].CMPLD2=hightime;
    14. }
    复制代码
               之后主函数中首先初始化PWM,然后将占空比改为变量,循环增减以实现呼吸灯效果。
                 TIM图片20180603005646.gif 1FIVP[D5T`G68YWNX{W][@V.png
                使用的IO在CN3,LED对应的引脚在CN4,所以使用杜邦线将PWM信号接到LED引脚,为了避免RGB影响PWM,初始化设置时改为高电平熄灭状态。

    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 18:56 , Processed in 0.124407 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.