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

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

查看全部评分

琦子 回答时间: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

查看全部评分

七哥 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版