白丁野老 发表于 2015-11-23 20:17

如何把零散的不用的IO整合在一起,统一操作呢

以STM32为例,在分配完必要的外设后,留有几组零散的不相干的IO,如何把PB4,PB5, PA6,PA8,PC1,PC2,PC3,PC8整合成一个8位的GPIO口,把0X08这个数分配到这几个GPIO口输出?

麦可可 发表于 2015-11-23 22:34

可以用宏定义实现的

blong75 发表于 2015-11-23 22:56

对于你这里所提出的“多个端口赋值”来说,基本上相当于一个无壳的函数。打个比方,例如:
#define SET_PORT_VAL(x) {PTE = x&0x03; PTF = (x>>2)&0x3F;}

冒泡的鱼儿 发表于 2015-11-23 22:59

写一个赋值函数,先把单独的IO提取出来,再合并

sunriselight 发表于 2015-11-24 11:16

P2 |= 0X10;
P3 &= 0X00;
t = P2 | P3;
这样写就可以了吧

葫芦娃75 发表于 2015-11-24 11:19

可以用位域的办法来实现的,用结构体

eggbiscuit 发表于 2015-11-24 11:21


#define GPIO_BIT_0(x) GPIO_SET(PORTB,PB4,x)
#define GPIO_BIT_1(x) GPIO_SET(PORTB,PB5,x)
......
然後寫一個function
void GPIO_SetState(uint8_t Data)
{
GPIO_BIT_0((Data&0x01));
GPIO_BIT_1((Data&0x02));
GPIO_BIT_2((Data&0x04));
.......
}
要用就呼叫
GPIO_SetState(0x55);
大概就是這樣子的方式吧

september7 发表于 2015-11-24 11:25

可以将IO口引脚结构对应到自定义结构中,然后定义不同IO口一个For循环解决。GPIO_WriteBit(GPIOx, GPIO_InitStruct.GPIO_Pin, (BitAction)(dat));

蜕变吧 发表于 2015-11-24 22:59

eggbiscuit 发表于 2015-11-24 11:21

#define GPIO_BIT_0(x) GPIO_SET(PORTB,PB4,x)
#define GPIO_BIT_1(x) GPIO_SET(PORTB,PB5,x)


不错,学习了,这是个 很好的办法。
页: [1]
查看完整版本: 如何把零散的不用的IO整合在一起,统一操作呢