在学习STM32的过程中,难免会遇到各式各样的问题。遇到问题别害怕,这是正常的,每个人都会犯错,但是要记住一点:学会找问题的解决方式,比如说:百度、博客、论坛等等,这些都是问题解决的战场,记住一点,千万不要做伸手党!不要一遇到问题就退缩!只有你真正的动手去分析问题,才能知道问题出在哪,才能在后面的学习过程中再次避免发生类似的错误!真的动手去解决问题了,你才能印象深刻。
本人也是一名小白,刚刚开启STM32的学习之路,之前也没有51的学习经验,编程知识也不好,一切都是从零开始。但是没关系,现在学习也不晚,向着目标努力就可以!
必踩的坑之一
在编写函数时,变量的定义一定在函数的最前面,即变量要在可执行变量之前定义
通过上面这张图我们可以看到,结构体变量的定义是在代码的中间部分,这样的话编译时就会报错,提示:declaration may not appear after executable statement in block GPIO_InitTypeDef GPIO_InitStruct;
上面错误信息的意思是: 声明可能不会出现在GPIO_InitTypeDef的可执行语句之后。
变成我们能理解的语言表述:GPIO_InitStruct 这个变量要定义在可执行程序之前定义
产生这个问题的原因:早期的C语言定义的:变量要定义在可执行程序的最前面
比较早的编译器也会出现这样的提示。但是我们现在学习C/C++之后,我们会发现,变量的定义是哪里需要哪里定义,如果在最前面定义感觉好麻烦,对于小白来说对代码的理解不够友好。
不过现在很多编译器已经支持C99标准了,现在这个问题也被解决了,最新的编译器也解决了这个问题。
同样 keil5 也支持C99的标准,也可以解决这个问题
解决方法如下:
完成这三步,再编译一下就不会出现报错,编译通过!