2017全国大学生电子设计竞赛中的一些问题总结
13 Aug 2017 |
单片机
国赛gg,不过还是要总结一些遇到的问题。
1. STM32F1 ADC多通道DMA问题
STM32F103 有2个DMA,分别可以使用ADC1和ADC3这两个通道。ADC1对应通道1,而ADC2对应通道5。多通道DMA理论上不是什么问题,网上有很多例程。但是在实际运用的过程中,一开始在使用ADC1的多通道DMA时,只能发送第一个通道的数据。搜索多方资料,百思不得其解。配置是完全一样的,后来觉得可能是配置的顺序问题。而ADC3的DMA最后也没能用。最后可以用的代码如下:
代码
关键步骤
- 开启扫描模式
- 开启连续传送模式
- 设置通道数
- 设置通道传送的顺序和周期(有的解释说周期太短传送有问题,这里239是最大周期)
- 外设地址寄存器递增
中断优先级问题
在使用openmv3摄像头串口传送小球定点坐标数据时,数据发生了严重的错乱和丢包。一开始以为是LCD屏的问题(去除LCD后确实好很多),可是理论上图像显示对串口的数据传输不会有那么大的影响。后来觉得的串口接受的优先级的问题,将接收中断的优先级调到最高得到了缓解,不过还是没能解决问题。最后把定时器的优先级做了调整才解决。(待寻找到底是什么问题…)
PWM输出问题
在测试PWM的时候不知道为什么在 TIM_Compare(Timx,val)
调节占空比时, val 为低电平, period-val 为高电平。后来发现和输出极性有关。
如上调节输出极性为高。
选择定时器模式:TIM脉宽调制模式1。即向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平。
参考资料:
STM32多通道AD采样DMA传输
PWM TIM_OCMode
一直想查如何根据加速度传感器去除运动伪差,后来找到一个自适应滤波的信号处理方法,感觉是相对来说比较靠谱的。
MicroPython
MicroPython脱胎于Python,基于ANSI C(C语言标准),然后在语法上又遵循了Python的规范,主要是为了能在嵌入式硬件上(这里特指微控制器级别)更易于的实现对底层的操作。