你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F7 GPIOD分开控制

[复制链接]
biiii 提问时间:2018-3-15 09:57 /
GPIOD口的0-6用在译码器上输出单个脉冲循环 原理图上GPIO0空了 就用了GPIO1-6           u8 i,j;
                for(i=0;i<3;i++)       //译码器的片选
                {
                       
                        for(j=0;j<16;j++)   
                        {
                                GPIOD->ODR =2*i + 16*j;
                                delay_us(100);                  
                        }


GPIO9-15另外单独控制  如何写不受影响

试了下GPIOD->ODR=(GPIOD->ODR & 0xFE00) | (i + 16*j);  译码器有些管脚就无输出





收藏 评论6 发布时间:2018-3-15 09:57

举报

6个回答
回答时间:2018-3-15 10:04:59
楼主从你的代码分析,你操作的是P0-P15,但是你的P9-P15又是不变的。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

bargagebaobei 回答时间:2018-3-15 10:05:38
首先   for(j=0;j<16;j++)    这个循环不对 你是想0-6还是想1-6 请楼主写清楚
其次 单独控制可以让引脚与xxxxxxx111111111B进行或运算

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

MrJiu 回答时间:2018-3-15 11:00:49
寄存器操作,建议用原子操作的寄存器。。。那个更好用。。。。BSRR和BRR,当然了,F7叫法可能不一样,但是效果是一样的。。。。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

toofree 回答时间:2018-3-15 11:44:47
本帖最后由 toofree 于 2018-3-15 11:46 编辑

怎么感觉你用两个号在问同一个问题呢

https://www.stmcu.org.cn/module/foru ... 8355&fromuid=307297

GPIOD->ODR = (GPIOD->ODR & 0xFE00) | (a & 0x1FF);
GPIOD->ODR = (GPIOD->ODR & 0x01FF) | (b & 0xFE00);

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

biiii 回答时间:2018-3-15 13:41:16
toofree 发表于 2018-3-15 11:44
怎么感觉你用两个号在问同一个问题呢

https://www.stmcu.org.cn/module/foru ... 8355&fromuid=307297

问题是一样的问题,人不是同一个人啦
xmstudio 回答时间:2018-3-15 16:58:59
本帖最后由 xmstudio 于 2018-3-15 17:03 编辑

STM32应该都有BSRR这个寄存器吧,低16位置1代表将对应IO口置1,高16位置1代表将对应的IO口置0,其他IO口不变 snipaste_20180315_170248.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版