请问STM32F7 GPIO同时控制程序0-8无输出是什么原因?

2019-07-14 18:34发布

本帖最后由 Rareyee 于 2018-3-14 11:12 编辑

GPIOD->ODR 0-8和9-15管脚同时控制
下面程序的时候0-8有波形 但写GPIOD->ODR|=2*i + 16*j; 9-15有波形 0-8就无输出了

for(i=0;i<(Capture_Line/16);i++)//12个使能  (Capture_Line/16) 行片选
                {
                        
                        for(j=0;j<16;j++)  //16*(Capture_Line/16) =192行   16个地址      
                        {
                                GPIOD->ODR =2*i + 16*j;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
nyvvhxcs
1楼-- · 2019-07-15 01:49
跨界F16 发表于 2018-8-14 07:14
GPIOD-&amp;gt;ODR =2*i + 16*j; 楼主 这是你写的代码 但是你又说GPIOD-&amp;gt;ODR|=2*i + 16*j
那么到底是赋值还是或值呢

赋值  但需要和GPIO9-15的口不影响
跨界F16
2楼-- · 2019-07-15 04:58
楼主你要是这样赋值的话 就是意味着在同一时间只有一个io口是被置位的 其余io口都被复位了
TOPCB
3楼-- · 2019-07-15 09:16
那应该是
GPIOD->ODR=(GPIOD->ODR & 0xFF00) | (2*i + 16*j);
跨界F16
4楼-- · 2019-07-15 13:36
那要看楼主你的目的是什么 如果你想要就是同一个时间只有指定io口输出高电平 那么就用GPIOD->ODR =2*i + 16*j;,那么如果你想要在原来基础上再增加指定的io口输出高电平 那么就用GPIOD->ODR|=2*i + 16*j
ctwewer
5楼-- · 2019-07-15 15:46
 精彩回答 2  元偷偷看……
cknz
6楼-- · 2019-07-15 20:00
这个问题,有两方面
首先:建议你用一个uint32_t xx = 2*i + 16*j;作为一个缓存,因为我不知道你的i是什么类型,如果是8位,我没看到有类型的强制转换呀...那会爆了呀.然后也可以通过xx看看你计算的值是什么,对比一下结果.查看无误了,再恢复成你现在的形式也型.
其次:你可以直接调试状态下,控制ODR寄存器,看看硬件输出是否正常...
最后.......如无意外......就可以下班了

一周热门 更多>