设置手臂皮质m3中adc的采样频率

时间:2013-11-18 02:23:20

标签: arm microcontroller cortex-m3

我是微控制器编程领域的初学者,目前我正在使用手臂皮质m3 mcu。我想编程adc以读取1khz的电压。 MCU的时钟频率为16Mhz。我对以下两种必须采用的方法感到困惑: 1.使用延迟程序 2.使用wfi指令将mcu置于睡眠状态,以便adc采样1khz

有人可以告诉我一个最佳解决方案吗?如果使用wfi,如何编写子程序??

提前致谢。

2 个答案:

答案 0 :(得分:0)

没有一种方法可以“必须”采用。根据具体实现,有不同的选项。

使用延迟例程并不是最好的方法,因为在等待下一个样本启动时你会占用微量。如果你想在等待下一个样本的同时保持微观做其他事情,那么最好的方法是设置一个计时器,每隔一毫秒就会关闭一次。在定时器中断例程中,您可以启动ADC,或者更好地设置无限循环看到的标志和下一个ADC读取的设置。

您可以将微型发送到睡眠状态并每毫秒唤醒它,但是您真的希望STM32什么也不做,只需每秒采样1000次?

你没有让PLL从16MHz上升到更高的频率BTW吗?

答案 1 :(得分:0)

我非常确定这里的解决方案是使用通用计数器/定时器来触发ADC转换。你需要弄清楚的事情:

  • 如何启用全局中断
  • 如何启用定时器中断
  • 如何计算计时器参数,以便ISR触发,例如每1 ms(1 kHz)
  • 要么在ISR中使用软件触发ADC转换,要么更好地将定时器的转换信号直接发送到ADC。
  • 最终使用DMA将数据从ADC数据寄存器自动传输到阵列

这不是一个完整的列表,但我相信在STM32标准外设库中可以从这里下载多个这样的示例:

STM32F0xx

STM32F10x

STM32F2xx

您没有从STM32指定多于ARM Cortex M3,因此请选择上面的右侧。您还可以查看并可能使用其他两个库中的示例中的大多数代码。打开这些zip文件时,请打开名为:

的文件
stm32fxxx_stdperiph_lib_um.chm

并按“相关页面”,然后按“STM32Fxxx标准外围设备示例”