打印
[STM32F4]

学习的有点晚,请大家谅解

[复制链接]
2289|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yagj|  楼主 | 2017-7-23 01:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想问下大家关于两个函数的问题
void GPIO_group_OUT(_gpio_group *group,u16 outdata);
void GPIO_bits_OUT(GPIO_TypeDef* GPIOx, u8 start_bit, u8 bit_size,u16 outdata);
这个是common.h文件里面的函数声明
沙发
yagj|  楼主 | 2017-7-23 01:53 | 只看该作者
问题来源,我参照"1 LED跑马灯.rar"这个文件用正点的库函数工程模板文件写了个LED跑马灯,结果出错了,如图
我写的一份代码放在"Desktop.rar",因为源文件比较大,所以只放了部分

1500741694(1).jpg (84.32 KB )

1500741694(1).jpg

1 LED跑马灯.rar

2.12 MB

Desktop.rar

868 Bytes

使用特权

评论回复
板凳
yagj|  楼主 | 2017-7-23 01:54 | 只看该作者
我觉得应该是哪个函数的问题,所以很是迷茫

使用特权

评论回复
地板
xyz549040622| | 2017-7-23 06:41 | 只看该作者
LED0=0;
STM32不支持这样的操作的,这是51过来的习惯,不支持直接赋值。

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
icecut + 10 神马都是浮云
5
戈卫东| | 2017-7-23 08:30 | 只看该作者
比较一般的搞法,是定义一个看起来像函数的宏:
#define LED1_ON()     GPIOA->BSRR = 1ul << 8
#define LED1_OFF()    GPIOA->BSRR = 1ul << (16 + 8)
用的时候这么写
   LED1_ON();
   LED1_OFF();

使用特权

评论回复
6
yagj|  楼主 | 2017-7-23 09:03 | 只看该作者
xyz549040622 发表于 2017-7-23 06:41
LED0=0;
STM32不支持这样的操作的,这是51过来的习惯,不支持直接赋值。

可是我看的那份,他就是直接赋值的,这就很伤了

使用特权

评论回复
7
xyz549040622| | 2017-7-23 09:06 | 只看该作者
换个操作IO的教程看看。

使用特权

评论回复
8
yagj|  楼主 | 2017-7-23 09:10 | 只看该作者
戈卫东 发表于 2017-7-23 08:30
比较一般的搞法,是定义一个看起来像函数的宏:
#define LED1_ON()     GPIOA->BSRR = 1ul BSRR = 1ul  ...

这是寄存器的写法,是么,利用位指来写的

使用特权

评论回复
9
Xflyan| | 2017-7-23 10:36 | 只看该作者
估计是想用 BITBAND 操作,但是又没搞明白,没人那么有空给你看源文件的。

使用特权

评论回复
10
yagj|  楼主 | 2017-7-23 11:29 | 只看该作者
Xflyan 发表于 2017-7-23 10:36
估计是想用 BITBAND 操作,但是又没搞明白,没人那么有空给你看源文件的。

想学习stm32自己编程 ,但是感觉自己好菜

使用特权

评论回复
11
LIU1514| | 2017-7-23 14:25 | 只看该作者
一起学stm32—————基础篇4(点亮led)
https://bbs.21ic.com/icview-1862128-1-1.html
(出处: 21ic电子技术论坛)

使用特权

评论回复
12
yagj|  楼主 | 2017-7-23 14:32 | 只看该作者
LIU1514 发表于 2017-7-23 14:25
一起学stm32—————基础篇4(点亮led)
https://bbs.21ic.com/icview-1862128-1-1.html
(出处: 21ic电子 ...

谢啦

使用特权

评论回复
13
huarana| | 2017-7-24 16:53 | 只看该作者
你要用正点原子的教程 也要好好看看人家的教材啊然后再照着写就可以了。

使用特权

评论回复
14
gujiahui| | 2017-7-24 17:01 | 只看该作者
下载了你的工程文件,没有你说的那种问题啊,你这种写法虽然是常规的51单片机方式,但是没感觉到有问题啊

使用特权

评论回复
15
六月冬凌| | 2017-7-24 17:26 | 只看该作者
把跑马灯代码和你的代码下载下来看了下。
首先跑马灯源代码中没有调用GPIO_group_OUT、 GPIO_bits_OUT这两个函数,所以你的问题不在这2个函数上面。
你的main.c包含了4个头文件:delay.h,sys.h,usart.h,led.h。不知道你哪一个头文件中包含了#include “common.h”?
如果没有包含,编译就会出错。因为你只宏定义了#define LED0 PEOUT(3),编译器不知道PEOUT3是个什么东东,直接赋值就会出错。
即使包含了#include “common.h”,如果你没有对common.h中的内容修改,编译还是有可能会出错,因为common.h有对PEout(n)的宏定义,而没有对PEOUT(n)的宏定义。编译器还是不知道PEOUT是什么东东。
另外LED0 == 1是一个表达式,不是赋值语句

使用特权

评论回复
16
yagj|  楼主 | 2017-7-25 10:48 | 只看该作者
六月冬凌 发表于 2017-7-24 17:26
把跑马灯代码和你的代码下载下来看了下。
首先跑马灯源代码中没有调用GPIO_group_OUT、 GPIO_bits_OUT这两 ...

那个定义在sys.h文件里有

使用特权

评论回复
17
yagj|  楼主 | 2017-7-25 10:52 | 只看该作者
代码

1500950953(1).jpg (71.33 KB )

1500950953(1).jpg

sys.rar

1.86 KB

使用特权

评论回复
18
六月冬凌| | 2017-7-25 11:15 | 只看该作者

上面回复已经说的很清楚了,PEOUT和PEout不是同一个宏定义。
你把#define LED0 PEOUT(3)改成#define LED0 PEout(3)试试

使用特权

评论回复
19
icecut| | 2017-7-25 12:08 | 只看该作者
要不看看21ic公开课的教程?

使用特权

评论回复
20
@若水| | 2017-7-25 16:57 | 只看该作者
看看论坛中的教程

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

33

帖子

0

粉丝