打印

gpio的用法!?

[复制链接]
3570|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AlmostLover|  楼主 | 2009-8-29 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知stm32的io如何配置成8位总线?
比如pa1-pa8,用哪个函数?
沙发
mcuisp| | 2009-8-29 11:49 | 只看该作者
STM32只有高端的才有外部总线。
一般的LCD屏、8位SRAM等速度要求不高的总线器件,是可以用GPIO来模拟8位总线的。
函数得自己写,呵呵。

使用特权

评论回复
板凳
AlmostLover|  楼主 | 2009-8-29 12:30 | 只看该作者
谢谢2楼的回答!
但找固件库中gpio操作的
GPIO_Write();只能16bit
GPIO_WriteBit()只能某几个bit位同时置位或清零
那我8位总线不如要输出:0x55
难道是:
GPIO_WriteBit(GPIOA,GPIO_1|GPIO_3|GPIO_5|GPIO_7,Bit_RESET)
GPIO_WriteBit(GPIOA,GPIO_2|GPIO_4|GPIO_6|GPIO_8,Bit_SET)

使用特权

评论回复
地板
mcuisp| | 2009-8-29 12:46 | 只看该作者
No,这个不能用固件库了。
要用BitBand进行加速。再利用GPIOx_BSRR寄存器的特性,同时完成对需要的8个IO进行清零/置位。

使用特权

评论回复
5
AlmostLover|  楼主 | 2009-8-29 13:43 | 只看该作者
能否详细指教了?

使用特权

评论回复
6
香水城| | 2009-8-29 22:06 | 只看该作者
如果要图方便的话,可以直接对ODR寄存器操作。

以操作PA0~PA7为例,如果PA8~PA15是输入模式,则可以直接输出数据:
    GPIOA->ODR = data;

如果PA8~PA15中有端口为输出模式,则需要先读出这些端口的状态再输出:
    GPIOA->ODR = (data & 0xFF) | (GPIOA->ODR & 0xFF00);

使用特权

评论回复
7
火箭球迷| | 2009-8-29 23:51 | 只看该作者
学习中。。。

使用特权

评论回复
8
mcuisp| | 2009-8-30 00:14 | 只看该作者
本帖最后由 mcuisp 于 2009-8-30 00:16 编辑

心情特好的时候,我或许可以贡献一下偶的模拟8bit总线(虽然也没啥宝贝的,不过总归是源码是不、、、)。充分利用了STM32的优点。
驱动LCD模块啥的,速度还挺般配的,哈哈。
得益于ARM贡献的Cotex-M3和ST贡献的STM32,都是精品呀。

使用特权

评论回复
9
lxyppc| | 2009-8-30 23:50 | 只看该作者
如果要图方便的话,可以直接对ODR寄存器操作。

以操作PA0~PA7为例,如果PA8~PA15是输入模式,则可以直接输出数据:
    GPIOA->ODR = data;

如果PA8~PA15中有端口为输出模式,则需要先读出这些端口的状态再输出:
...
香水城 发表于 2009-8-29 22:06


如果楼主肯再研究研究BSRR的话,会发现这样写也是可以的,速度会更快一点
GPIOA->BSRR = ((u32)0xFF<<16) | data

使用特权

评论回复
10
yulri| | 2010-12-11 16:31 | 只看该作者
学习了!

使用特权

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

本版积分规则

4

主题

17

帖子

1

粉丝