我想把PC4至高,但是用万用表测出来电压只有0.6 0.7左右,这是为什么呀?
不是应该3.3v吗?
我是这样配置的:
GPIO_PORTC_DATA_R |= 0X10
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.
仔细检查一下电路和代码初始化部分吧。
给个初始化的例子:
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4);
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_4);
电路部分的话,确定PC4输出不要短路到其他地方就好了。
GPIODirModeSet这个函数只是把这个GPIO的方向配置为输出。
GPIOPinTypeGPIOOutput这个函数的源码:
void
GPIOPinTypeGPIOOutput(uint32_t ui32Port, uint8_t ui8Pins)
{
//
// Check the arguments.
//
ASSERT(_GPIOBaseValid(ui32Port));
//
// Set the pad(s) for standard push-pull operation.
//
GPIOPadConfigSet(ui32Port, ui8Pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
//
// Make the pin(s) be outputs.
//
GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_OUT);
}
这里会先把端口配置为GPIO功能,然后再配置方向。
这样就解释清楚了。
我之前是这样配置的
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_4);
改成
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4);
GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_4);
就能工作。
我理解你说的意思,但是我的程序是从别人写成功移植过来的,为什么别人可以用?我的就不行?
每次看别人的程序都会出现这样的问题。
如果你想了解详细的寄存器操作,可以去库函数源码中查看GPIOPadConfigSet函数。这里面执行了很多操作。
对于一个pin脚来说,首先要把它配置为GPIO功能,然后配置方向,作为输出,要驱动能力,作为输入,要配置上下拉等寄存器后,才能对这个GPIO进行操作。
pin脚还可以被配置为外设复用功能。比如复用为串口、SPI的接口。
我不认为别人的代码如果仅仅只有这一小段就能实现PC4的操作。可能他的代码其他地方还有和PC4相关的操作,或者是别的原因。
所以你不用纠结别人咋回事,或许他的代码本来就不严谨。