10122|7

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

程序怎样才能跳出for循环 [复制链接]

我使用st公司的三合一板和一个触摸屏进行串口通信,通信方式为中断接收、查询发送,现在通信的接收和发送都可以进行了,传输的数据都正确,但在主程序里却无法看到接收中断接收的数据。通过设置断点发现主程序除了响应中断以外,就一直停在主程序内的一个for循环的while语句上不再移动。可以响应接收中断,但不响应我在主程序里设置的断点,用halt停止程序运行,黄色箭头都停在while(USART_GetFlagStatus(USART1,   USART_FLAG_TXE)==RESET);可见程序一直没有跳出这个for循环。我试了好长时间,一直没有进展。下面是程序在MDK里运行的拷屏,请各位高手和朋友给予帮助和指点。
stm.jpg
此帖出自stm32/stm8论坛

最新回复

                                 问题找到了,在主程序里少了一个while (1)语句,程序跑飞了,增加该语句后,就一切正常了。  详情 回复 发表于 2011-3-3 18:20
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 会不会是while语句有问题?
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 楼上说的对的,要看看中间变量
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
stm32.jpg 谢谢!我试了一下,黄色箭头都停在while时,变量i的数值是0x28,我也是第一次使用MDK,不知道这个i值代表的什么意思,对应的数据,理论上应该发送完毕了,如果没有发送完毕,触摸屏的数据格式不满足,就不能正确显示,现在触摸屏显示正常。但串口数据寄存器DR(0x40013804)的内容为3C,这是发送数据最后一个字节的内容。为什么它还有内容呢?
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
这个黄色箭头有时也会停在usart.c文件的USART_GetFlagStatus函数里
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
{
  FlagStatus bitstatus = RESET;
  
  /* Check the parameters */
  assert_param(IS_USART_FLAG(USART_FLAG));
  
  if ((USARTx->SR & USART_FLAG) != (u16)RESET)
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return bitstatus;
}
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
现在我把主程序的for循环取消,通信的接收和发送都使用中断进行,在接收中断,接收数据完成后,点亮接收指示灯,然后在主程序里经过延时再把接收指示灯熄灭。
    程序运行后,程序可以接收触摸屏传送的键码信息,然后直接通过发送中断把键码信息发回触摸屏显示,键码显示正确。对应的接收指示灯也会闪亮。
     但如果在主程序里增加读取接收中断数据的语句,程序就不再响应通信中断了,也不在主程序里运行,在这两个地方设置断点都没有响应。如果按halt停止程序运行,发现指示程序运行的黄色箭头(使用MDK编译、调试),每次都停it.c文件的 HardFaultException函数的while (1)语句上。
/*******************************************************************************
* Function Name  : HardFaultException
* Description    : This function handles Hard Fault exception.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void HardFaultException(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}
真是硬件有问题吗?但是在主程序里不添加读取接收中断数据的数据就可以正常运行,到底是硬件问题,还是软件不对呢?
非常期望各位高手和朋友给予指点和帮助!
谢谢!非常感谢!拜托了!
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

7
 
在主程序里不添加读取接收中断数据的(数据)就可以正常运行
上面数据两字写错了,应改为语句二字即
在主程序里不添加读取接收中断数据的语句就可以正常运行
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 问题找到了,在主程序里少了一个while (1)语句,程序跑飞了,增加该语句后,就一切正常了。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表