查看: 4430|回复: 8

[已解决] 关于KE02怎么读I/O口的输入问题

[复制链接]

该用户从未签到

6

主题

19

帖子

0

注册会员

Rank: 2

积分
86
最后登录
2018-3-26
发表于 2016-10-27 20:39:45 | 显示全部楼层 |阅读模式
KE02官方提供的读I/O口的函数只有GPIO_Read(GPIOx)这个函数,就是说一次只能读GPIOA或者GPIOB这两个寄存器里所有I/O口的值,而GPIOA包含了
PTA0-PTA7,PTB0-PTB7,PTC0-PTC7,PTD0-PTD7这32个I/O口,现在我要读PTC2这个口的值,配置如下:
                                          uint32_t pinstate,  a;
                                          GPIO_Init(GPIOA, GPIO_PTC2_MASK, GPIO_PinInput);
                                          pinstate=GPIO_Read(GPIOA);
                                          a=pinstate&&0x00040000;
但是这样读不出来,这是为什么?


最佳答案

liqing666 发表于 2016-10-29 17:35 谢谢,已经解决了,是我语句没写好,逻辑与和按位与傻傻分不清 好的,后续如果还有问题,欢迎继续发帖交流。 其实出问题的时候,仔细按照官方的代码对比下,并且结合寄存器查看下 ...
回复

