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.

TMS320F28035: 求助:GPIO复位后,GPIO初始状态为1;我想知道复位以后如何将GPIO的初始状态置0.

Part Number: TMS320F28035

GPIO28配置如下:

Fullscreen
1
2
3
4
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // enable Pullup
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 0; // Function as Gpio
GpioCtrlRegs.GPADIR.bit.GPIO28 = 1; // 0uput
GpioDataRegs.GPADAT.bit.GPIO28 = 0;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

DEBUG模式下:CPU RESET后GPADAT数据寄存器状态如图所示:

  • 你好,请问你是指复位之后的GPIO状态,还是初始化之后的GPIO状态?

    如果是前者,那么GPIO内部有一个复位上拉电阻不知道你有没有使能。如果没有使能,那复位之后的GPIO电平应该是随机的,你要确保是低电平的话可以加一个外部弱下拉

    如果是后者,那你修改一下寄存器配置就行了

    你的寄存器状态截图是程序运行到什么位置之后的截图?单步运行一次上面的GPIO配置代码之后的结果是怎么样的?还是1?

  • 复位之后,初始化之前的GPIO状态;如果没有设置内部上拉的话GPIO的状态是浮空的吗?如果设置了内部上拉那么复位后GPIO输出就是3.3V吗?

    这个寄存器状态截图是DEBUG模式下点击CPU RESET后,GPADAT数据寄存器状态;此时程序未运行。

  • 如果没有设置内部上拉的话GPIO的状态是浮空的吗?

    应该是一个随机的高或低电平。

    如果设置了内部上拉那么复位后GPIO输出就是3.3V吗?

    是的

    这个寄存器状态截图是DEBUG模式下点击CPU RESET后,GPADAT数据寄存器状态;此时程序未运行。

    这样的话你的截图就是正常的。你的代码使能了pullup,复位之后程序还没接管GPIO,所以GPADAT读取的状态是高。

    但是如果你要确保GPIO复位之后的电平是低电平的话,只能一方面禁用内部上拉,一方面外部加弱下拉电路。

  • 好的,非常感谢您的解答,我去尝试一下。

  • 好的,如果觉得我的回复能解决你的问题的话还请帮忙点击绿色的确认答案按钮,以方便其他工程师参考。

  • 我配置的这个GPIO28是作为输出来使用,后级驱动的是三极管电路;一般上拉下拉不是针对输入端口来说的吗,如果作为输出端口加一个下拉电阻是否有作用呢。

  • 有作用,因为加的是弱下拉,复位的时候GPIO的控制代码还没起作用,此时GPIO作为输出口也没有什么驱动能力,所以用弱下拉就能将GPIO拉低。

    一旦GPIO被代码接管,弱下拉就会“失效”,对程序的运行也没什么影响

    同样的操作在对boot引脚的配置上也有效。

  • 感谢确认答案