OpenEdv-开源电子网

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

新手求救

[复制链接]

11

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-7-12
在线时间
46 小时
发表于 2017-8-9 16:17:33 | 显示全部楼层 |阅读模式
while(1)
{
  u32 word=11111010;
switch(word&(0x01<<0))
  {
  case 0:GPIO_ResetBits(GPIOA,GPIO_Pin_1);
     break;
  case 1:GPIO_SetBits(GPIOA,GPIO_Pin_1);
     break;
  }
  
switch(word&(0x01<<1))
  {
  case 0:GPIO_ResetBits(GPIOA,GPIO_Pin_2);
      break;
  case 1:GPIO_SetBits(GPIOA,GPIO_Pin_2);
      break;
  }
  
switch(word&(0x01<<2))
  {
  case 0:GPIO_ResetBits(GPIOA,GPIO_Pin_3);
      break;
  case 1:GPIO_SetBits(GPIOA,GPIO_Pin_3);
      break;
  }
  switch(word&(0x01<<3))
    {
   case 0: GPIO_ResetBits(GPIOA,GPIO_Pin_4);
          break;
   case 1: GPIO_SetBits(GPIOA,GPIO_Pin_4);
          break;
    }
switch(word&(0x01<<4))
  {
  case 0:GPIO_ResetBits(GPIOA,GPIO_Pin_5);
      break;
  case 1:GPIO_SetBits(GPIOA,GPIO_Pin_5);
      break;
  }
  
switch(word&(0x01<<5))
  {
  case 0:GPIO_ResetBits(GPIOA,GPIO_Pin_6);
      break;
  case 1:GPIO_SetBits(GPIOA,GPIO_Pin_6);
      break;
  }
switch(word&(0x01<<6))
  {
  case 0:GPIO_ResetBits(GPIOA,GPIO_Pin_7);
      break;
  case 1:GPIO_SetBits(GPIOA,GPIO_Pin_7);
      break;
  }
  
switch(word&(0x01<<7))
  {
  case 0:GPIO_ResetBits(GPIOA,GPIO_Pin_8);
      break;
  case 1:GPIO_SetBits(GPIOA,GPIO_Pin_8);
      break;
  }
}
这段程序,不管我怎么样改变word的值,PA4和PA5的电平跟预期总是相反的,如上所示,PA4和PA5应该为高电平,但是实际烧入单片机后测得为低电平,特来求助各位
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-7-12
在线时间
46 小时
 楼主| 发表于 2017-8-9 16:43:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-8-15
在线时间
11 小时
发表于 2017-8-15 20:27:47 | 显示全部楼层
首先,我先提出解决方法,你将语句u32 word=11111010替换为 u32 word = 0xFA,然后再测试下是不是对了。你的意思是想通过0-7位来控制PA1-PA8引脚电平的高低
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-8-15
在线时间
11 小时
发表于 2017-8-15 20:36:29 | 显示全部楼层
接下来,我说一下你的思路:你是想通过0-7位来控制PA1-PA8引脚的电平高低。通过语句word&(0x01<<a),来判断第a位是0还是1。这个思路是对的,并且在控制多设备时也是可取的。但是你对word的定义错了,按照你的定义u32 word = 11111010;是将word定义为十进制数11111010,但这个数的二进制形式为101010011000101001100010,而对应PA4、PA5的位分别是0、1,这也就是问什么会出现PA4和PA5电平不一样。
回复 支持 反对

使用道具 举报

11

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-7-12
在线时间
46 小时
 楼主| 发表于 2017-8-15 21:56:57 | 显示全部楼层
duruedubbie 发表于 2017-8-15 20:36
接下来,我说一下你的思路:你是想通过0-7位来控制PA1-PA8引脚的电平高低。通过语句word&(0x01

给力   懂了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 17:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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