本帖最后由 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; |
ST的hal库有问题手头有STM32L4或STM32F7的帮忙测试DMA SD卡
STM32F756 DCMI +GC0308 Camera图片不正常
STM32F722RET6无法被JLINK/STLIN和IAR/KEIL识别
STM32F767以太网换PIN脚无数据
STM32F7 DSP库使用
没有人分享一下STM32F767 硬JPEG 编码解码吗
求STM32F777与FPGA通过FMC通信的参考设计
求STM32F7 1.15版本 固件库
STM32F746使用HAL库串口无法中断收数据
STM32F7xx AXIM & ITCM
那么到底是赋值还是或值呢
评分
查看全部评分
赋值 但需要和GPIO9-15的口不影响
评分
查看全部评分
GPIOD->ODR=(GPIOD->ODR & 0xFF00) | (2*i + 16*j);
评分
查看全部评分
楼主应该补习一下布尔代数了。
1、GPIOD->ODR|=
等号后面的值应该用一个运算过的变量来表达。
况且“ |=”运算如果原来某位为1,就保持不变。所以要或运算,应该先进行与运算,清零该位。
2、(Capture_Line/16) =192行 16个地址
STM32最多16位IO口,如何一次进行192的或运算?
评分
查看全部评分
首先:建议你用一个uint32_t xx = 2*i + 16*j;作为一个缓存,因为我不知道你的i是什么类型,如果是8位,我没看到有类型的强制转换呀...那会爆了呀.然后也可以通过xx看看你计算的值是什么,对比一下结果.查看无误了,再恢复成你现在的形式也型.
其次:你可以直接调试状态下,控制ODR寄存器,看看硬件输出是否正常...
最后.......如无意外......就可以下班了
评分
查看全部评分
体会一下,下面这两条
GPIOD->ODR = (GPIOD->ODR & 0xFE00) | (a & 0x1FF);
GPIOD->ODR = (GPIOD->ODR & 0x01FF) | (b & 0xFE00);
评分
查看全部评分