from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from tkinter.font import BOLD
'''
网上找的计算公式:
Tout=(Period+1)*(Prescaler+1)/Tck 其中TCK为时钟频率,Prescaler为时钟预分频系数,Period为自动重装载值。
'''
win = Tk()
win.title('STM32定时器计算')
win.geometry('200x100-200-100')
lbl_Pre = Label(win, text='Prescaler:',width=10)
lbl_Pre.grid(column=0, row=0)
lbl_Prescaler = Entry(win, width=10)
lbl_Prescaler.grid(column=1, row=0)
lbl_load = Label(win, text='Period', width=10)
lbl_load.grid(column=0,row=1)
lbl_Period = Entry(win,width=10)
lbl_Period.grid(column=1,row=1)
lbl_Tclk = Label(win, text='Tclk:', width=10)
lbl_Tclk.grid(column=0,row=2)
lbl_TclkMhz = Entry(win,width=10)
lbl_TclkMhz.grid(column=1,row=2)
lbl_UnitMhz = Label(win,text='Mhz',width=5)
lbl_UnitMhz.grid(column=2,row=2)
def calculation():
if((len(lbl_Prescaler.get()) == 0) | (len(lbl_Period.get()) == 0) | (len(lbl_TclkMhz.get()) == 0)):
messagebox.showwarning('Message title','Prescaler/Period/Tclk不能为空')
return
prescaler = lbl_Prescaler.get() #htim2.Init.Prescaler
period = lbl_Period.get() #htim2.Init.Period
TclkMhz = lbl_TclkMhz.get() #APB1时钟
print('prescaler:{} period:{} TclkMhz:{}'.format(prescaler,period,TclkMhz))
Tout = (int(prescaler) + 1) * (int(period) + 1) / (int(TclkMhz))
lbl_Tout.insert(0,Tout/1000)
btn_calculation = Button(win, text='计算', width=8, command=calculation, bg='#FF0000',font=BOLD)
btn_calculation.grid(column=0,row=3)
lbl_Tout = Entry(win,width=10)
lbl_Tout.grid(column=1,row=3)
lbl_UnitUs = Label(win,text='ms',width=5)
lbl_UnitUs.grid(column=2,row=3)
win.mainloop()
Note(相关参数使用STM32CubeMx配置):