打印

STM32 串口发送问题

[复制链接]
2508|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuxiaojia|  楼主 | 2011-11-26 07:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Delay(vu32 i)
{  
  u32 k;
  for(k=0;k<i;k++)
  {}
}                              


for(sd_size=0;sd_size<512;sd_size++)
     {   

      GPIO_ResetBits(GPIOB,GPIO_Pin_2);
      temp=buf[sd_size];
      USART_SendData(USART1,temp);
      while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);  
      USART_ClearFlag(USART1,USART_FLAG_TXE);  
   
      GPIO_ResetBits(GPIOA,GPIO_Pin_3);  
      Delay(400);
      GPIO_SetBits(GPIOA,GPIO_Pin_3);
      Delay(400);
     }

做一个从串口循环发送数据的程序,有个很奇怪的问题,就是必须在每次发送后增加一段延时程序,否则单片机会出现死机现象。不知道是为什么呢,请高手们指点呢。谢谢了。我就是在发送后增加了两次Delay(400),否则开机就会死机。
沙发
香水城| | 2011-11-26 09:58 | 只看该作者
这不是直接原因,只是碰巧,肯定还有其他真正的原因。

死机是什么意思,死在哪里?

使用特权

评论回复
板凳
wuxiaojia|  楼主 | 2011-11-26 11:26 | 只看该作者
延时值要400以上才能保证不死机,否则程序无法进入此循环。而且之前的程序也不执行,不知道是跑飞还是其他什么,很纳闷。

使用特权

评论回复
地板
wuxiaojia|  楼主 | 2011-11-26 11:28 | 只看该作者
这不是直接原因,只是碰巧,肯定还有其他真正的原因。

死机是什么意思,死在哪里?
香水城 发表于 2011-11-26 09:58

向2楼的朋友请教一个问题,STM32串口连续发送需要一个时间间隔吗?

使用特权

评论回复
5
wang_zuowei| | 2013-3-1 15:37 | 只看该作者
你的程序只有这么短吗?单片机这么快的速度反复进中断时不行的,上一次的数据还没有发完呢新的数据有写进去了,你可以在串口发送语句后面加一句等待发送完成试试。
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)/*等待发送完成*/
{;}

使用特权

评论回复
6
jemofh| | 2014-9-28 22:32 | 只看该作者
我怎么delay(400)了,还死机啊,死在这里while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

使用特权

评论回复
7
jemofh| | 2014-9-28 22:37 | 只看该作者
明天改用dma发送试试

使用特权

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

本版积分规则

0

主题

7

帖子

1

粉丝