X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
stm32/stm8
程序怎样才能跳出for循环
szhgx26
2011-3-1 17:33
楼主
我使用st公司的三合一板和一个触摸屏进行串口通信,通信方式为中断接收、查询发送,现在通信的接收和发送都可以进行了,传输的数据都正确,但在主程序里却无法看到接收中断接收的数据。通过设置断点发现主程序除了响应中断以外,就一直停在主程序内的一个for循环的while语句上不再移动。可以响应接收中断,但不响应我在主程序里设置的断点,用halt停止程序运行,黄色箭头都停在while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);可见程序一直没有跳出这个for循环。我试了好长时间,一直没有进展。下面是程序在MDK里运行的拷屏,请各位高手和朋友给予帮助和指点。
下载
(1.64 MB)
2011-3-1 17:33
点赞
回复评论 (7)
沙发
19850719
会不会是while语句有问题?
点赞
2011-3-2 10:16
板凳
nerdbihai
楼上说的对的,要看看中间变量
点赞
2011-3-2 14:08
4楼
lxhsea
下载
(1.87 MB)
2011-3-2 14:37
谢谢!我试了一下,黄色箭头都停在while时,变量i的数值是0x28,我也是第一次使用MDK,不知道这个i值代表的什么意思,对应的数据,理论上应该发送完毕了,如果没有发送完毕,触摸屏的数据格式不满足,就不能正确显示,现在触摸屏显示正常。但串口数据寄存器DR(0x40013804)的内容为3C,这是发送数据最后一个字节的内容。为什么它还有内容呢?
点赞
2011-3-2 14:37
5楼
jt4117
这个黄色箭头有时也会停在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;
}
点赞
2011-3-2 14:45
6楼
cwc0311
现在我把主程序的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)
{
}
}
真是硬件有问题吗?但是在主程序里不添加读取接收中断数据的数据就可以正常运行,到底是硬件问题,还是软件不对呢?
非常期望各位高手和朋友给予指点和帮助!
谢谢!非常感谢!拜托了!
点赞
2011-3-2 16:02
7楼
sealfox
在主程序里不添加读取接收中断数据的(数据)就可以正常运行
上面数据两字写错了,应改为语句二字即
在主程序里不添加读取接收中断数据的语句就可以正常运行
点赞
2011-3-2 16:09
8楼
julyfeel
问题找到了,在主程序里少了一个while (1)语句,程序跑飞了,增加该语句后,就一切正常了。
点赞
2011-3-3 18:20
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
为什么更新错误,弄了一下午了还是没有解决
谁能够上传IAR WEARM 5.30
usci-uart 串口通讯问题
飞思卡尔KL25EVK-V1开发板
问大家个问题
不知哪天就用到了
FET430烧录工具烧录芯片时会出现无法下载
请问standalone BSP上跑的是什么系统,谢谢!
ROM的定制
LPC1549_LPCXpresso v2板载仿真器
单片K型热电偶放大与数字转换器MAX6675
MVME5500怎么初始化?
让数码管显示不同数字
有谁知道uCOS-II和CoOS的区别吗?
发一点笑话,让大家放松一下
请帮忙解答一下下面程序
CPLD双积分AD模数转换求助
高质量C语言教程
菜鸟一枚,求指导
PC下的OpenGL跟WINCE下的OpenGL是不是区别很大?整个OpenGL框架是怎么样的?谁封装谁?
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复