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.
大家好、
硬件:DRV8312基板、F2805X 控制器卡
我正在尝试创建一个外部中断并 从 GPIO 读取数据。 然后触发电机以使用不同的配置运行。
但我遇到了一个无法从 GPIO 正确读取数据的问题。 始终从 GPIO 读取0x00、(I 发送0x08)
我恐怕外部中断的初始化出了问题。
我修改了 proj_lab01.c-void main (void)、如下所示:
void main (void) { //仅在从闪存运行时使用 //请注意变量 FLASH 由项目 #ifdef FLASH 定义 //将时间关键代码和闪存设置代码复制到 RAM // RamfuncsLoadStart、RamfuncsLoadEnd 和 RamfuncsRunStart //符号由链接器创建。 请参阅链接器文件。 Memcopy ((uint16_t *)&RamfuncsLoadStart、(uint16_t *)&RamfuncsLoadEnd、(uint16_t *)&RamfuncsRunStart); #endif //初始化硬件层 halHandle = HAL_init (&hal、sizeof (hal));/enable_enable_Interrupts / enable_enable/enable_enable_enable/enable_enable_enable/enable_enable_enable_interrupts (halts/enable_enable_enable_enable_enable_enable_enable_enable_enable/enable_enable_enable_enable_enable_enable_enable_enable_enable_enable_enable/enable_enable_enable_enable_enable_enable_enable_enable_
中断如下所示:
interrupt void writeSignalISR (void) { static Int32_t temp; HAL_Obj * obj =(HAL_Obj *) halHandle; if (GPIO_getData (obj->gpioHandle、GPIO_Number_10)= 0) { if (Commandobj = 1) { HAL_setGpioDirection (obj_portion= 0 );GPIO_pioPort_pion= 0);GPIO_pioPort_pion_pion_pioDirection;GPIO_pion_pion= 0;GPIO_pion_pioPort_pion_pioPort_pion= 0 命令= temp; DataCounter = 0; if (命令= 0x08)//FW 版本 {//PROD_VER_STUK/0x7E TransmitData[0]= 0xFF; TransmitData[1]= 0x80;//0xFE 或0xF4 TransmitData[2]= 0xFF; GPIO_setPortData (obj->goHandle<gobj)、TransmitData ( while)、GPIO_TransmitData_Port[GPIO_Outputle]、GPIO_TransmitData_OutHandle](while)、GPIO_TransmitData_OutHandle_Port[GPIO... GPIO_Number_8)==0);//等待 Wr=1 HAL_setGpioDirection (halHandle、GPIO_Direction_Output);// GPIO 作为输出 } 否则(Command ==0)//ProductID {....................}
//确认 XINT1中断 HAL_acqExtInt (halHandle); return; }//结束 writeSignalISR ()函数
我在以下内容之后添加了断点:
HAL_setGpioDirection (halHandle、GPIO_Direction_Input); temp = GPIO_getPortData (obj->gpioHandle、GPIO_Port_A); temp &= 0x000000FF; 命令= temp;
temp 始终读为0、它有时在开始时读为128、然后始终读为0。 我使用示波器检查硬件信号,绝对有一个来自 GPIO 的写入信号。 但我无法从调试模式正确读取它。
有 initIntVectorTable:
//! \brief 初始化中断矢量表 //! \details 将 ISR 指向函数 mainISR。 //! \param[in]处理硬件抽象层(HAL)处理 静态内联 void HAL_initIntVectorTable (HAL_Handle handle) { HAL_Obj * obj =(HAL_Obj *) handle; PI_Obj * PIE =(PI_Obj *) obj->压 电筒; ENABLE_PROTECTED 寄存器_写入_模式; PIE -> XIRE= XIRE- XINSTR=&INSTR= XINSTR- XINSTR=写入 IALPIE = INCASTE&INT1-&INCASTE&INT =写入 ISR PI->SCIRXINTB =&scibrxISR; PI->SCIRXINTC =&scicrxISR; disable_protected_register_write_mode; return; }// HAL_initIntVectorTable()函数的末尾
是否有人知道如何解决此问题?