OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9417|回复: 25

简单的流水灯 为什么编译不过?

[复制链接]

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
发表于 2014-3-16 14:41:27 | 显示全部楼层 |阅读模式
 

本人新手    想自己写一下led.c 和 头文件   并在给定的工程中替换原子赠送的代码   但是提示..\HARDWARE\LED\led.c(9): error:  #268: declaration may not appear after executable statement in block  这是led.c的代码
#include "led.h"

void LED_Init()

{

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
  
 GPIO_InitTypeDef  GPIO_InitStr;  
 GPIO_Init(GPIOB,&GPIO_InitStr); 
 GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_InitStr.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;
 GPIO_SetBits(GPIOB,GPIO_Pin_5);      


 GPIO_Init(GPIOE,&GPIO_InitStr);   
 GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;
 GPIO_SetBits(GPIOE,GPIO_Pin_5);
}



头文件比较简单  是没问题的

#ifndef _LED_H_
#define _LED_H_
#include "sys.h"
#define LED0 PBout(5)
#define LED1 PEout(5)
void LED_Init(void)
#endif



还有我本想自己建一个工程的  但是看了好几遍视频就是不行   总是提示main.c: Error: command-line:  #992: invalid macro definition: STM32F10X_HD.USE_STDPERIPH_DRIVER  结果我重装了一边4.7  但是还是提示  所以我用了原子的工程  双击之后删除了HARDWARE 自己写了led.c和led.h 重新修改了路径但是会提示上边的在执行的部分未出现声明的变量  求解释~  在线等!!!!!

1369813157  衣冠民
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-3-17
在线时间
0 小时
发表于 2014-3-17 10:04:01 | 显示全部楼层
如果你用的是KEIL,要用标准C,要把变量定义放在函数的前面才行。你用IAR就不用了,
世上没有什么niuB的人,只有极致认真的完美主义
回复 支持 1 反对 0

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13118
金钱
13118
注册时间
2012-11-26
在线时间
3813 小时
发表于 2014-3-16 14:45:12 | 显示全部楼层
我就不评价 void LED_Init()  这个里面的内容了

呵呵。。。
 
楼主还是对照例程好好看看吧
学无止境
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 14:46:00 | 显示全部楼层
回复【楼主位】衣冠民:
---------------------------------
头文件中void LED—Init(void);   有分号
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 14:48:41 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
您好   能不能讲的详细点  初始化端口、时钟  难道还要初始化别的?
1369813157  衣冠民
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13118
金钱
13118
注册时间
2012-11-26
在线时间
3813 小时
发表于 2014-3-16 14:51:16 | 显示全部楼层
回复【4楼】衣冠民:
---------------------------------
自己仔细比对下   是怎么初始化IO口的吧!
学无止境
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 14:52:18 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
思路有了  也会组织代码了  还看视频那是浪费时间   视频不是葵花宝典  还是要练习     请问你能不能指点一下   或者说你遇到同样问题时你一般会怎样去解决? 当然除了看视频
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 14:55:25 | 显示全部楼层
回复【5楼】jermy_z:
---------------------------------
难道就是因为把GPIO_InitTypeDef  GPIO_InitStrure; 改为了GPIO_InitTypeDef  GPIO_InitStr?   我其实想验证的也是结构体变量的声明   你能不能直接解释一下?  麻烦您费心   谢谢
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 15:06:31 | 显示全部楼层
回复【6楼】衣冠民:
---------------------------------
好吧  算你狠  整天说的先声明后使用  居然还会漏内容    交流的意思是大神给菜鸟解惑     我理解的不够透彻才会有问题   而且我也验证过了   你别说你没犯过这种低级错误 “每个大神都是从菜鸟开始的”如果我接触的时间跟你一样多或许我还可以知道你呢。。。
1369813157  衣冠民
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-16 16:02:04 | 显示全部楼层
回复【楼主位】衣冠民:
---------------------------------
已经提示你不认识这个声明了 检查一下是不是哪里错了。
USE_STDPERIPH_DRIVER,STM32F10X_HD
回复 支持 反对

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2014-3-16 16:47:24 | 显示全部楼层
回复【楼主位】衣冠民:
---------------------------------
GPIO_InitTypeDef  GPIO_InitStr;
要放在 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);前面
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 19:44:51 | 显示全部楼层
回复【10楼】2449164582:
---------------------------------谢谢你   在你恢复之前我已经找到原因了
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 19:45:55 | 显示全部楼层
回复【9楼】ricefat:
---------------------------------
嗯   好的  我再试试
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-16 19:59:41 | 显示全部楼层
回复【9楼】ricefat:
---------------------------------
您是解惑老师   我能不能问一下  我的c一般般    看程序都看的不顺利更别说编程序   我以前51学得汇编  你看我是不是应该从寄存器入手(不知道是不是一种畏难的逃避心理)   您是老师  求指导   求建议
1369813157  衣冠民
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-16 20:20:14 | 显示全部楼层
回复【13楼】衣冠民:
---------------------------------
USE_STDPERIPH_DRIVER,STM32F10X_HD
这两个之间是英文逗号,不是句号要注意。

