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

[复制链接]
 楼主| 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

1 LED跑马灯.rar

2.12 MB, 下载次数: 9

Desktop.rar

868 Bytes, 下载次数: 3

 楼主| yagj 发表于 2017-7-23 01:54 | 显示全部楼层
我觉得应该是哪个函数的问题,所以很是迷茫
xyz549040622 发表于 2017-7-23 06:41 | 显示全部楼层
LED0=0;
STM32不支持这样的操作的,这是51过来的习惯,不支持直接赋值。

评分

参与人数 1威望 +10 收起 理由
icecut + 10 神马都是浮云

查看全部评分

戈卫东 发表于 2017-7-23 08:30 | 显示全部楼层
比较一般的搞法,是定义一个看起来像函数的宏:
#define LED1_ON()     GPIOA->BSRR = 1ul << 8
#define LED1_OFF()    GPIOA->BSRR = 1ul << (16 + 8)
用的时候这么写
   LED1_ON();
   LED1_OFF();
 楼主| yagj 发表于 2017-7-23 09:03 | 显示全部楼层
xyz549040622 发表于 2017-7-23 06:41
LED0=0;
STM32不支持这样的操作的,这是51过来的习惯,不支持直接赋值。

可是我看的那份,他就是直接赋值的,这就很伤了
xyz549040622 发表于 2017-7-23 09:06 | 显示全部楼层
换个操作IO的教程看看。
 楼主| yagj 发表于 2017-7-23 09:10 | 显示全部楼层
戈卫东 发表于 2017-7-23 08:30
比较一般的搞法,是定义一个看起来像函数的宏:
#define LED1_ON()     GPIOA->BSRR = 1ul BSRR = 1ul  ...

这是寄存器的写法,是么,利用位指来写的
Xflyan 发表于 2017-7-23 10:36 | 显示全部楼层
估计是想用 BITBAND 操作,但是又没搞明白,没人那么有空给你看源文件的。
 楼主| yagj 发表于 2017-7-23 11:29 | 显示全部楼层
Xflyan 发表于 2017-7-23 10:36
估计是想用 BITBAND 操作,但是又没搞明白,没人那么有空给你看源文件的。

想学习stm32自己编程 ,但是感觉自己好菜
LIU1514 发表于 2017-7-23 14:25 | 显示全部楼层
一起学stm32—————基础篇4(点亮led)
http://bbs.21ic.com/icview-1862128-1-1.html
(出处: 21ic电子技术论坛)
 楼主| yagj 发表于 2017-7-23 14:32 | 显示全部楼层
LIU1514 发表于 2017-7-23 14:25
一起学stm32—————基础篇4(点亮led)
http://bbs.21ic.com/icview-1862128-1-1.html
(出处: 21ic电子 ...

谢啦
huarana 发表于 2017-7-24 16:53 | 显示全部楼层
你要用正点原子的教程 也要好好看看人家的教材啊然后再照着写就可以了。
gujiahui 发表于 2017-7-24 17:01 | 显示全部楼层
下载了你的工程文件,没有你说的那种问题啊,你这种写法虽然是常规的51单片机方式,但是没感觉到有问题啊
六月冬凌 发表于 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是一个表达式,不是赋值语句
 楼主| yagj 发表于 2017-7-25 10:48 | 显示全部楼层
六月冬凌 发表于 2017-7-24 17:26
把跑马灯代码和你的代码下载下来看了下。
首先跑马灯源代码中没有调用GPIO_group_OUT、 GPIO_bits_OUT这两 ...

那个定义在sys.h文件里有
 楼主| yagj 发表于 2017-7-25 10:52 | 显示全部楼层
代码
1500950953(1).jpg

sys.rar

1.86 KB, 下载次数: 2

六月冬凌 发表于 2017-7-25 11:15 | 显示全部楼层

上面回复已经说的很清楚了,PEOUT和PEout不是同一个宏定义。
你把#define LED0 PEOUT(3)改成#define LED0 PEout(3)试试
icecut 发表于 2017-7-25 12:08 | 显示全部楼层
要不看看21ic公开课的教程?
@若水 发表于 2017-7-25 16:57 | 显示全部楼层
看看论坛中的教程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

33

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部