写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 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同样遇到了这个问题,不知道该怎么办!

一周热门 更多>