This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RM48L950官方送的开发板GPIO(GIO),输入输出问题

 我使用的是RM48L950官方送的开发板,在对GIO模块进行调试时发现,1.无论怎样设置portA输入输出的方向(DIRECTION),我用万用表测得都是寄存器DIN(datainput)表示的电压值? 2.DIN的值在执行对方向寄存器DIR初始化后,都会变化。新手很困惑!谢谢!

  • Hi ron,

    DIN的值就是实际引脚上的电平值,所以肯定和万用表测得值是一样的。

    GIO在DIR为输入时,引脚电平由外部电路决定。

    GIO在DIR为输出时,引脚电平与DOUT的值是一致的,此时DIN=DOUT。

    Regard,

    Jay

  • 图一为进入GIO的gioInit();函数(F5)里面进行调试结果:

    图1

    图二为不进入GIO的gioInit();函数,而是直接一步(F6)调试结果。

    疑惑:1为什么这种情况会不同?              

               2.不是说当PORT设置为输出时,DOUT=DIN,而图二就不是。  谢谢!

  • Hi ron,

    1. 请问你能把gio.c发上来吗?

    2. 没有进入gioInit(),MCU在复位后,GIOA的所有寄存器会清零,你的截图不是0,请问你做了什么操作吗?

    Regards,

    Jay

  • 1.可以。

    2.我没有做什么操作。上面的两个截图都是在执行gioInit()函数后的结果。区别是一个是单步调试,一个是进入函数调试。

     

    还有就是我前面发的第二个问题。谢谢 !刚毕业,不懂的很多,谢谢指教!

  • Hi ron,

    我用你的gio.c执行后的结果无论是F5还是F6调试,最后执行完gioInit()的结果是一样的。如下图所示。

    图中可以看到DIN和DOUT并不一样。这是因为,你在初始化中,把开漏寄存器给使能了。

        /** - Port A open drain enable */
        gioPORTA->PDR  =  1U         /* Bit 0 */
                       | (1U << 1U)  /* Bit 1 */
                       | (1U << 2U)  /* Bit 2 */
                       | (1U << 3U)  /* Bit 3 */
                       | (1U << 4U)  /* Bit 4 */
                       | (1U << 5U)  /* Bit 5 */
                       | (1U << 6U)  /* Bit 6 */
                       | (1U << 7U); /* Bit 7 */

    这样,引脚就需要在外部接上拉电阻。如果不接外部上拉,即使DOUT的值全为1,引脚悬空的话,引脚电平是不确定的,DIN的值就实际引脚电平决定。

    所以,分析你得到的两个截图。

    1. 你的板上GIOA引脚上是否有外部电路与之相连?是否每一次的DIN结果都相同?

    2. 你得到的DIN=0xFF的那个截图,应该是刚刚执行完下面这一句时的结果,因为此时,开漏还未被使能。

        /** - Port A direction */
        /*1 output,0 input*/
        gioPORTA->DIR  =  1U         /* Bit 0 */
                       | (1U << 1U)  /* Bit 1 */
                       | (1U << 2U)  /* Bit 2 */
                       | (1U << 3U)  /* Bit 3 */
                       | (1U << 4U)  /* Bit 4 */
                       | (1U << 5U)  /* Bit 5 */
                       | (1U << 6U)  /* Bit 6 */
                       | (1U << 7U); /* Bit 7 */

    Regards,

    Jay

  • 回答的很好!很详细!!!!谢谢!!!