OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3949|回复: 3

跪求原子大哥帮我看下串口的问题

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2013-5-2
在线时间
0 小时
发表于 2013-5-11 10:47:55 | 显示全部楼层 |阅读模式

我现在用俩无线串口模块进行传数,发过去数据传回来的数和我之前设的不一样,不知道哪里的问题,好像是串口中断中收取那块写的有问题,跪求大哥帮我看下。
void USART2_IRQHandler(void)
{
  if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
 {  
  /* Write one byte to the transmit data register */
   if(TxCounter==16)
  {    /* Disable the USART2 Transmit interrupt */
   TxCounter= 0;
   USART_SendData(USART2, Tx_TxBuffer[TxCounter++]);
   USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
   SendOver = 0;  //发送完毕标志位清0
   TxCounter= 0;
  }
  else{USART_ITConfig(USART2, USART_IT_TXE, DISABLE);}  
 }

 if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
 {  /* Read one byte from the receive data register */
  Tx_RxBuffer[RxCounter++] = USART_ReceiveData(USART2);     
  
  if(RxCounter == 16)
  {
        /* Disable the USART2 Receive interrupt */
    USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
    RecvOver = 0;     //接收完毕标志位置0
    RxCounter= 0;
    //Zigbee_RecvHandler(RxCounter);   //返回值RxCounter
  }
 }
}
主程序
void  OnBtnTerIDGetClicked(WM_MESSAGE * pMsg)
{
WM_HWIN hWin;
int i;
int j;
int a=100;
u8 TxBuf1[] = {0x7E,0x00,0x00,0x00,0x00,0x11,0x00,0x04,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x11,0x8E};
u8 TxBuf2[17];
 tongxun_init();

for( i=0;i<16;i++)
{ TxCounter=i;
Tx_TxBuffer[TxCounter]= TxBuf1;
}
   //GUI_Init();
 //while(RecvOver !=0);
    //GUI_Init();
 while(RecvOver ==0)
  {   //GUI_Init();
  for( RxCounter=0;RxCounter<16;RxCounter++)
  j=RxCounter;
  TxBuf2[j]=Tx_RxBuffer[RxCounter] ;
  } 
 EDIT_SetHexMode(WM_GetDialogItem(hWin,GUI_ID_EDIT0),0x0,0x0,0xFFFFF);//设置编辑框的十六进制模式
 EDIT_SetValue(WM_GetDialogItem(hWin,GUI_ID_EDIT0),TxBuf2[15]);//设置编辑区当前的数值 
}
我要发的数据事先放在了TxBuf1里,一次发8位,由它发给Tx_RxBuffer;无线模块收到另一个模块返回来的数,然后会自动发给mcu吧?那我mcu收到数据存在Tx_RxBuffer里,我中断里不知道写的对不对,我想的是等到Tx_RxBuffer收到全部的17个0xXX形式的数据后,再将这些数据传给TxBuf2,我最后再从TxBuf2中读取某一位,显示在页面的edit里,但是收到的数据不对。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-11 16:28:12 | 显示全部楼层
有问题的时候,先从简单的做起:收发一个数据是否正常?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2013-5-2
在线时间
0 小时
 楼主| 发表于 2013-5-11 16:35:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子兄,我一直对中断函数不太明白怎么工作的。假如我在中断中写了 if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
{USART_SendData(USART2, Tx_TxBuffer[TxCounter++]);}那是不是当主函数中Tx_TxBuffer的值发生变化的时候,就会进入中断? 
加入进入了中断,出中断的方法是不是disable标志位呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-11 20:29:50 | 显示全部楼层
回复【3楼】baiamte:
---------------------------------
你要开启发送完成中断,才会进入中断服务函数。PS:发送数据一般不用开启中断,个人感觉作用不大。
进入中断后,最好手动清除标志位。虽说有些操作可以清除,但是为了简单起见,加多一个手动清除,总是好的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 06:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表