首先介绍下用到的资源,ADC通道0(PA0,ADC时钟频率12M),基本定时器2(用于产生5us的一个基本时钟,计数5次25us,得到40KHz的频率,控制ADC的采样率),TIM3用于控制点阵屏的刷新速度(原计划是10ms刷新一次,但是发现好慢,显示不全等问题,后来改为了50us),TIM4的PWM(用于控制点阵屏的OE端)。 先上主程序截图 ADC部分截图,考虑到篇幅问题,初始化部分就不截图了,ADC初始化部分把ADC的时钟配置为12M,采用单次转换模式,非扫描模式。并打开了ADC的中断,ADC1->SMPR2这个寄存器把采样周期设为了239.5个周期。其他就和普通的ADC初始化差不多了。
定时器部分,用TIM2每隔25us产生一个中断,在TIM2中断里,主要就是启动ADC转换 在TIM3的中断里面主要就是不断地用经过FFT运算后的数据去刷新点阵屏。 TIM3部分截图
现在出现的问题是,可以采集到AD值,也有音柱出现,但是根本不是我想要的那种(对比了用51单片机做的音乐频谱),然后就是音柱跳动的很快,感觉它不按节奏来,如果把点阵屏改成10ms刷新一次。则会出现,整个屏幕都会出现音柱的现象,现在是改为了50us刷新一次,音柱跳动的很快 附图片 现在我的问题主要有以下几点 1. ADC部分的采样时间我的计算方式是否有问题(能否达到40KHz),我用TIM2每隔25us启动一次ADC转换,然后ADC1->SMPR2我又设置为了239.5个周期,里的这个239.5个周期是干嘛的?如果它变小了会不会对我的采样率有影响? 2. 这几个外设的中断优先级的问题,ADC中断(采集数据) 和TIM2中断(控制AD的采集频率) 以及TIM3中断(控制32*64点阵屏的显示),这三个外设优先级从高到低应该怎么排列。还是说无所谓怎么排。 3. 这个FFT是从别的单片机上移植过来的,人家原来用的10位AD,用的查表的方式去计算幅值。现在我移到M3上面(12位AD)需不需要对它进行修改? 4. 这个点阵屏的刷新率多少才是合适的,跟我的AD采样率有没有什么关系?
|