查看: 5027|回复: 16

[求助] MKE02Z64VQH2(LQFP-64) PTB4脚不能输出低电平,为什么?

[复制链接]

该用户从未签到

12

主题

59

帖子

0

注册会员

Rank: 2

积分
123
最后登录
1970-1-1
发表于 2016-4-2 19:52:51 | 显示全部楼层 |阅读模式
本帖最后由 Henryyam 于 2016-4-3 11:24 编辑

无论用 GPIO_PinClear(GPIO_PTB4); GPIO_PinToggle(GPIO_PTB4);
都无反应。

初始化用
GPIO_PinInit(GPIO_PTB4, GPIO_PinOutput_HighCurrent);
GPIO_PinInit(GPIO_PTB4, GPIO_PinOutput);
都试了,结果一样,没有反应。

请指教!


我知道答案 目前已有16人回答
回复

使用道具 举报

该用户从未签到

12

主题

59

帖子

0

注册会员

Rank: 2

积分
123
最后登录
1970-1-1
 楼主| 发表于 2016-4-2 22:18:27 | 显示全部楼层
检查发现,PTB4与PTB5在排阻处短路了

尽管已经焊开,但是仍然PTB4不能拉低。是不是芯片已经坏掉了?

明天换个芯片试试。
回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

59

帖子

0

注册会员

Rank: 2

积分
123
最后登录
1970-1-1
 楼主| 发表于 2016-4-3 10:38:56 | 显示全部楼层
看手册上说,PTB4脚上电后默认是NMI。

不知道如何更改为GPIO?

回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

59

帖子

0

注册会员

Rank: 2

积分
123
最后登录
1970-1-1
 楼主| 发表于 2016-4-3 11:23:16 | 显示全部楼层
初始化时,SIM->SOPT = 0x0000000c; 这样子直接写寄存器禁止NMI,PTB4仍然不能输出低电平,为何?
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24883
最后登录
2025-7-20
发表于 2016-4-5 11:05:22 | 显示全部楼层
楼主你好!
PTB4是NMI输入引脚,如果你要配置为GPIO,你需要禁止NMI功能。
不过,如果你引脚够的话,我不建议你使用该引脚作为GPIO,因为上电改引脚会默认NMI功能。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24883
最后登录
2025-7-20
发表于 2016-4-5 11:07:30 | 显示全部楼层
Henryyam 发表于 2016-4-3 11:23
初始化时,SIM->SOPT = 0x0000000c; 这样子直接写寄存器禁止NMI,PTB4仍然不能输出低电平,为何?
...

SIM_SOPT[NMIE]该位是复位后write-Once位,你可以debug看看,你的这个位是否设置成功了?
回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

59

帖子

0

注册会员

Rank: 2

积分
123
最后登录
1970-1-1
 楼主| 发表于 2016-4-5 15:39:05 | 显示全部楼层
小恩GG 发表于 2016-4-5 11:07
SIM_SOPT[NMIE]该位是复位后write-Once位,你可以debug看看,你的这个位是否设置成功了? ...

谢谢回复。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24883
最后登录
2025-7-20
发表于 2016-4-5 17:25:35 | 显示全部楼层

不客气,后续有问题,欢迎继续发帖交流。
回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

59

帖子

0

注册会员

Rank: 2

积分
123
最后登录
1970-1-1
 楼主| 发表于 2016-4-6 22:09:26 | 显示全部楼层
后来,我把 SIM->SOPT = 0x0000000c; //Disable NMI 加到 sysinit函数内,就OK了!

void sysinit (void)
{
    SIM_ConfigType  sSIMConfig = {{0},0};
    ICS_ConfigType  sICSConfig = {0};
   
    /* initialize the Pass/Fail counts to 0 */
    global_pass_count = 0;
    global_fail_count = 0;
     
   
    /* if not trimmed, do trim first */
    ICS_Trim(ICS_TRIM_VALUE);
   
    SIM->SOPT = 0x0000000c; //Disable NMI
  
    /*
     * Enable SWD pin, RESET pin
     */
    /*
     * NOTE: please make sure other register bits are also write-once and
     * need add other bit mask here if needed.
     */
#if defined(SPI0_PINREMAP)        
    sSIMConfig.u32PinSel |= SIM_PINSEL_SPI0PS_MASK;
#endif

#if defined(OUTPUT_BUSCLK)
    sSIMConfig.sBits.bEnableCLKOUT = 1;      /* output bus clock if enabled */
#endif
   
    #if defined(CPU_KE02)
    /* make sure clocks to peripheral modules are enabled */
    sSIMConfig.u32SCGC |= SIM_SCGC_SWD_MASK | SIM_SCGC_FLASH_MASK |
                         SIM_SCGC_UART0_MASK | SIM_SCGC_UART1_MASK |
                         SIM_SCGC_UART2_MASK
                         ;
    #else
    sSIMConfig.u32SCGC |= SIM_SCGC_SWD_MASK | SIM_SCGC_FLASH_MASK |
                         SIM_SCGC_UART0_MASK
                         ;
    #endif
    SIM_Init(&sSIMConfig);                   /* initialize SIM */
        
#if defined(XOSC_STOP_ENABLE)   
    sICSConfig.oscConfig.bStopEnable = 1;    /*  enabled in stop mode */   
#endif         
   
#if defined(CRYST_HIGH_GAIN)   
    sICSConfig.oscConfig.bGain = 1;           /* high gain */      
#endif

   
#if  (EXT_CLK_FREQ_KHZ >= 4000)
    sICSConfig.oscConfig.bRange = 1;           /* high range */
#endif
       
    sICSConfig.oscConfig.bEnable = 1;          /* enable OSC */
    sICSConfig.u32ClkFreq = EXT_CLK_FREQ_KHZ;
   
#if     defined(USE_FEE)   
    sICSConfig.u8ClkMode = ICS_CLK_MODE_FEE;   
#elif        defined(USE_FBE_OSC)
    sICSConfig.u8ClkMode = ICS_CLK_MODE_FBE_OSC;   
#elif        defined(USE_FEE_OSC)   
    sICSConfig.u8ClkMode = ICS_CLK_MODE_FEE_OSC;      
#endif      

    ICS_Init(&sICSConfig);   /* initialize ICS */

    /* initialize UART for printing */
    UART_InitPrint();                        

#if        defined(PRINT_SYS_LOG)
    print_sys_log();
#endif
   
#if        defined(SEE_DEFAULT_TRIM_VALUE)  
    printf("default trim value = %#4.4x\n",gwTrimValue);
#endif   
}
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24883
最后登录
2025-7-20
发表于 2016-4-7 09:11:45 | 显示全部楼层
Henryyam 发表于 2016-4-6 22:09
后来,我把 SIM->SOPT = 0x0000000c; //Disable NMI 加到 sysinit函数内,就OK了!

void sysinit (void)

所以说,之前不行,还是因为系统初始化的代码中,有关于SOPT寄存器的配置,导致该寄存器被写过,写过之后,后面再写就无效了。
楼主其实可以对照参考手册,仿真检查寄存器,很容易排查出来的。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-21 01:56 , Processed in 0.102570 second(s), 30 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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