写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条回答
天人一口12
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的该怎么办。

一周热门 更多>