找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1521|回复: 0
打印 上一主题 下一主题
收起左侧

请问一下,为什么我开启PWM1H、L和PWM2H、L,然后PWM3不能当普通IO使用...

[复制链接]
跳转到指定楼层
楼主
ID:272080 发表于 2019-12-12 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10黑币
我用的单片机是PIC33EP64GS502,然后我PWM1 和PWM2 也就是我的RA3、RA4、RB13、RB14都复用成PWM功能了,但是我PWM3的端口,也就是RB12、11我接的是按键,不开启PWM的时候,按键可以正常,开启PWM以后,按键就失效了,一直被拉低,请问这是PIC单片机的通性吗,还是说我配置的不对?附上我的代码
  • PWM函数
[code]//互补PWM初始化,
void PWM_driver_init( void )
{
    //PWM1 INIT
    //解锁FCLCON 和 IOCON寄存器
    asm volatile ("mov #0xabcd,w10");
    asm volatile ("mov #0x4321,w11");
    asm volatile ("mov #0x0003,w0");//禁止故障输入
    asm volatile ("mov w10, PWMKEY");
    asm volatile ("mov w11, PWMKEY");
    asm volatile ("mov w0,FCLCON1");
    asm volatile ("mov #0xabcd,w10");
    asm volatile ("mov #0x4321,w11");
    asm volatile ("mov #0xC000,w0");//互补模式,pwm模块控制pwm
    asm volatile ("mov w10, PWMKEY");
    asm volatile ("mov w11, PWMKEY");
    asm volatile ("mov w0,IOCON1");
    ACLKCONbits.FRCSEL = 1; /* FRC is input to Auxiliary PLL */
    ACLKCONbits.SELACLK = 1; /* Auxiliary Oscillator provides the clock source*/
    ACLKCONbits.APSTSCLR = 7; /* Divide Auxiliary clock by 1 */
    ACLKCONbits.ENAPLL = 1; /* Enable Auxiliary PLL */
    while(ACLKCONbits.APLLCK != 1); /* Wait for Auxiliary PLL to Lock */
    PTPER = 3205;   //周期         
    DTR1    = 50;   //死区
    ALTDTR1 = 50;   //死区
   
    TRGCON1bits.TRGDIV  = 2;        // Trigger interrupt generated every 2 PWM cycles
    TRGCON1bits.TRGSTRT = 0;        // Trigger generated after waiting 0 PWM cycles
   
    LEBCON1bits.PHR      = 1;

    PDC1 = 1500;   //占空比
    TRIG1 = 1300;                     // Set Initial Trigger location
   
    //PWM2 INIT
    //解锁FCLCON 和 IOCON寄存器
    asm volatile ("mov #0xabcd,w10");
    asm volatile ("mov #0x4321,w11");
    asm volatile ("mov #0x0003,w0");//禁止故障输入
    asm volatile ("mov w10, PWMKEY");
    asm volatile ("mov w11, PWMKEY");
    asm volatile ("mov w0,FCLCON2");
    asm volatile ("mov #0xabcd,w10");
    asm volatile ("mov #0x4321,w11");
    asm volatile ("mov #0xC000,w0");//互补模式,pwm模块控制pwm
    asm volatile ("mov w10, PWMKEY");
    asm volatile ("mov w11, PWMKEY");
    asm volatile ("mov w0,IOCON2");
    DTR2    = 70;   //死区
    ALTDTR2 = 40;   //死区
   
    TRGCON2bits.TRGDIV = 2;
    TRGCON2bits.TRGSTRT = 0;
   
    LEBCON2bits.PHR      = 1;
   
    PDC2 = 410;   //占空比
    TRIG2 = 0;                     // Set Initial Trigger location
   
    PTCONbits.PTEN = 1;

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表