簡 介: 本文給出了 MicroPython內核開發筆記:書內嵌入實驗任務 中的 Timer 軟件用例部分內容。
關鍵詞
:Timer,MM32F3277,MicroPython
在嵌入式應用開發需要考慮到軟件執行的時間精確性,比如按照精確的周期執行某種操作,或者在確定的時間點完成某項任務。雖然可以借助於 time 的延遲功能完成相應的工作,但軟件在延時過程中處在休眠狀態,無法執行其他任務,所以軟件運行效率大大降低了。 使用 定時器 Timer 的時間中斷功能,既能保證時間的精確性,同時也不會降低軟件的執行效率。
在 MM32F3277 的 MicroPython 中存在兩個 Timer 可以被使用。下面通過代碼展示 Timer 的基本應用方法。
下面代碼給出了 Timer 的初始化過程。 軟件中定義了一個函數 to_callback(self) ,它是 Timer 定時中斷服務函數,示例程序的中斷服務函數功能比較簡單,就是改變 LED 管腳的狀態。
初始化 Timer 需要四個參數:
from machine import Pin,Timer
import time
led = Pin('PA1', Pin.OUT_PUSHPULL)
def t0_callback(self):
led(1-led())
t0 = Timer(1, mode=Timer.PERIODIC, callback=t0_callback, period=200)
print(t0)
dir(t0)
while True:
pass
上述程序執行後,在 NANO_F3270 核心板上的 LED 以周期為 200 ms 改變其自身狀態。
▲ 圖1.1.1 實驗核心板上紅色LED改變自身狀態
通過 print, dir 兩個指令顯示了定時器屬性以及可以使用的函數。下面是程序輸出的信息:
Timer(channel=1, mode=PERIODIC, period=200ms)
['__del__', 'ONE_SHOT', 'PERIODIC', 'deinit', 'init']
當 Timer 的模式設置為 ONE_SHOT後, Timer 只完成一次定時中斷,之後並停止運行。如果重新啟動定時器,可以使用 init 函數來完成。
下面代碼是在前面實驗代碼的基礎上,將 Timer 的工作模式修改成 ONE_SHOT。 在主循環中, 設置 LED 狀態為點亮,然後啟動定時器。 定時器在 100 ms之後進入中斷程序,將 LED 關閉。因此程序執行效果是 LED 以500ms 為周期進行閃爍, 點亮時間為 100ms。
from machine import Pin,Timer
import time
led = Pin('PA1', Pin.OUT_PUSHPULL)
def t0_callback(self):
led(1-led())
t0 = Timer(1, mode=Timer.ONE_SHOT, callback=t0_callback, period=100)
while True:
time.sleep_ms(500)
led.low()
t0.init(mode=Timer.ONE_SHOT, callback=t0_callback, period=100)
pass
如果需要周期完成某項操作,相比於利用 time 軟件延遲,利用定時器可以保證周期更加精確。 下面利用定時器中斷完成模擬信號的采集與輸出。 使用 ADC 0 通道(對應PA0)采集信號,使用DAC 0 通道(對應 PA4)輸出采集到的模擬信號。采集的周期為 1ms 。
from machine import Pin,Timer,DAC,ADC
import time
led = Pin('PB2', Pin.OUT_PUSHPULL)
adc = ADC(0, init=True)
dac = DAC(0)
dac.write_u16(0x8000)
def t0_callback(self):
dac.write_u16(adc.read_u16())
led(1-led())
t0 = Timer(1, mode=Timer.PERIODIC, callback=t0_callback, period=1)
while True:
pass
在 PA0 輸入幅值為 1V,零點為1.5V, 100Hz 的正弦波。 程序執行後,在PA4(DAC0)管腳可以測量到 DAC的輸出信號。 相比 第十章 通過 軟件延時進行信號采集的效果,利用定時器中斷采集信號可以精確實現 1 ms 進行信號采集一次。
▲ 圖1.2.1 Timer中完成信號的采集與輸出
本文給出了 MicroPython內核開發筆記:書內嵌入實驗任務 中的 Timer 軟件用例部分內容。
■ 相關文獻鏈接:
● 相關圖表鏈接: