[求助] 如何对多个管脚操作

feiante   2012-8-2 15:42 楼主
我想问下,用库函数,如何能够对一组管脚进行操作,比如直接把数据给GPIOB(其中包括GPIO0--GPIO7),难道还要一个位一个位的处理吗?GPIOPinWrite好像不行。

回复评论 (8)

用GPIOPinWrite可以直接对多个PIN操作:
例如
1. 对PORTB的0,1管脚设置1的操作可以这样写:
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_0|GPIO_PIN_1)
2. 对PORTB的管脚0,1设置成0,1
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_1)
点赞  2012-8-2 16:36

回复 楼主 feiante 的帖子

GPIOPinWrite最后的一个参数是一个实际8位有效的变量,每一位对应的是P7-P0的值。如果要对PB7和PB6输出高,应为GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6|GPIO_PIN_7, 0xC0),而不是GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6|GPIO_PIN_7, 1)。在宏定义里GPIO_PIN_7为0x80,GPIO_PIN_6为0x40。所以也可以写成GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_6|GPIO_PIN_7)。

[ 本帖最后由 ultrabenz 于 2012-8-2 17:25 编辑 ]
点赞  2012-8-2 17:24
哦,原来是这样,谢谢啦。
那么如果像液晶屏,数据口是8位,输出的数据假如是data,那么是不是要一位一位的判断data是0还是1,然后在按上面的方式写呢?
还有个疑问是:为什么我每次给某位写1时用GPIO_PIN_X,写0时是~GPIO_PIN_X才正确,不能直接是“0”或“1”
点赞  2012-8-3 08:26

回复 4楼 feiante 的帖子

在 GPIO.h 中是这么定义的。
#define GPIO_PIN_0              0x00000001  // GPIO pin 0
#define GPIO_PIN_1              0x00000002  // GPIO pin 1
#define GPIO_PIN_2              0x00000004  // GPIO pin 2
#define GPIO_PIN_3              0x00000008  // GPIO pin 3
#define GPIO_PIN_4              0x00000010  // GPIO pin 4
#define GPIO_PIN_5              0x00000020  // GPIO pin 5
#define GPIO_PIN_6              0x00000040  // GPIO pin 6
#define GPIO_PIN_7              0x00000080  // GPIO pin 7
点赞  2012-8-3 15:10
恩,谢谢,版主回答了我第二个问题。
第一个问题如何处理比较方便点呢?
不会是GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_7|GPIO_PIN_6......|GPIO_PIN_0,data)?
点赞  2012-8-3 17:15
要沉下去了,、、、、、
点赞  2012-8-5 14:04

回复 6楼 feiante 的帖子

就是这样的 GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_7|GPIO_PIN_6......|GPIO_PIN_0,data)
点赞  2012-8-5 14:29
非常感谢!!!
点赞  2012-8-6 08:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复