Berbagi teknologi

Pengatur waktu STM32-TIM

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Konten ini didasarkan padaVideo Teknologi Jiangxie STM32Konten, terorganisir.

1. TIM

1.1 pengatur waktu WAKTU

  • Timer dapat menghitung jam input dan memicu interupsi ketika nilai hitungan mencapai nilai yang ditetapkan.
  • Unit basis waktu penghitung 16-bit, prescaler, dan register isi ulang otomatis dapat mencapai waktu maksimum 59,65 detik di bawah jam penghitungan 72MHz. 1/(72/65536/65536) (Counter adalah register yang digunakan untuk melakukan penghitungan waktu. Setiap kali jam datang, penghitung bertambah 1. Prescaler dapat membagi jam penghitung untuk membuat penghitungan lebih fleksibel. Restart otomatis Yang dimuat register adalah nilai target penghitungan, yaitu berapa banyak jam yang ingin Anda hitung untuk menerapkan interupsi. Register ini merupakan bagian inti dari pengatur waktu.
  • Ini tidak hanya memiliki fungsi interupsi terjadwal dasar, tetapi juga mencakup pemilihan sumber jam internal dan eksternal, pengambilan input, perbandingan output, antarmuka encoder, mode pemicu master-slave, dan fungsi lainnya.
  • Menurut kompleksitas dan skenario aplikasi, ini dibagi menjadi tiga jenis: pengatur waktu lanjutan, pengatur waktu umum, dan pengatur waktu dasar.

1.2 Jenis pengatur waktu

jenisnomor seribisFungsi
Pengatur waktu tingkat lanjutTIM1 dan TIM8APB2Ia memiliki semua fungsi pengatur waktu umum, dan juga memiliki fungsi penghitung pengulangan, pembangkitan zona mati, keluaran pelengkap, masukan rem, dll.
Pengatur waktu universalTIM2, TIM3, TIM4, TIM5APB1Ia memiliki semua fungsi pengatur waktu dasar, dan memiliki fungsi tambahan seperti pemilihan sumber jam internal dan eksternal, penangkapan masukan, perbandingan keluaran, antarmuka encoder, mode pemicu master-slave, dll.
pengatur waktu dasarTIM6 dan TIM7APB1Memiliki fungsi interupsi terjadwal dan mode master yang memicu DAC
  • Sumber daya pengatur waktu STM32F103C8T6: TIM1, TIM2, TIM3, TIM4
  • DAC: konverter digital-ke-analog

1.3 Pengatur waktu dasar

Fungsi utama:

  • Penghitung akumulasi isi ulang otomatis 16-bit
  • Prescaler 16-bit yang dapat diprogram, digunakan untuk membagi jam input dengan nilai apa pun antara 1 dan 65536
  • Sirkuit sinkron yang memicu DAC
  • Permintaan interupsi/DMA dihasilkan pada acara pembaruan (counter overflow)

gambar.png

  • PSC Prescaler
    Input jam hitungan referensi dihubungkan sebelum prescaler. Karena pengatur waktu dasar hanya dapat memilih jam internal, jalur input prescaler dapat dianggap terhubung ke jam internal (CK_INT).
    Sumber jam internal adalah TIMxCLK RCC. Nilai frekuensi di sini umumnya adalah frekuensi utama sistem 72MHz.
    Menulis 0 pada prescaler berarti tidak ada pembagian frekuensi; menulis 1 berarti membagi frekuensi dengan 2, dan frekuensi keluaran = frekuensi masukan/2 = 36MHz.
    Penulisan 2 berarti membagi dengan 3, dan keluaran = masukan/3. Oleh karena itu, nilai prescaler berbeda dengan koefisien pembagian frekuensi aktual sebesar 1, dan koefisien pembagian frekuensi aktual = nilai prescaler 1. Prescalernya 16 bit, sehingga nilai maksimumnya dapat ditulis 65535, dibagi 65536.

  • Kontra CNT
    Penghitung dapat menghitung jam hitung yang telah dibagi sebelumnya. Setiap kali jam hitung mencapai tepi naik, nilai penghitung bertambah 1. Counternya juga 16 bit, jadi nilai didalamnya bisa ditambah dari 0 sampai 65535. Jika lebih banyak yang ditambahkan, penghitung akan kembali ke 0 dan mulai lagi. Oleh karena itu, nilai penghitung akan terus bertambah selama proses penghitungan. Ketika kenaikan mencapai nilai target, interupsi akan dihasilkan, dan tugas yang dijadwalkan akan selesai. Oleh karena itu diperlukan suatu register untuk menyimpan nilai target, yaitu register isi ulang otomatis.

  • Daftar isi ulang otomatis
    Register muat ulang otomatis juga berukuran 16 bit, dan menyimpan target penghitungan yang akan ditulis. Selama proses berjalan, nilai hitungan terus meningkat, dan nilai isi ulang otomatis adalah target tetap. Ketika nilai hitungan sama dengan nilai isi ulang otomatis, waktu waktunya habis. Kemudian akan menghasilkan sinyal interupsi, menghapus pencacah, dan pencacah akan secara otomatis memulai waktu penghitungan berikutnya.

  • Panah U dan UI
    Panah diskon ke atas yang digambar pada gambar berarti sinyal interupsi akan dihasilkan di sini. Interupsi seperti ini yang nilai hitungannya sama dengan nilai muat ulang otomatis umumnya disebut "interupsi pembaruan". Interupsi pembaruan ini akan mengarah ke NVIC. Setelah kita mengkonfigurasi saluran pengatur waktu NVIC, interupsi pembaruan pengatur waktu akan direspon oleh CPU. Panah ke bawah menyatakan bahwa suatu peristiwa akan dihasilkan, dan peristiwa terkait di sini disebut "peristiwa pembaruan". Peristiwa pembaruan tidak memicu interupsi, tetapi dapat memicu kerja sirkuit internal lainnya.

1.4 Pengatur waktu umum

Fungsi utama:

  • Penghitung akumulator isi ulang otomatis 16-bit atas, bawah, atas/atas

  • Prescaler 16-bit yang dapat diprogram, digunakan untuk membagi jam input dengan nilai apa pun antara 1 dan 65536

  • 4 saluran independen:

    • penangkapan masukan
    • Perbandingan keluaran
    • Pembangkitan PWM (mode tepi atau tengah)
    • Keluaran mode pulsa tunggal
  • Sirkuit sinkronisasi yang mengontrol timer dan interkoneksi timer menggunakan sinyal eksternal

  • Interupsi/DMA dihasilkan ketika peristiwa berikut terjadi:

    • Pembaruan: Counter overflow/underflow, inisialisasi counter (melalui perangkat lunak atau pemicu internal/eksternal)
    • Peristiwa pemicu (penghitung mulai, berhenti, inisialisasi, atau penghitungan yang dipicu oleh internal/eksternal)
    • penangkapan masukan
    • Perbandingan keluaran
  • Mendukung encoder inkremental (kuadrat) dan sirkuit sensor Hall untuk penentuan posisi

  • Memicu input sebagai jam eksternal atau manajemen arus siklus demi siklus
    gambar.png

  • penghitung CNT
    Penghitung CNT mendukung mode penghitungan naik, mode penghitungan mundur, dan mode penyelarasan tengah. Mode penghitungan ke bawah dimulai dari nilai reload dan menurun ke bawah, setelah berkurang menjadi 0, ia kembali ke nilai reload dan berlaku untuk interupsi. Mode rata tengah dimulai dari 0, pertama meningkat ke atas, menghitung nilai reload, dan menerapkan interupsi, lalu menurunkan ke bawah hingga 0, dan kemudian menerapkan interupsi.

  • sumber jam
    Sumber jam pengatur waktu umum tidak hanya dapat memilih jam internal 72MHz, tetapi juga dapat memilih jam eksternal.
    (1)Jam eksternal pertama berasal dariJam eksternal pada pin TIMx_ETR , yaitu, Anda dapat menghubungkan jam gelombang persegi eksternal ke pin ETR TIM2, PA0, dan kemudian mengkonfigurasi pemilihan polaritas internal, deteksi tepi dan rangkaian prescaler, serta rangkaian filter masukan pembentukan tertentu. Karena ini adalah jam pin eksternal, pasti akan ada beberapa gangguan, sehingga rangkaian ini dapat menyaring bentuk gelombang masukan. Sinyal yang disaring dibagi menjadi dua saluran. Saluran ETRF atas memasuki pengontrol pemicu, dan kemudian jam dapat dipilih sebagai unit basis waktu. Jalan ini juga disebut "Mode jam eksternal 2”。
    gambar.png
    (2) TRGI juga dapat menyediakan jam eksternal , terutama digunakan sebagai masukan pemicu. Masukan pemicu ini dapat memicu mode budak pengatur waktu. Ketika TRGI digunakan sebagai jam eksternal, jalur ini disebut "Mode jam eksternal 1". Jam eksternal apa yang melewati jalur ini? Yang pertama adalah sinyal dari pin ETR. Yang kedua adalah sinyal ITR. Bagian dari sinyal clock ini berasal dari timer lain. TRGO dalam mode master dapat menyebabkan pengatur waktu lain. Saat menghubungkan ke pengatur waktu lain, ini terhubung ke pin ITR pengatur waktu lain. ITR0 hingga ITR3 berasal dari keluaran TRGO dari empat pengatur waktu lainnya. Anda juga dapat memilih TI1F_ED, yang dihubungkan di sini ke unit penangkap masukan. Pin CH1, yaitu jam yang diperoleh dari pin CH1. Akhiran ED (Edge) disini artinya edge. Bisa juga diperoleh melalui TI1FP1 dan TI2FP2. TI1FP1 adalah jam yang dihubungkan ke pin CH1, dan TI2FP2 dihubungkan ke jam CH2.
    Ringkasan: Input ke mode jam eksternal 1 dapat berupa pin ETR, timer lain, tepi pin CH1, pin CH1, dan pin CH2.

  • Rangkaian perbandingan keluaran
    Bagian kanan di bawah adalah rangkaian perbandingan keluaran. Ada total empat saluran, sesuai dengan pin CH1 hingga CH4, yang dapat digunakan untuk mengeluarkan bentuk gelombang PWM dan menggerakkan motor.

  • Sirkuit penangkapan masukan
    Di sebelah kiri adalah rangkaian penangkapan masukan, yang juga memiliki empat saluran, sesuai dengan pin CH1 hingga CH4, yang dapat digunakan untuk mengukur frekuensi gelombang persegi masukan, dll.

  • menangkap/membandingkan register
    Register tengah adalah register penangkap/pembanding, yang digunakan bersama oleh rangkaian penangkap masukan dan perbandingan keluaran. Karena penangkapan masukan dan perbandingan keluaran tidak dapat digunakan secara bersamaan, register di sini dibagikan dan pin juga dibagikan.

1.4 Pengatur waktu lanjutan

Fungsi utama:

  • Penghitung akumulator isi ulang otomatis 16-bit atas, bawah, atas/atas
  • Prescaler 16-bit yang dapat diprogram, digunakan untuk membagi jam input dengan nilai apa pun antara 1 dan 65536
  • 4 saluran independen:
    • penangkapan masukan
    • Perbandingan keluaran
    • Pembangkitan PWM (mode tepi atau tengah)
    • Keluaran mode pulsa tunggal
  • Output pelengkap yang dapat diprogram dengan waktu mati
  • Sirkuit sinkronisasi yang mengontrol timer dan interkoneksi timer menggunakan sinyal eksternal
  • Mengizinkan penghitung berulang diperbarui dalam register pengatur waktu setelah periode penghitung dari data yang ditentukan
  • Sinyal masukan rem dapat menempatkan sinyal keluaran pengatur waktu ke keadaan reset atau keadaan yang diketahui
  • Interupsi/DMA dihasilkan ketika peristiwa berikut terjadi:
    • Pembaruan: Counter overflow/underflow, inisialisasi counter (melalui perangkat lunak atau pemicu internal/eksternal)
    • Peristiwa pemicu (penghitung mulai, berhenti, inisialisasi, atau penghitungan yang dipicu oleh internal/eksternal)
    • penangkapan masukan
    • Perbandingan keluaran
    • Masukan sinyal rem
  • Mendukung encoder inkremental (kuadrat) dan sirkuit sensor Hall untuk penentuan posisi
  • Memicu input sebagai jam eksternal atau manajemen arus siklus demi siklus

gambar.png

  • Ulangi penghitung
    Perbedaan dari pengatur waktu pada umumnya: yang pertama adalah menambahkan penghitung pengulangan di mana interupsi diterapkan. Dengan penghitung ini, dimungkinkan untuk menyadari bahwa peristiwa pembaruan dan interupsi pembaruan hanya terjadi setiap beberapa siklus penghitungan. Struktur aslinya adalah bahwa pembaruan akan terjadi setelah setiap siklus penghitungan selesai, yang setara dengan membagi lagi sinyal pembaruan keluaran.

  • Generator deadband DTG dan output pelengkap
    Berikut ini adalah peningkatan modul perbandingan keluaran dengan pengatur waktu lanjutan DTG (penghasil waktu mati) merupakan rangkaian pembangkitan zona mati. Pin keluaran di sebelah kanan telah diubah dari satu keluaran asli menjadi dua keluaran yang saling melengkapi, yang dapat menghasilkan sepasang gelombang PWM yang saling melengkapi. Rangkaian ini digunakan untuk menggerakkan motor tanpa sikat tiga fasa, seperti pesawat quadcopter, roda belakang listrik kendaraan, dan bor listrik. Tunggu, itu mungkin motor tanpa sikat tiga fase. Karena rangkaian penggerak motor brushless tiga fasa umumnya memerlukan 3 lengan jembatan, maka setiap lengan jembatan dikendalikan oleh 2 tabung pengalih daya tinggi, sehingga diperlukan total 6 tabung pengalih daya tinggi. Oleh karena itu, tiga pin keluaran PWM pertama di sini menjadi keluaran pelengkap. Selain itu, untuk mencegah fenomena tembus jangka pendek yang disebabkan oleh ketidaksempurnaan perangkat pada saat peralihan ketika PWM keluaran komplementer menggerakkan lengan jembatan, rangkaian pembangkitan zona mati ditambahkan di depan. Pada saat sakelar dialihkan, zona mati dengan jangka waktu tertentu dihasilkan, sehingga tabung atas dan bawah lengan jembatan dimatikan untuk mencegah tembakan tembus.

  • masukan rem
    Bagian terakhir adalah fungsi input rem, yaitu memberikan jaminan keselamatan bagi penggerak motor. Jika pin eksternal BKIN (Break IN) menghasilkan sinyal rem, atau jam internal gagal dan terjadi kesalahan, rangkaian kontrol akan secara otomatis memutus output motor untuk mencegah kecelakaan.

1.5 Struktur dasar interupsi terjadwal

gambar.png
Kontrol operasi: mengontrol beberapa bit dalam register, seperti mulai dan berhenti, menghitung naik atau turun, dll.
Sisi kanan adalah tempat sinyal pergi setelah waktu waktu habis dan interupsi pembaruan dihasilkan. Jika ini adalah pengatur waktu tingkat lanjut, akan ada penghitung pengulangan tambahan. Sinyal interupsi pertama-tama akan menyetel bit flag interupsi di register status. Bit flag ini akan dikontrol melalui output interupsi dan mengajukan interupsi ke NVIC. Kontrol keluaran interupsi adalah bit pengaktifan untuk keluaran interupsi. Jika Anda memerlukan interupsi, ingatlah untuk mengizinkannya.
gambar.png
gambar.png

1.6 Pengaturan Waktu Prescaler

gambar.png

  • Frekuensi penghitungan penghitung: CK_CNT = CK_PSC / (PSC 1)
  • CK_PSC: Jam prescaler, jam internal 72MHz.
  • CNT_EN: Penghitung diaktifkan, penghitung tingkat tinggi berjalan normal, dan penghitung tingkat rendah berhenti.
  • CK_CNT: Jam penghitung, yang merupakan keluaran jam dari prescaler dan masukan jam dari penghitung.
  • Pada awalnya, penghitung tidak diaktifkan dan jam penghitung tidak berjalan. Setelah diaktifkan, pada paruh pertama periode, koefisien pembagian frekuensi aktual adalah 1 (PSC=0), dan jam penghitung sama dengan jam sebelum prescaler; pada paruh kedua, koefisien pembagian frekuensi aktual adalah 2 ( PSC=1), dan jam penghitung Jam menjadi setengah jam sebelum prescaler. Didorong oleh counter clock, counter register berikut juga terus bertambah seiring naiknya tepi clock. Setelah posisi tengah FC, nilai count menjadi 0. Dari sini dapat disimpulkan bahwa nilai reload otomatis ARR adalah FC. Ketika nilai penghitungan sama dengan nilai muat ulang dan jam berikutnya tiba, nilai penghitungan dihapus ke nol, dan peristiwa pembaruan dihasilkan di bawah ini. Ini adalah alur kerja dari siklus penghitungan.
  • Tiga baris berikut menjelaskan mekanisme buffering register prescaler. Artinya, sebenarnya ada dua register prescaler. Salah satunya adalah register kontrol prescaler, yang tidak secara langsung menentukan koefisien pembagian frekuensi . Ada juga register buffer atau register bayangan: buffer prescaler ini adalah register yang benar-benar berfungsi. Misalnya, pada saat tertentu, kita mengubah register prescaler dari 0 ke 1. Jika saat ini, ubah frekuensinya. koefisien pembagian jam secara langsung akan menyebabkan frekuensi paruh pertama dan paruh kedua berbeda dalam satu siklus penghitungan. Oleh karena itu, buffer dirancang. Ketika penghitungan mencapai setengah dari penghitungan, nilai prescaler diubah. Perubahan ini tidak akan langsung berlaku, melainkan akan menunggu hingga akhir siklus penghitungan ini dan peristiwa pembaruan terjadi nilai register prescaler akan diubah. Akan diteruskan ke register buffer sebelum diterapkan.
  • Seperti dapat dilihat dari baris terakhir: prescaler juga mengandalkan penghitungan untuk membagi frekuensi. Ketika nilai prescaler adalah 0, penghitung selalu 0 dan langsung mengeluarkan frekuensi asli; ketika nilai prescaler adalah 1, penghitung 0, 1, 0, 1, 0, 1 dihitung seperti ini. Ketika kembali ke 0, ia mengeluarkan 1 pulsa. Dengan cara ini, frekuensi keluaran dibagi 2 frekuensi masukan koefisien pembagian frekuensi aktual. Ada offset suatu bilangan.

1.7 Waktu penghitung

gambar.png

  • Frekuensi counter overflow: CK_CNT_OV = CK_CNT / (ARR 1) = CK_PSC / (PSC 1) / (ARR 1)
  • CK_INT: Jam internal 72MHz;
  • CNT_EN: Penghitung diaktifkan, valid pada tepi naik;
  • CK_CNT: Counter clock, karena koefisien pembagian frekuensinya adalah 2, maka frekuensi ini adalah CK_INT dibagi 2. Kemudian penghitung bertambah pada setiap tepi jam ini. Ketika mencapai 0036, terjadi luapan. Setelah menghitung sampai 36, ada tepi naik lainnya, penghitung dihapus, penghitung meluap, dan pulsa peristiwa pembaruan dihasilkan. Selain itu, bendera interupsi pembaruan (UIF) diatur ketika bendera interupsi pembaruan (UIF) disetel diatur ke 1, interupsi diminta. Setelah interupsi ditanggapi, interupsi tersebut perlu dihapus secara manual dalam program interupsi.

1.8 Penghitung tidak memiliki urutan waktu yang telah ditentukan sebelumnya.

gambar.png
Register auto-loading telah diubah dari FF menjadi 36, dan nilai target nilai hitungan telah diubah dari FF menjadi 36, jadi setelah penghitungan 36 disini akan langsung diperbarui untuk memulai penghitungan putaran berikutnya.

1.9 Penghitung memiliki waktu yang telah ditentukan sebelumnya

gambar.png
Di tengah penghitungan, ubah nilai target penghitungan dari F5 menjadi 36. Ada shadow register di bawah. Shadow register ini efektif banget. Masih F5, jadi sekarang target penghitungan masih menghitung ke F5, menghasilkan event update. Pada saat yang sama, 36 yang akan diubah diteruskan ke shadow register, dan pada hitungan berikutnya Perubahan ini hanya berlaku jika siklusnya 36, ​​jadi tujuan diperkenalkannya register bayangan sebenarnya adalah untuk sinkronisasi, yaitu untuk memungkinkan perubahan nilai dan peristiwa pembaruan terjadi secara serempak untuk mencegah kesalahan yang disebabkan oleh perubahan selama operasi.

1.10 pohon jam RCC

gambar.png

  • sumber jam
    Pada rangkaian pembangkit jam, terdapat empat sumber osilasi:
    (1) HSI: Osilator RC berkecepatan tinggi 8MHz internal;
    (2) HSE: Osilator kristal kuarsa berkecepatan tinggi 4~16MHz eksternal, juga dikenal sebagai osilator kristal, biasanya dihubungkan ke 8MHz;
    (3) LSE: Osilator kristal kecepatan rendah eksternal 32,768KHz, yang umumnya menyediakan jam untuk RTC;
    (4) LSI: Terakhir, ada osilator RC berkecepatan rendah 40KHz internal, yang dapat menyediakan jam untuk pengawas.
    Dua osilator kristal berkecepatan tinggi di atas digunakan untuk menyediakan jam sistem. Jam AHB, APB2, dan APB1 semuanya berasal dari dua osilator kristal berkecepatan tinggi ini osilator RC internal, jadi umumnya Gunakan osilator kristal eksternal.

  • Jam konfigurasi ST
    Dalam fungsi SystemInit, ST mengkonfigurasi jam: pertama memulai jam internal HSI, memilih 8MHz internal sebagai jam sistem, dan berjalan sementara dengan jam internal 8MHz. Kemudian mulai jam eksternal, konfigurasikan jam eksternal untuk memasukkan loop fase-terkunci PLL untuk perkalian frekuensi, 8MHz dikalikan dengan 9 kali, dan Anda mendapatkan 72MHz. Setelah output loop fase-terkunci stabil, pilih loop fase-terkunci output sebagai jam sistem, sehingga jam sistem Beralih dari 8MHz ke 72MHz.

  • Sistem Keamanan Jam CSS
    CSS (sistem keamanan jam): Sistem keamanan jam juga bertanggung jawab untuk mengalihkan jam. Ia dapat memantau status berjalan dari jam eksternal, secara otomatis akan mengalihkan jam eksternal kembali ke jam internal untuk memastikan pengoperasian jam sistem dan mencegah program macet Kematian yang disebabkan oleh kecelakaan.

  • rangkaian distribusi jam

    • Bus AHB: Pertama, jam sistem 72MHz memasuki bus AHB. Bus AHB memiliki prescaler. Koefisien distribusi yang dikonfigurasi di SystemInit adalah 1, sehingga jam AHB adalah 72MHz.
    • Bus APB1: Koefisien distribusi yang dikonfigurasi di sini adalah 2, sehingga clock bus APB1 adalah 72MHz/2=36MHz.Di bawah, jika koefisien prescaler APB1 = 1, frekuensinya tetap tidak berubah, sebaliknya frekuensinya*2, lalu di sisi kanan dibuka terpisah untuk timer 2-7, karena koefisien prescaler disini adalah 2, jadi frekuensi disini perlu*2 , jadi jam yang menuju ke timer 2~7 adalah 72MHz. Oleh karena itu, apakah itu pengatur waktu tingkat lanjut, pengatur waktu umum, atau pengatur waktu dasar, jam referensi internalnya adalah 72MHz.
    • Bus APB2: Faktor pembagian frekuensi APB2 adalah 1, jadi clocknya 72MHz.Kemudian jam yang terhubung ke APB2 juga dihidupkan. Artinya, jika koefisien prescaler APB2 = 1, frekuensinya tetap tidak berubah, sebaliknya frekuensinya*2 . Karena koefisien pembagian frekuensi adalah 1, jam pada pengatur waktu 1 dan 8 adalah 72MHz.
    • Bagian keluaran jam memiliki gerbang AND untuk kontrol keluaran. Bit kontrol menulis pengaktifan jam eksternal. Di sinilah kita menulis RCC_APB2/1PeriphClockCmd dalam program. Untuk menghidupkan jam, tulis 1 di posisi ini untuk membiarkan jam dapat di-output ke periferal melalui gerbang AND.

2. Fungsi dan kode perpustakaan TIM

2.1 Fungsi perpustakaan TIM

// 恢复缺省配置
void TIM_DeInit(TIM_TypeDef* TIMx);

// 时基单元初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

// 结构体变量赋一个默认值
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

// 使能计数器---运行控制
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

// 使能中断输出---中断输出控制
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

/*-----------------时基单元的时钟选择---------*/
// 选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);

// 选择ITRx其他定时器的时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);

// 选择TIx捕获通道的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);

// 选择ETR通过外部时钟模式1输入的时钟
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter);

// 选择ETR通过外部时钟模式2输入的时钟
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);

/*--------------------------------------------------------*/
// 不是用来选择时钟的,单独用来配置ETR引脚的预分频器、极性、滤波参数的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                   uint16_t ExtTRGFilter);

// 用来单独写预分频值的
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);

// 用来改变计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);

// 自动重装器预装功能配置
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

// 给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);

// 给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);

// 获取当前计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);

// 获取当前的预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);

/*-------------获取标志位和清除标志位的------------*/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);