中科蓝讯AB536X系列芯片PWM使用说明

本文档详细介绍了中科蓝讯AB536X系列芯片中Timer3、Timer4和Timer5的PWM输出功能。每组定时器支持3路PWM输出,可独立设置占空比。PWM IO的映射通过FUNCMCON2寄存器进行配置。文中提供了查阅芯片datasheet和UserManual的提示,并给出了一个基于timer4的初始化和呼吸灯效果的例程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AB536X 支持 3 个定时器(Timer3,Timer4,Timer5,)PWM 输出,每个定时器支持 3 路 PWM 输出 ,分别是 PWM0 ,PWM1,PWM2,其中每个定时器支持 3 路周期相同,可设置不同占空比的 PWM 同时输出。
AB536X 每组 timer定时器 对应 PWM IO 说明:
Timer3:

G1: PWM0->PB0  PWM1->PB1  PWM2->PB2
G2: PWM0->PB3  PWM1->PB4  PWM2->PB5
G3: PWM0->PF2  PWM1->PA3  PWM2->PA4
G4: PWM0->PE0

Timer4:

G1: PWM0->PE5  PWM1->PE6  PWM2->PE7
G2:  		    PWM1->PF1  PWM2->PF1

Timer5:

G1: PWM0->PA5  PWM1->PA6  PWM2->PA7

FUNCMCON2 对应 PWM 的映射:
timer3->8Bit timer4->12Bit timer5->16Bit
G1->1 G2->2 …
例如:
Timer3 的 G1 组:
FUNCMCON2 = (1<<8);
Timer3 的 G3 组:
FUNCMCON2 = (3<<8);
Timer4 的 G1 组:
FUNCMCON2 = (1<<12);

备注:
查询 AB536X 每组 timer 对应 PWM IO需要查阅芯片datasheet,以上数据查找自《AB5362B DataSheet》
查找FUNCMCON2 寄存器功能《AB536X UserManual》
使用出现问题请复查以上提及的文档。

SDK 默认定时器用途:
timer0 : 系统时钟使用
timer1: (可选) ledseg_ajust. 7 脚屏的时候使用 timer1_irq_init
timer3: (可选) 软件红外解码使用

但6x系列芯片的定时器没有被占用,可以放心使用

例程:下面以 timer4 为例
初始化:

#define PWM_MAX                     4001    
void pwm_init(void)
{
    //PWM2-T4-G1 PE7
    //PWM1-T4-G1 PE6
    //PWM0-T4-G1 PE5

    GPIOEDIR &= ~(BIT(7)|BIT(6)|BIT(5)) ; //DIR OUT
	GPIOEDE |= (BIT(7)|BIT(6)|BIT(5)) ; //数字 IO 口要设置上.
	GPIOEFEN |= (BIT(7)|BIT(6)|BIT(5)); //function io enable

	FUNCMCON2 = (1 << 12); // TIMER4的G1   pwm map to G1 (PE5/6/7)timer5->16Bit timer4->12Bit timer3->8Bit
	TMR4CON = 0x00; //时钟源默认为系统时钟 24M
	TMR4CNT = 0;
	TMR4PR = PWM_MAX + 1; //例如为 24M 时, 频率为 24M/(12000*4) = 500HZ, 即周期为0.002S. //U32
	TMR4DUTY0 = 0 ; //u16 //25% 负占空比 PE1 //注意 PR >= DUTY //DUTY ==PR, 全高. -1 (也就是 0xFFFF)时, 全低, 其他值表示"负占空比"
	TMR4DUTY1 = 0;  //u16 //50% 负占空比 PB3
    TMR4DUTY2 = 0;  //

	TMR4CON |=(BIT(9) | BIT(10) | BIT(11)); //timer4 pwm0, pwm1, pwm2 enable
	TMR4CON |= BIT(0); //Timer enable (defualt work in counter mode)
}

扫描:
呼吸灯扫描放5ms中断,用作频谱灯需要放1ms中断,例程是简单的呼吸灯效果。主要是调整占空比 duty = TMR4DUTY0 /TMR4PR ;

AT(.com_text.rgb)
void rgb_breath_scan(void){ // 5ms  放5ms中断
    static u16 cnt = 0;
    static u8 dir = 0;

    if(dir==0){
        if(cnt<PWM_MAX){
            cnt+=7;
        }else{
            dir =1;
        }
    }else if(dir==1){
          if(cnt>7){
            cnt-=7;
        }else{
            dir =0;
        }
    }
	TMR4DUTY0 = cnt ; 
	TMR4DUTY1 = cnt; 
     TMR4DUTY2 = cnt; 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值