OpenEdv-开源电子网

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

跑马灯实验寄存器版本疑问

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-7-24
在线时间
1 小时
发表于 2018-8-17 11:00:30 | 显示全部楼层 |阅读模式
1金钱
while(1)
        {
                GPIOA->ODR|=1<<8;
                GPIOD->ODR|=1<<2;
                delay_ms(500);
               
                GPIOA->ODR|=~(1<<8);
                GPIOD->ODR|=~(1<<2);
                delay_ms(500);
        }
上面的代码是主函数循环中的代码,GPIOA->ODR使用或等于,下载程序到开发板灯不亮。
若去掉或,改成如下所示,跑马灯就能实现,这是为什么?原子哥在视频中讲的就是加上或。
while(1)
        {
                GPIOA->ODR=1<<8;
                GPIOD->ODR=1<<2;
                delay_ms(500);
               
                GPIOA->ODR=~(1<<8);
                GPIOD->ODR=~(1<<2);
                delay_ms(500);
        }

最佳答案

查看完整内容[请看2#楼]

PA8设置成了推挽输出。 一个端口可以输出高电平,也可以输出低电平, 而GPIOA->ODR|=1
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-17 13:56:33 | 显示全部楼层
while(1)
        {
                GPIOA->ODR|=1<<8;
                GPIOD->ODR|=1<<2;
                delay_ms(500);
               
                GPIOA->ODR|=~(1<<8);   <<<<<<---- 这两句错了
                GPIOD->ODR|=~(1<<2);   <<<<<<----
                delay_ms(500);
        }

应该是
                GPIOA->ODR &=~(1<<8);   
                GPIOD->ODR &=~(1<<2);   


回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-8-17 11:00:31 | 显示全部楼层
PA8设置成了推挽输出。
一个端口可以输出高电平,也可以输出低电平,
而GPIOA->ODR|=1<<8;这个表达式就把PA8设置成了在空闲的时候输出高电平;
GPIOA->ODR|=0<<8;这个表达式,把PA8设置成了在空闲的时候输出低电平;
或等于的效果是操作指定的位,而不干扰其它位
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2015-9-28
在线时间
5 小时
发表于 2018-8-17 12:17:43 | 显示全部楼层
支持分享,赞
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-8-17 14:15:56 | 显示全部楼层
楼上正解,设置高电平 要用 |=  设置低电平 要用&=
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-7-24
在线时间
1 小时
 楼主| 发表于 2018-8-18 08:35:37 | 显示全部楼层
edmund1234 发表于 2018-8-17 13:56
while(1)
        {
                GPIOA->ODR|=1

老哥你说对了,不过不知道为什么我打开之后最佳答案已经给了那个人了,对不起
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 15:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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