写F767串口程序的时候发现卡在延时函数中,以前在学F103的时候也遇到这样的问题,解决办法如下图,我想问问F767该怎么解决?

2019-07-20 07:02发布

以前在学F103的时候,在串口程序里面用延时的时候会出现卡在延时函数那行代码的这种情况,通过一些途径,找到解决办法如图1所示。现在学F767的时候,也遇到了一样的问题。我在程序中不注释掉那行delay_ms(500);代码的时候,发现程序没法执行到 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);        这行代码。但是我把delay_ms(500)注释掉后,中间加一行空延时,发现可以执行到 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET)这一行指令,因为 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET)是让LED灯亮,所以可以很方便的观察到现象。说明程序就是卡死在了delay_ms(500)这一行指令中了。不知道该怎么解决?原子哥、各路大哥,有能帮着解答一下吗?好糟心啊!难道在串口程序里面没办法延时?还是要用i++这种形式来实现延时?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-20 09:29
天人一口12 发表于 2018-2-2 09:52
我在delay_ms之前写了两行PB0=1和PB1=0,延时之后写了一行PB0=0;串口助手发送数后,PB1亮了,PB0应该是 ...

仿真看看
正点原子
2楼-- · 2019-07-20 11:11
 精彩回答 2  元偷偷看……
天人一口12
3楼-- · 2019-07-20 14:21
正点原子 发表于 2018-2-2 01:16
这个根本不需要延时啊,和延时无关的。你不能执行到,是怎么判别的?

我在延时函数之前写了PB0=1和PB1=0这两行,在延时函数后面写了PB0=0这一行,串口助手发送数以后,PB1亮了,PB0应该延时500ms之后亮,但是实际开发板上现实的结果是PB1会亮,PB0不会亮。而我把delay_ms那个延时函数换成__nop()指令的时候PB0会亮。我以前在F103的时候遇到过这个情况,一个网友指点说把delay.c里面的一行代码注释掉,换成另一行代码就行了,如下面的一幅图。我照做之后果然就好了,现在用F7同样遇到了这个问题,不知道该怎么办!
天人一口12
4楼-- · 2019-07-20 16:32
正点原子 发表于 2018-2-2 01:16
这个根本不需要延时啊,和延时无关的。你不能执行到,是怎么判别的?

我在delay_ms之前写了两行PB0=1和PB1=0,延时之后写了一行PB0=0;串口助手发送数后,PB1亮了,PB0应该是延时500ms后亮,但是实际情况是PB1受控制良了,PB0一直暗着!把delay_ms换成__nop()后,再用串口控制,两个灯都亮了,说明以前用delay_ms的时候灯PB0不亮就是卡在delay那了啊!我以前用F103的时候遇到过这个情况,网友指点按上面的一张图,将delay.c中的一行代码注释掉,换成另一行就可以了!所以想问问F7的该怎么办。
天人一口12
5楼-- · 2019-07-20 18:55
 精彩回答 2  元偷偷看……
castle
6楼-- · 2019-07-21 00:49
请问楼主这个问题解决了吗?我也遇到类似的问题

一周热门 更多>