打印

STM32串口发送问题

[复制链接]
4631|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsbjb|  楼主 | 2012-3-23 18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用PC 发送一组16进制的数 当检验到有FE以后 接受FE 之后的数字
可是我在发送数据之后 串口接收的第一组数据是正确的 之后就接收的少了一位

例如 发送
FE FE 23 24 25 26 16
应该接收到
23 24 25 26 16

我接受的成了 24 25 26 16

大家帮我看看我的程序有什么问题 这是我接收中断的程序


void USART1_IRQHandler(void)
{  

char RX;
static char rx[8];

char *p;
static int i=0,s=0;

if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生接收中断  
  {
   
  RX=USART_ReceiveData(USART1);
   
  if(RX==0xFE)
  s=1;
  else if(s!=0)
  rx[i++]=RX;   
  if(RX==0x16)
  {
   
  p=rx;
  while(i--)
  {
  USART_SendData(USART1, *p++);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);   
  }   
   
  }
  USART_ClearITPendingBit(USART1, USART_IT_RXNE);
   
  }   
   

}
沙发
香水城| | 2012-3-24 14:52 | 只看该作者
查查配置。

使用特权

评论回复
板凳
logokfu| | 2012-3-25 01:47 | 只看该作者
算法问题,看看i和p应该是这个问题。

使用特权

评论回复
地板
BigCat111| | 2012-3-25 11:25 | 只看该作者
static int i = 0;
static char rx[8];

void USART1_IRQHandler(void) {
   char RX;
   char *p;

   if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
      RX = USART_ReceiveData(USART1);
      rx[i++] = RX;
      if      (RX == 0xFE) i = 0;
      else if (RX == 0x16) {
         p = rx;
         while (i--) {
            USART_SendData(USART1, *p++);
            while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
         }
      }
      USART_ClearITPendingBit(USART1, USART_IT_RXNE);
   }
}

使用特权

评论回复
5
BigCat111| | 2012-3-25 11:28 | 只看该作者
你把 i,s申明为全局变量,就可以了,你的程序写的很乱,我把rx[8]也给你改成全局变量,别的函数可以访问,另外把s变量取消了

使用特权

评论回复
6
BigCat111| | 2012-3-25 11:32 | 只看该作者
rx[i++] = Rx,应该加上溢出判断,否则会出现崩溃,if (i < (sizeof(rx) -1)) rx[i++] = RX;

使用特权

评论回复
7
txcy| | 2012-3-25 12:09 | 只看该作者
应该是配置问题

使用特权

评论回复
8
love001cool| | 2012-6-11 15:32 | 只看该作者
1# hsbjb


楼主啊,我也想用PC给stm32发送16进制数,有好多问题请教,加我QQ276079932,谢谢啊

使用特权

评论回复
9
love001cool| | 2012-6-12 17:26 | 只看该作者
1# hsbjb

我也遇到童谣的问题了,楼主,加我啊,谢谢了,qq:181710348

使用特权

评论回复
10
lai832| | 2012-6-14 13:02 | 只看该作者
串行发的不是8位 0x00~0xff----0~255吗?有区别吗?8位就是16进制啊

使用特权

评论回复
11
yzzly| | 2012-6-14 14:39 | 只看该作者
应该是程序逻辑问题导致没有及时接收第一个字节

使用特权

评论回复
12
love001cool| | 2012-6-21 09:25 | 只看该作者
10# lai832

是的,是我搞错了,我想传的数字比255大了怎么办呢?是不是要拆分了发送啊?

使用特权

评论回复
13
luohui5003| | 2012-6-21 09:57 | 只看该作者
先等待再发送。你把下面两句调换一下位置就ok了!
USART_SendData(USART1, *p++);
  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

使用特权

评论回复
14
luohui5003| | 2012-6-21 10:00 | 只看该作者
12# love001cool

发送大于255的数据,只需将数据拆分为高、低八位就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

193

主题

2354

帖子

0

粉丝