你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8串口收发多个字节的问题

[复制链接]
歇斯底里a 提问时间:2017-4-22 16:30 /
我这样修改了下,在中断里写接收到了2个字节的数据 就把标志位flagTxd置1,主函数里判断flagTxd是否置1,然后把数据给发出来,这样是收发没问题的,但是 if(UART_RX_NUM==2)这个计数的条件 我换成大于等1他就是一个字节正常收发,大于等于2他就是两个字节正常收发,多了少了都发的接受错误的数据,感觉 RX_MUN没有在2个函数同步操作,我想不通原因,纠结了好久



INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
      //u8 Res,i;
      if(UART1_GetITStatus(UART1_IT_RXNE)!= RESET)                     
          RxBuffer[ UART_RX_NUM++] = UART1_ReceiveData8();
         if(UART_RX_NUM==2)
         {
          flagTxd=1;
         }
        UART1_ClearITPendingBit(UART1_IT_RXNE);



int main( void )
{
     u8 i,len1;
  //u8 ad[4],i;
  //fp32 cc=3.14;
  sysInit();
   while(1)
  {

   if(flagTxd==1)
       {
        // len1=UART_RX_NUM;        //得到此次接收到的数据长度
       //UART1_Send_Byte(len1);


      for(i=0;i<UART_RX_NUM;i++)
        {
           UART1_Send_Byte(RxBuffer[i]);
          }
         delay_us(50);

          UART_RX_NUM=0;       
          flagTxd=0;

       }



收藏 1 评论1 发布时间:2017-4-22 16:30

举报

1个回答
enjoyfreescal 回答时间:2017-4-24 15:17:50
UART_RX_NUM在发送的地方设置为0,但是接收的地方++了,这样会有冲突(还没发完又有数据),除非flagTxd == 1的时候不接收新数据,或则自己想一下解决方案吧。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版