stm8s103f3串口接收数据串问题

2019-07-19 20:52发布

我用stm8s103f3做串口的数据收发,数据发送正常,但是数据接收不管是中断方式还是轮训方式都无法接收数据串,只能收到每次数据串的第一个字节,下面是我的程序:[mw_shl_code=c,true]static volatile char rx;
static volatile bool new_rx = FALSE;
void main(void)
{
  ErrorStatus clk_return_status = ERROR;
  clk_return_status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);
  if (clk_return_status == SUCCESS)  //SUCCESS or ERROR
  {
    CLK_HSECmd(ENABLE);
    CLK_HSICmd(DISABLE);
    CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV4);
  }
  
  led_init();
  UART1_Init((u32)460800, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
  UART1_Cmd(ENABLE);
  
  enableInterrupts();
  
  led_on(0);  
  
  while(1)
  {
    if(new_rx)
    {
      new_rx = FALSE;
      UART1_SendData8(rx);
      led_toggle(0);
    }
  }
}

//UART1 RX Interrupt routine.
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
  new_rx = TRUE;
  UART1_GetITStatus(UART1_IT_OR);
  if(UART1_GetITStatus(UART1_IT_RXNE))
  {
    rx = UART1_ReceiveData8();
  }
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
旦丁中号
2019-07-20 08:25
按照手册说的,读SR寄存器和读DR寄存器可以清除相应的标志位,而且如果是因为没有清标志位的话,应该是收到第一个字节后一直就循环进入中断了。然后我用下面这个程序来累计进入rx中断的次数,不管我从串口助手一次性发送
多少个字节的数据,这个rx_it_cnt每次只累加1

[mw_shl_code=c,true]INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
  
  rx_it_cnt++;
  UART1_GetITStatus(UART1_IT_OR);
  rx = UART1_ReceiveData8();
}[/mw_shl_code]

一周热门 更多>