使用道具 举报

  • TA的每日心情
    开心
    2017-11-15 10:33
  • 签到天数: 79 天

    连续签到: 1 天

    [LV.6]常住居民II

    89

    主题

    2169

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1779
    最后登录
    2020-8-22
    发表于 2016-10-27 21:16:36 | 显示全部楼层
    试下以前论坛里大神写的库

    KE02和KE8.zip

    17.99 MB, 下载次数: 896, 下载积分: 威望 1

    签到
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-10-28 09:32:17 | 显示全部楼层
    楼主你好!
    你的GPIOx_PIDR这个寄存器对应的位有没有配置为0,这个是引脚配置为输入位。
    否则读出的都是0.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    19

    帖子

    0

    注册会员

    Rank: 2

    积分
    86
    最后登录
    2018-3-26
     楼主| 发表于 2016-10-28 15:10:01 | 显示全部楼层
    本帖最后由 liqing666 于 2016-10-28 15:11 编辑
    小恩GG 发表于 2016-10-28 09:32
    楼主你好!
    你的GPIOx_PIDR这个寄存器对应的位有没有配置为0,这个是引脚配置为输入位。
    否则读出的都是0. ...

    void GPIO_Init(GPIO_Type *pGPIO, uint32_t u32PinMask, GPIO_PinConfigType sGpioType)
    {
        /* Sanity check */
    #if defined(CPU_KE02)
         ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB));
    #endif
    #if defined(CPU_KE04)
        ASSERT(pGPIO == GPIOA);
    #endif
    #if defined(CPU_KE06)
          ASSERT((pGPIO == GPIOA) || (pGPIO == GPIOB) || (pGPIO == GPIOC));
    #endif
       
        /* Config GPIO for Input or Output */
        if ((sGpioType == GPIO_PinOutput) || (sGpioType == GPIO_PinOutput_HighCurrent))
        {
            pGPIO->DDR |= u32PinMask;      /* Enable Port Data Direction Register */
            pGPIO->IDR |= u32PinMask;      /* Set Port Input Disable Register */   
        }
        else if ((sGpioType == GPIO_PinInput) || (sGpioType == GPIO_PinInput_InternalPullup))
        {
            pGPIO->DDR &= ~u32PinMask;   /* Disable Port Data Direction Register */
            pGPIO->IDR &= ~u32PinMask;   /* Clear Port Input Disable Register */
        }
        /* Config PORT Pull select for GPIO */
    #if defined(CPU_KE02)
        switch((uint32_t)pGPIO)
        {
            case GPIOA_BASE:
                (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->UEL |= u32PinMask)PORT->UEL &= ~u32PinMask);
                break;
            case GPIOB_BASE:
                (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->UEH |= u32PinMask)PORT->UEH &= ~u32PinMask);
                break;
            default:
                break;
         }
    #endif
       
    #if defined(CPU_KE04)
        switch((uint32_t)pGPIO)
        {
            case GPIOA_BASE:
                (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->UEL |= u32PinMask)PORT->UEL &= ~u32PinMask);
                break;
            default:
                break;
         }
    #endif
       
    #if defined(CPU_KE06)
        switch((uint32_t)pGPIO)
        {
            case GPIOA_BASE:
                (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE0 |= u32PinMask)PORT->PUE0 &= ~u32PinMask);
                break;
            case GPIOB_BASE:
                (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE1 |= u32PinMask)PORT->PUE1 &= ~u32PinMask);
                break;
            case GPIOC_BASE:
                (sGpioType == GPIO_PinInput_InternalPullup)?(PORT->PUE2 |= u32PinMask)PORT->PUE2 &= ~u32PinMask);
                break;
            default:
                break;
         }
    #endif   
       
        /* Config PORT GPIO_PinOutput_HighCurrent for GPIO */
    #if defined(CPU_KE04)
        if (u32PinMask & GPIO_PTC5_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTC5_MASK;
        }   
        if (u32PinMask & GPIO_PTC1_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTC1_MASK;
        }   
        if (u32PinMask & GPIO_PTB5_MASK)
        {   
            PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;
        }   
    #endif
       
    #if defined(CPU_KE02) | defined(CPU_KE06)
        if (pGPIO == GPIOA)
        {
            if (u32PinMask & GPIO_PTB4_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTB4_MASK;
            }   
            if (u32PinMask & GPIO_PTB5_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTB5_MASK;
            }   
            if (u32PinMask & GPIO_PTD0_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTD0_MASK;
            }   
            if (u32PinMask & GPIO_PTD1_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTD1_MASK;
            }   
        }
        if (pGPIO == GPIOB)
        {
            if (u32PinMask & GPIO_PTE0_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTE0_MASK;
            }   
            if (u32PinMask & GPIO_PTE1_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTE1_MASK;
            }   
            if (u32PinMask & GPIO_PTH0_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTH0_MASK;
            }   
            if (u32PinMask & GPIO_PTH1_MASK)
            {   
                PORT->HDRVE |= PORT_HDRVE_PTH1_MASK;
            }   
        }

    #endif
       
    }
    这是I/O口初始化函数,里面不是已经有把GPIOx_PIDR寄存器配置为0那句话了吗?
    else if ((sGpioType == GPIO_PinInput) || (sGpioType == GPIO_PinInput_InternalPullup))
        {
            pGPIO->PDDR &= ~u32PinMask;   /* Disable Port Data Direction Register */
            pGPIO->PIDR &= ~u32PinMask;   /* Clear Port Input Disable Register */
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-10-28 16:19:38 | 显示全部楼层
    liqing666 发表于 2016-10-28 15:10
    void GPIO_Init(GPIO_Type *pGPIO, uint32_t u32PinMask, GPIO_PinConfigType sGpioType)
    {
        /* Sanity ...

    贴代码请采用带代码编辑器,要不出现乱码
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-10-28 16:38:00 | 显示全部楼层
    liqing666 发表于 2016-10-28 15:10
    void GPIO_Init(GPIO_Type *pGPIO, uint32_t u32PinMask, GPIO_PinConfigType sGpioType)
    {
        /* Sanity ...

    是有了,楼主你有现在是直接用官方代码,其他口都可以读,只有PTC2不能读是吗?
    楼主,PTC2引脚还有更高功能的FTM2_CH2,不知道你有没有开启哦?
    如果被开启的话,那么功能会默认为FTM的引脚的,所以先检查下代码。
    如果还是不行,请告诉我,我回头有空给你做个PTC2可以用的工程。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    19

    帖子

    0

    注册会员

    Rank: 2

    积分
    86
    最后登录
    2018-3-26
     楼主| 发表于 2016-10-29 17:35:57 | 显示全部楼层
    小恩GG 发表于 2016-10-28 16:38
    是有了,楼主你有现在是直接用官方代码,其他口都可以读,只有PTC2不能读是吗?
    楼主,PTC2引脚还有更高 ...

    谢谢,已经解决了,是我语句没写好,逻辑与和按位与傻傻分不清
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    19

    帖子

    0

    注册会员

    Rank: 2

    积分
    86
    最后登录
    2018-3-26
     楼主| 发表于 2016-10-29 17:36:48 | 显示全部楼层
    技术范儿 发表于 2016-10-28 16:19
    贴代码请采用带代码编辑器,要不出现乱码

    好的,下次知道了,谢谢提醒
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-10-31 09:59:50 | 显示全部楼层
    liqing666 发表于 2016-10-29 17:35
    谢谢,已经解决了,是我语句没写好,逻辑与和按位与傻傻分不清

    好的,后续如果还有问题,欢迎继续发帖交流。
    其实出问题的时候,仔细按照官方的代码对比下,并且结合寄存器查看下数据,很容易找到问题。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-18 14:47 , Processed in 0.107320 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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