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.
(28027芯片)在使用没有触发功能的引脚的情况下,使用一般IO口,IO口配置如下:
GPIO_setMode(obj->gpioHandle,GPIO_Number_32,GPIO_32_Mode_GeneralPurpose);// FAULTn 出错 GPIO_setDirection(obj->gpioHandle,GPIO_Number_32,GPIO_Direction_Input);
外接上拉电阻,再输入芯片,读取引脚电平状态代码如下:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW) { usDelay(2000); if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW) { GPIO_setLow(halHandle->gpioHandle,GPIO_Number_6);//禁止使能DRV8301 HAL_disablePwm(halHandle); for(j=0;j<10;j++) { HAL_LED(halHandle,3);//DRV故障,闪灯警示 usDelay(10000); HAL_LED(halHandle,1);//Gpio34亮 usDelay(10000); } } }
但是在正常情况下,程序会执行这段代码,这是为什么呢?
我的理解是:8301错误引脚是开漏输出,外接上拉电阻,正常情况下,应该是读到高电平,不会执行这段程序才对;只有当故障时,8301输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
if
(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
{
usDelay(2000);
if
(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
{
if
(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
{
usDelay(2000);
if
(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
测量硬件,芯片管脚3.3V,8301错误引脚0.6V左右,怎么到了芯片内部程序读取就成低电平了,什么原因呢???
读取管脚数据函数如下,是官方库的
uint16_t GPIO_getData(GPIO_Handle gpioHandle, const GPIO_Number_e gpioNumber)
{
GPIO_Obj *gpio = (GPIO_Obj *)gpioHandle;
if(gpioNumber < GPIO_Number_32)
{
return ((gpio->GPADAT >> gpioNumber) & 0x0001);
}
else
{
return ((gpio->GPBDAT >> (gpioNumber - GPIO_Number_32)) & 0x0001);
}
}
初始化的时候,已经使能的了,判断我是在循环中执行的;若改为if(GPIO_getData(gpioHandle, GPIO_Number_32)==HIGH),程序是正常运行的,系统正常工作,就是理论上判断低的时候,就会进入这段程序,原则上应该是8301输出低电平才是故障吧?
剛上電的時候,PVDD還在充電
這時候使能的話有可能會觸發UnderVoltage報警,則必須重新致能
建議你在使能前,先判斷PWRGD的狀態
當電源穩定後再使能drv8301