M0518用串口接收数据时出问题。发送端共发送3个字节,固定第一字节数据会改变,其它两个字节的数据一直为0,可是接收端收到的数据,第一个字节是正常的,后面的第二、三字节却是乱的,本应为0的,但是像随机一样的数据;如果固定第二个字节数据变化,第一、三字节固定为0时,则接收到的,第二个字节正常,第一、三字节又是乱的,不为0。
收发的波特率是一样的。
接收中断如下:
/* 接收中断 */
void UART02_IRQHandler(void)
{
uint8_t u8InChar = 0;
uint32_t u32IntSts = UART0->ISR;
static uint8_t rec_cnt=0;
if(u32IntSts & UART_ISR_RDA_INT_Msk)
{
while(UART_IS_RX_READY(UART0))
{
u8InChar = UART_READ(UART0);
/* Check if buffer full */
rec_buf[rec_cnt] = u8InChar;
rec_cnt++;
if(rec_cnt >= 3)
rec_cnt = 0;
}
}
}
接收中断程序是在M0518串口例程上稍做修改的
接收端串口的配置如下:
void UART0_Init(void)
{
/* Enable peripheral clock */
CLK_EnableModuleClock(UART0_MODULE);
/* Peripheral clock source uart0 */
CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));
/*---------------------------------------------------------------------------------------------------------*/
/* Init I/O Multi-function */
/*---------------------------------------------------------------------------------------------------------*/
/* Set PB multi-function pins for UART0 RXD, TXD */
SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
SYS->GPB_MFP = SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;
/* Reset IP */
SYS_ResetModule(UART0_RST);
/* Configure UART0 and set UART0 Baudrate */
UART_Open(UART0, 250000);
/* Enable RDA中断 */
UART_EnableInt(UART0, UART_IER_RDA_IEN_Msk);
/* 设置中断优先级 */
NVIC_SetPriority(UART02_IRQn, 1);
}
|