OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10552|回复: 13

用什么函数可以往PA0到PA7输出8个并行数据?

[复制链接]

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-4
在线时间
0 小时
发表于 2013-5-16 08:37:45 | 显示全部楼层 |阅读模式
         u8 t;
         u16 out;
         u8 i=255;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE) ;
        GPIO_InitStructure.GPIO_Pin =
GPIO_Pin_0||GPIO_Pin_1||GPIO_Pin_2||GPIO_Pin_3||GPIO_Pin_4||GPIO_Pin_5||GPIO_Pin_6||GPIO_Pin_7; //PA部分 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       SystemInit();  //系统时钟设置
delay_init(72);     //延时初始化
NVIC_Configuration();

        LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();//初始化与按键连接的硬件接口
        while(1)
{
t=KEY_Scan();//得到键值
  if(t)
{   
switch(t)
{  
case 1:
                                       while(i)
                                         {
 LED0=!LED0;
GPIO_Write(GPIOA,out);//我想请教一下在这里使用对不对?我配置PA0到PA7为推晚输出,会不会影响到PA8到PA15?(这8个引脚另作它用)如果这里不能这输出,怎样用什么函数可以往PA0到PA7输出8个并行数据? 
 delay_ms(500);
                                         i--;

                                         } break;
case 2:

                                         while(1)
                                       {
                                          LED1=!LED1;
                                         GPIO_Write(GPIOA,out);//我想请教一下在这里使用对不对?我配置PA0到PA7为推晚输出,会不会影响到PA8到PA15?如果这里不能这输出,怎样用什么函数可以往PA0到PA7输出8个并行数据?
 delay_ms(500);
                                         i--;
                                         }break;
}
}else delay_ms(10); 
}  

 }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-5-16
在线时间
2 小时
发表于 2013-5-16 09:09:23 | 显示全部楼层
看资料里讲GPIO访问是16位的,如果PA8~PA15在此项目中没用到,或者全部是输入或其他外设端口的话应该可以这样用。保险点的方法可以用Reset和Set两条指令来代替,Reset数据取反。
可能这是笨办法,期待高人指点。
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-16 09:39:31 | 显示全部楼层
回复【2楼】jerry_wj:
---------------------------------
GPIO_WriteBit()是一个输出一位的函数!我想并行输出低8位,且不影响高8位,用GPIO_Write()显然不行!
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-16 09:47:01 | 显示全部楼层
http://bbs.ednchina.com/BLOG_ARTICLE_283325.HTM
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2013-5-16 10:00:06 | 显示全部楼层
直接操作寄存器即可
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-16 10:17:36 | 显示全部楼层
GPIOA->ODR=(GPIOA->ODR&0XFF00)|0XYY;

0XYY,为你要输出的数据。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-16 10:24:31 | 显示全部楼层
---------------------------------
回复【6楼】正点原子:
---------------------------------
如果我想操控GPOIA的PA0——PA7是不是这样了?

GPIOA->BSRR = 0x00FF0000 | ( cOutByte <<8 );
行不行?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-16 10:25:22 | 显示全部楼层
回复【7楼】酸橙:
---------------------------------
这是快速IO设置,比较麻烦,还不如用ODR。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-16 10:40:11 | 显示全部楼层
u8 out;
GPIOA->ODR=(GPIOA->ODR&0XFF00)|0XYY; 

0XYY,为你要输出的数据。
out可发代替OXYY吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-16 14:13:19 | 显示全部楼层
可以。
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-5-16
在线时间
2 小时
发表于 2013-5-16 15:18:15 | 显示全部楼层
回复【3楼】酸橙:
---------------------------------
我没表达清楚,我的想法如下,不知道行不行...
GPIO_ResetBits(GPIOA,(out^0xFF)&0xFF);
GPIO_SetBits(GPIOA,out&0xFF);
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-5-16
在线时间
2 小时
发表于 2013-5-16 15:19:22 | 显示全部楼层
如果变量out高8位确定为0的话可以去掉"&0xFF" 。
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-16 16:37:34 | 显示全部楼层
回复【12楼】jerry_wj:

如果变量out高8位确定为0的话可以去掉"&0xFF" 。

---------------------------------
只看清了一点,对这几个函数理解不够 深啊
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-16 17:00:44 | 显示全部楼层
都感谢各位了,我想我对GPIO有的更深的理解了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 04:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表