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.
工具与软件:
您好!
我正在使用 MSPM0G3507 LaunchPad 对 UART 进行编程。 我使用的是"uart_echo_interrupts_standby_LP_MSPM0G3507_nortos_ticlang"。
我尝试从坞站灯 02 01 00 13 00 25 3D FC 发送以下消息、我可以在 UART 中断中接收相同的消息。
第二条消息是 02 01 00 20 00 0C 3D F6、仅接收部分字节。 消息如图所示。
UART 配置如下:
/* clang-format off */ #define POWER_STARTUP_DELAY (16) #define CPUCLK_FREQ 32000000 /* Defines for UART_0 */ #define UART_0_INST UART0 #define UART_0_INST_FREQUENCY 32768 #define UART_0_INST_IRQHandler UART0_IRQHandler #define UART_0_INST_INT_IRQN UART0_INT_IRQn #define GPIO_UART_0_RX_PORT GPIOB #define GPIO_UART_0_TX_PORT GPIOB #define GPIO_UART_0_RX_PIN DL_GPIO_PIN_1 #define GPIO_UART_0_TX_PIN DL_GPIO_PIN_0 #define GPIO_UART_0_IOMUX_RX (IOMUX_PINCM13) #define GPIO_UART_0_IOMUX_TX (IOMUX_PINCM12) #define GPIO_UART_0_IOMUX_RX_FUNC IOMUX_PINCM13_PF_UART0_RX #define GPIO_UART_0_IOMUX_TX_FUNC IOMUX_PINCM12_PF_UART0_TX #define UART_0_BAUD_RATE (9600) #define UART_0_IBRD_33_kHZ_9600_BAUD (1) #define UART_0_FBRD_33_kHZ_9600_BAUD (9) static const DL_UART_Main_ClockConfig gUART_0ClockConfig = { .clockSel = DL_UART_MAIN_CLOCK_LFCLK, .divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1 }; static const DL_UART_Main_Config gUART_0Config = { .mode = DL_UART_MAIN_MODE_NORMAL, .direction = DL_UART_MAIN_DIRECTION_TX_RX, .flowControl = DL_UART_MAIN_FLOW_CONTROL_NONE, .parity = DL_UART_MAIN_PARITY_NONE, .wordLength = DL_UART_MAIN_WORD_LENGTH_8_BITS, .stopBits = DL_UART_MAIN_STOP_BITS_ONE }; SYSCONFIG_WEAK void SYSCFG_DL_UART_0_init(void) { DL_UART_Main_setClockConfig(UART_0_INST, (DL_UART_Main_ClockConfig *) &gUART_0ClockConfig); DL_UART_Main_init(UART_0_INST, (DL_UART_Main_Config *) &gUART_0Config); /* * Configure baud rate by setting oversampling and baud rate divisors. * Target baud rate: 9600 * Actual baud rate: 9576.04 */ DL_UART_Main_setOversampling(UART_0_INST, DL_UART_OVERSAMPLING_RATE_3X); DL_UART_Main_setBaudRateDivisor(UART_0_INST, UART_0_IBRD_33_kHZ_9600_BAUD, UART_0_FBRD_33_kHZ_9600_BAUD); /* Configure Interrupts */ DL_UART_Main_enableInterrupt(UART_0_INST,DL_UART_MAIN_INTERRUPT_RX); DL_UART_Main_enable(UART_0_INST); } #include "ti_msp_dl_config.h" #define UART_PACKET_SIZE 8 char rxPacket[UART_PACKET_SIZE]; volatile uint8_t gEchoData = 0; uint8_t i=0; int main(void) { SYSCFG_DL_init(); NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN); NVIC_EnableIRQ(UART_0_INST_INT_IRQN); //DL_SYSCTL_enableSleepOnExit(); while (1) { __WFI(); } } void UART_0_INST_IRQHandler(void) { switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) { case DL_UART_MAIN_IIDX_RX: rxPacket[i++] = DL_UART_Extend_receiveDataBlocking(UART_0_INST); //rxPacket[i++]= DL_UART_Main_receiveData(UART_0_INST); //DL_UART_Main_transmitData(UART_0_INST, gEchoData); break; default: break; } }
提前感谢。
此致、
Yogesh。
您好!
我没有看到您将索引 i 限制为不超过数组的大小。
您需要在代码中的某个位置添加以下内容。
如果(i>UART_PACKET_SIZE) i=0;
此致、
Cash Hao