biiii 发表于 2018-3-15 09:57:22

STM32F7 GPIOD分开控制

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);译码器有些管脚就无输出





发表于 2018-3-15 10:04:59

楼主从你的代码分析,你操作的是P0-P15,但是你的P9-P15又是不变的。

bargagebaobei 发表于 2018-3-15 10:05:38

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

MrJiu 发表于 2018-3-15 11:00:49

寄存器操作,建议用原子操作的寄存器。。。那个更好用。。。。BSRR和BRR,当然了,F7叫法可能不一样,但是效果是一样的。。。。

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);

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口不变
页: [1]
查看完整版本: STM32F7 GPIOD分开控制