卧槽回顾一下代码发现
"GPIOB->CRH &= 0xfffff3ff;//将M设置成通用推挽"
这行位置貌似错了...会导致实际上之前进入函数的M管脚操作是无效的... 不过不管了至少这段代码是好使的.. 还有就是ADC要超频到18MHz,即72MHz主频时ADC四分频,不然速度不够.
上面那段代码有个缺陷, 至今没有找到为什么, 就是如果我改了程序别的地方, 跟这个函数无关, 编译, 下载运行, 可能会发现得到数据的灵敏度跟上次程序不一样了, 不过暗像素的位置是对的, 也就是说做一维的位置测量没问题, 但做亮度测量就不行了
实际上试过用STM32的定时器可以做到用两个定时器同步, 一个产生4MHz时钟驱动M一个产生1MHz时间触发ADC, DMA存ADC转换结果. 这招得出的图像质量很好因为M时钟是标准方波, 但应该是我写的时序有问题导致上一帧和下一帧得到的暗像素的位置会变化, 也就是说整帧会莫名其妙左右平移. 由于我做的是测量, 这样得到的帧需要先定位暗像素的位置之后才能进行下一步处理, 计算速度会慢一些, 所以最后还是用上面的软件控制ADC来采集
如果楼上上需要的话PM邮箱我我把整个工程发过去.. 由于做的玩意需要保密一段时间不宜公开所以就不上传了大家见谅...