(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输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
desheng yang:if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
{
usDelay(2000);
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
{
貌似跟这个延时有关,延时小一些就正常了,这是为什么呢?
(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输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
desheng yang:
回复 desheng yang:
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
{
usDelay(2000);
if(GPIO_getData(gpioHandle, GPIO_Number_32)==LOW)
再经过多次测试之后,发现与延时时间并无关系,减小延时时间也没有效果,还是一样上电之后就会进入这段程序,是不是表明8301存在问题?但是我若去掉这段程序,整个系统都是正常工作的,这说明也不是8301的问题呀,但为什么会进入这段程序呢?求助!!
(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输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
desheng yang:
回复 desheng yang:
测量硬件,芯片管脚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); }
}
(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输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
Jim1:
回复 desheng yang:
一開始有無Enable後再判斷?
(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输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
desheng yang:
回复 Jim1:
初始化的时候,已经使能的了,判断我是在循环中执行的;若改为if(GPIO_getData(gpioHandle, GPIO_Number_32)==HIGH),程序是正常运行的,系统正常工作,就是理论上判断低的时候,就会进入这段程序,原则上应该是8301输出低电平才是故障吧?
(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输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
Jim1:
回复 desheng yang:
剛上電的時候,PVDD還在充電
這時候使能的話有可能會觸發UnderVoltage報警,則必須重新致能
建議你在使能前,先判斷PWRGD的狀態
當電源穩定後再使能drv8301
(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输出低电平,才会执行这段代码。
然而却不是这样,求各位大神指教,急急急!!!
desheng yang:
回复 Jim1:
Hi Jim1,
Thanks,我试试看。
但是如果我屏蔽掉这段程序,确实正常的情况,启动什么的,都正常。