库函数本质也是寄存器,只不过官方都给你封装好了,C语言我也不好,只能说C语言这一关还是要过,这是基础。
库函数的各种写法是有一定规律的,多看看官方历程,从最简单的GPIO看 就能慢慢明白用法
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-17 09:06:03 | 显示全部楼层
回复【13楼】衣冠民:
---------------------------------
1、同意13楼老师的说法,程序最终的结果都是操作寄存器的
2、寄存器操作的话就要你自己去了解各个寄存器和寄存器各位的作用了,这样比较麻烦。
3、库函数的话ST工程师已经给封装好了,你只要调用相关的函数即可实现
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-17 10:14:43 | 显示全部楼层
回复【14楼】ricefat:
---------------------------------
谢谢您的指导   我会努力让自己变得优秀的
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-17 10:15:47 | 显示全部楼层
回复【15楼】Badu_Space:
---------------------------------
谢谢您的解答  受教了
1369813157  衣冠民
回复 支持 反对

使用道具 举报

15

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2014-3-2
在线时间
2 小时
 楼主| 发表于 2014-3-17 10:17:49 | 显示全部楼层
回复【16楼】sococome:
---------------------------------
嗯   是标准c   因为没用结构体写过什么程序   所以忽视了先声明后使用的原则  或者说书上的东西会点   但是实践的时候会遇到各种问题   谢谢您的帮助  我以后应该多实践才行
1369813157  衣冠民
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-5-20
在线时间
0 小时
发表于 2015-6-3 17:04:02 | 显示全部楼层
楼书   原子赠送的程序  发一下吧
回复 支持 反对

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
发表于 2016-11-10 17:39:48 | 显示全部楼层
包含个头文件stm32f10x.h看看
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2017-7-22
在线时间
10 小时
发表于 2017-8-1 16:36:45 | 显示全部楼层
变量的声明,不可放在可执行语句的后面,必须在主函数开头声明变量。
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-4-22
在线时间
3 小时
发表于 2018-5-1 20:17:30 | 显示全部楼层
1.PNG
按照上图就可以了,具体为什么,我也不知道
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-4-22
在线时间
3 小时
发表于 2018-5-1 20:20:05 | 显示全部楼层
2449164582 发表于 2014-3-16 16:47
回复【楼主位】衣冠民:
---------------------------------
GPIO_InitTypeDef  GPIO_InitStr;
要 ...

请教一下,为什么要放到前面
回复 支持 反对

使用道具 举报

8

主题

570

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2914
金钱
2914
注册时间
2016-5-13
在线时间
184 小时
发表于 2018-5-2 12:27:48 | 显示全部楼层
wdzxh 发表于 2018-5-1 20:20
请教一下,为什么要放到前面

声明变量要放在调用函数之前。比如:
void abc(void){
fun_c();
int a=0;
}
一般要这样写:
void abc(void){
int a=0;
fun_c();
}
反正在一个函数里创建临时变量都放在最前面就ok了。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2018-5-2 18:23:52 | 显示全部楼层
wdzxh 发表于 2018-5-1 20:20
请教一下,为什么要放到前面

这个应该和编译器有关
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 03:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表