我有一个 EK-TM4C129XL、该 EK-TM4C129XL 将通过串行/UART 从 PC 上的 Matlab 进行控制。
问题是、来自 PC 的传输不会触发接收中断。 我不会忘记在尝试之前"恢复"。
请检查我是否正确配置了所有内容。 这是相关代码。
void initPCInterface (uint32_t sys_clk) { SysCtlPeripheralEnable (SYSCTL_Periph_UART0); GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); GPIOPinTypeUART (GPIO_Porta_base、0b00000011); UARTConfigSetExpClk (UART0_BASE、SYS_CLK、57600、 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); UARTFIFOEnable (UART0_BASE); UARTFIFOLevelSet (UART0_BASE、UART_FIFO_TX2_8、UART_FIFO_RX2_8); UARTIntEnable (UART0_BASE、UART_INT_RX); UARTIntRegister (UART0_BASE、pcCommInterface); IntPrioritySet (INT_UART0、0x20);//中等优先级 IntEnable (INT_UART0); }
void initGPIO (void) { SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOB)); GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、PB_MASK); GPIOPinWrite (GPIO_PORTB_BASE、PB_MASK、0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOP)); GPIOPinTypeGPIOOutput (GPIO_PORTP_BASE、PP_MASK); GPIOPinWrite (GPIO_PORTP_BASE、PP_MASK、0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOE)); GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、PE_MASK); GPIOPinWrite (GPIO_Porte _BASE、PE_MASK、0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOC)); GPIOPinTypeGPIOOutput (GPIO_PORTC_BASE、PC_MASK); GPIOPinWrite (GPIO_PORTC_BASE、PC_MASK、0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOQ)); GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、PQ_MASK); GPIOPinWrite (GPIO_PORTQ_BASE、PQ_MASK、0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOK)); GPIOPinTypeGPIOInput (GPIO_PORTK_base、PK_MASK); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOD)); //解锁 PD7,默认 NMI HWREG (GPIO_PORTD_BASE + GPIO_O_LOCK)= GPIO_LOCK_KEY; HWREG (GPIO_PORTD_BASE + GPIO_CR)= 0x80; GPIOPinTypeGPIOInput (GPIO_PORTD_BASE、PD_MASK); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOM)); GPIOPinTypeGPIOInput (GPIO_PORTM_BASE、PM_MASK); SysCtlPeripheralEnable (SYSCTL_Periph_GPION); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)); GPIOPinTypeGPIOInput (GPIO_PORTN_BASE、PN_MASK); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)); GPIOPinTypeGPIOInput (GPIO_Porta_base、PA_MASK); }
int main (void) { {//限制 sys_clock 的作用域 uint32_t sys_clock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); initGPIO(); initPCInterface (sys_clock); }//sys_clock 从堆栈中弹出 IntMasterEnable(); while (true); }
最小 Matlab 测试。 MATLAB 成功打开端口
清除
全部关闭
s=serial ('/dev/ttyS0、...
'budrate'、57600、'DataBits'、8、'Parity、'none'、...
'stopBits'、1、'Timeout'、2);
fopen (s);%successful
fprintf (s、'rzzzklkl');%send 某个东西、不
执行 fclose;