2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tämä sisältö perustuuJiangxie Technology STM32 videoSisältö, järjestetty.
tyyppi | sarjanumero | linja-auto | Toiminto |
---|---|---|---|
Edistynyt ajastin | TIM1, TIM8 | APB2 | Siinä on kaikki yleisen ajastimen toiminnot, ja lisäksi siinä on toistolaskuri, kuolleiden alueiden generointi, täydentävä lähtö, jarrutulo jne. |
Universaali ajastin | TIM2, TIM3, TIM4, TIM5 | APB1 | Siinä on kaikki perusajastimen toiminnot, ja siinä on lisätoimintoja, kuten sisäisen ja ulkoisen kellon lähteen valinta, tulon sieppaus, lähtövertailu, kooderiliitäntä, isäntä-orja laukaisutila jne. |
perusajastin | TIM6, TIM7 | APB1 | Siinä on ajastetun keskeytyksen ja isäntätilan toiminnot, jotka laukaisevat DAC:n |
Päätoiminto:
Esiskaalaaja PSC
Viitelaskentakellon tulo on kytketty ennen esiskaalainta. Koska perusajastin voi valita vain sisäisen kellon, esiskaalaimen tulolinjan voidaan katsoa olevan kytketty sisäiseen kelloon (CK_INT).
Sisäisen kellon lähde on RCC:n TIMxCLK. Taajuusarvo tässä on yleensä järjestelmän päätaajuus 72MHz.
0:n kirjoittaminen esiskaalaajaan tarkoittaa, että taajuusjakoa ei ole jaettu 1 tarkoittaa taajuuden jakamista kahdella ja lähtötaajuus = tulotaajuus/2 = 36 MHz.
2:n kirjoittaminen tarkoittaa jakamista kolmella ja lähtö = input/3. Siksi esiskaalaimen arvo eroaa todellisesta taajuusjakokertoimesta yhdellä ja todellinen taajuusjakokerroin = esijakokertoimen arvo 1. Esiskaalaaja on 16-bittinen, joten maksimiarvona voidaan kirjoittaa 65535, joka jaetaan 65536:lla.
Laskuri CNT
Laskuri voi laskea esijaetun laskentakellon Joka kerta kun laskentakello saavuttaa nousevan reunan, laskurin arvo kasvaa yhdellä. Laskuri on myös 16-bittinen, joten sen sisällä oleva arvo voidaan lisätä välillä 0 - 65535. Jos lisää lisätään, laskuri palaa nollaan ja alkaa alusta. Siksi laskurin arvo jatkaa kasvuaan laskentaprosessin aikana Kun lisäys saavuttaa tavoitearvon, keskeytys luodaan ja ajoitettu tehtävä suoritetaan. Siksi kohdearvon tallentamiseen tarvitaan rekisteri, joka on automaattinen uudelleenlatausrekisteri.
Automaattinen uudelleenlatausrekisteri
Automaattinen uudelleenlatausrekisteri on myös 16-bittinen, ja se tallentaa kirjoitettavan laskentakohteen. Ajon aikana laskenta-arvo jatkaa kasvuaan, ja automaattinen uudelleenlatausarvo on kiinteä tavoite. Sitten se tuottaa keskeytyssignaalin, tyhjentää laskurin ja laskuri alkaa automaattisesti seuraavan laskenta-ajan.
U- ja UI-nuolet
Kuvaan piirretty ylöspäin osoittava nuoli tarkoittaa, että tässä syntyy keskeytyssignaali. Tällaista keskeytystä, jonka laskenta-arvo on yhtä suuri kuin automaattinen reload-arvo, kutsutaan yleensä "päivityskeskeytykseksi". Tämä päivityskeskeytys johtaa NVIC:hen, kun olemme määrittäneet NVIC:n ajastinkanavan, CPU vastaa ajastimen päivityskeskeytykseen. Alanuoli osoittaa, että tapahtuma luodaan, ja vastaavaa tapahtumaa kutsutaan tässä "päivitystapahtumaksi". Päivitystapahtumat eivät laukaise keskeytyksiä, mutta voivat laukaista muiden sisäisten piirien toiminnan.
Päätoiminto:
16-bittinen ylös, alas, ylös/ylös automaattinen uudelleenlatausakun laskuri
16-bittinen ohjelmoitava esiskaalaaja, jota käytetään jakamaan tulokello millä tahansa arvolla välillä 1 - 65536
4 itsenäistä kanavaa:
Synkronointipiirit, jotka ohjaavat ajastimia ja ajastimia toisiinsa ulkoisten signaalien avulla
Keskeytys/DMA luodaan, kun seuraavat tapahtumat tapahtuvat:
Tukee inkrementaalista (kvadratuuri) kooderia ja Hall-anturipiirejä paikannusta varten
Liipaisutulo ulkoisena kellona tai jaksoittainen virranhallinta
CNT-laskuri
CNT-laskuri tukee ylös-, alas- ja keskikohdistustilaa. Alaspäin laskeva laskentatila alkaa uudelleenlatausarvosta ja laskee alaspäin, kun se laskee nollaan, se palaa uudelleenlatausarvoon ja koskee keskeytystä. Keskikohdistettu tila alkaa 0:sta, kasvaa ensin ylöspäin, laskee uudelleenlatausarvon ja ottaa käyttöön keskeytyksen ja laskee sitten alas nollaan ja ottaa sitten käyttöön keskeytyksen.
kellon lähde
Yleisen ajastimen kellolähde ei voi valita vain sisäistä 72 MHz kelloa, vaan se voi myös valita ulkoisen kellon.
(1)Ensimmäinen ulkoinen kello on alkaenUlkoinen kello TIMx_ETR-nastassa , eli voit liittää ulkoisen neliöaaltokellon TIM2:n, PA0:n ETR-pintaan ja määrittää sitten sisäisen napaisuuden valinnan, reunan havaitsemisen ja esiskaalauksen piirin sekä tulosuodatinpiirin tiettyä muotoilua. Koska se on ulkoinen nastakello, siinä tulee väistämättä joitain häiriöitä, joten nämä piirit voivat suodattaa tuloaaltomuodon. Suodatettu signaali jaetaan kahteen kanavaan Ylempi ETRF-kanava tulee liipaisuohjaimeen, jonka jälkeen kello voidaan valita aikaperusyksiköksi. Tätä tietä kutsutaan myös "Ulkoinen kellotila 2”。
(2) TRGI voi tarjota myös ulkoisen kellon , käytetään pääasiassa laukaisutulona. Tämä liipaisutulo voi laukaista ajastimen orjatilan. Kun TRGI:tä käytetään ulkoisena kellona, tätä polkua kutsutaan "Ulkoinen kellotila 1". Mitkä ulkoiset kellot kulkevat tämän polun läpi? Ensimmäinen on ETR-nastan signaali. Toinen on ITR-signaali. Tämä osa kellosignaalista tulee muista ajastimista. Master-tilassa oleva TRGO voi johtaa muut ajastimet Yhdistetään muiden ajastimien ITR-nastoihin ITR0 - ITR3. Voit myös valita TI1F_ED:n, joka on kytketty tähän tulon sieppausyksikköön. CH1-nasta, eli kello saadaan CH1-nastasta. Suffiksi ED (Edge) tarkoittaa tässä reunaa. Se voidaan saada myös TI1FP1:n kautta ja TI1FP2 on kello, joka on kytketty CH1-nastaan CH2-kello.
Yhteenveto: Ulkoisen kellomoodin 1 tulo voi olla ETR-nasta, muut ajastimet, CH1-nastan reuna, CH1-nasta ja CH2-nasta.
Lähtövertailupiiri
Alla oleva oikea osa on lähtövertailupiiri. Kanavia on yhteensä neljä, jotka vastaavat CH1-CH4-nastoja, joita voidaan käyttää PWM-aaltomuotojen ja käyttömoottoreiden lähettämiseen.
Tulokaappauspiiri
Vasemmalla on tulon sieppauspiiri, jossa on myös neljä kanavaa, jotka vastaavat nastoja CH1-CH4, joilla voidaan mitata sisäänmenon neliöaallon taajuutta jne.
kaapata/vertaa rekisteri
Keskimmäinen rekisteri on sieppaus/vertailurekisteri, joka jaetaan tulon sieppaus- ja lähtövertailupiirien kesken. Koska tulon sieppaus- ja lähtövertailua ei voida käyttää samanaikaisesti, tässä olevat rekisterit jaetaan ja myös nastat jaetaan.
Päätoiminto:
Toista laskuri
Ero yleiseen ajastimeen: ensimmäinen on lisätä toistolaskuri, jossa keskeytys on käytössä. Tämän laskurin avulla on mahdollista ymmärtää, että päivitystapahtumat ja päivityskeskeytykset tapahtuvat vain muutaman laskentajakson välein. Alkuperäinen rakenne on, että päivitys tapahtuu jokaisen laskentajakson päätyttyä, mikä vastaa lähtöpäivityssignaalin jakamista uudelleen.
DTG kuollut kaistageneraattori ja täydentävä lähtö
Seuraavassa on edistyneen ajastimen suorittama tulosten vertailumoduulin päivitys. DTG (kuollut aikagenerointi) on kuollut alue. Oikeanpuoleinen lähtönasta on vaihdettu kahdeksi täydentäväksi ulostuloksi, jotka voivat tuottaa parin toisiaan täydentäviä PWM-aaltoja. Näitä piirejä käytetään kolmivaiheisten harjattomien moottoreiden, kuten nelikopterien, sähköisten takapyörien ohjaamiseen. ajoneuvot ja sähköporat, se voi olla kolmivaiheinen harjaton moottori. Koska kolmivaiheisen harjattoman moottorin käyttöpiiri vaatii yleensä 3 siltavartta, jokaista siltavartta ohjataan kahdella suuritehoisella kytkentäputkella, joten tarvitaan yhteensä 6 suuritehoista kytkentäputkea. Siksi kolmesta ensimmäisestä PWM-lähtönastasta tulee tässä täydentäviä lähtöjä. Lisäksi laitteen kytkentähetkellä epätäydellisistä syistä johtuvan lyhytaikaisen läpilyöntiilmiön estämiseksi, kun komplementtilähtö PWM ohjaa siltavartta, eteen on lisätty kuolleen alueen generointipiiri. Kytkintä kytkettäessä syntyy tietyn pituinen kuollut vyöhyke, jonka avulla siltavarren ylä- ja alaputket voidaan kytkeä pois päältä läpilaukauksen estämiseksi.
jarrun sisääntulo
Viimeinen osa on jarrun syöttötoiminto, joka takaa moottorikäytön turvallisuuden. Jos ulkoinen nasta BKIN (Break IN) tuottaa jarrusignaalin tai sisäinen kello epäonnistuu ja tapahtuu vika, ohjauspiiri katkaisee automaattisesti moottorin lähdön onnettomuuksien estämiseksi.
Toiminnan ohjaus: ohjaa joitain rekisterin bittejä, kuten aloitus ja lopetus, laskenta ylös tai alas jne.
Oikealla puolella signaali menee sen jälkeen, kun ajastusaika on umpeutunut ja päivityskeskeytys syntyy. Keskeytyssignaali asettaa ensin keskeytyslippubitin tilarekisteriin. Tätä lippubittiä ohjataan keskeytyslähdön kautta ja se hakee keskeytystä NVIC:lle. Keskeytyslähtöohjaus on keskeytyksen salliva bitti. Jos tarvitset keskeytyksen, muista sallia se.
Automaattilatausrekisteri on muutettu arvosta FF arvoon 36, ja laskenta-arvon tavoitearvo on muuttunut FF:stä 36:een, joten 36:n laskemisen jälkeen se päivitetään suoraan seuraavan laskentakierroksen aloittamiseksi.
Muuta laskentaa kesken laskennan tavoitearvo arvosta F5 arvoon 36. Alla on varjorekisteri. Se on edelleen F5, joten nyt laskentakohde laskee edelleen F5:een. Samanaikaisesti muutettava 36 välitetään varjolle rekisterissä ja seuraavassa laskussa Tämä muutos on voimassa vain jos sykli on 36, joten varjorekisterin käyttöönoton tarkoitus on itse asiassa synkronointi, eli sallia arvojen muutosten ja päivitystapahtumien tapahtuminen synkronisesti muutosten aiheuttamien virheiden estämiseksi operaation aikana.
kellon lähde
Kellon generointipiirissä on neljä värähtelylähdettä:
(1) HSI: Sisäinen 8 MHz:n nopea RC-oskillaattori;
(2) HSE: Ulkoinen 4–16 MHz:n nopea kvartsikideoskillaattori, joka tunnetaan myös nimellä kideoskillaattori, on yleensä kytketty 8 MHz:iin;
(3) LSE: Ulkoinen 32,768 KHz:n hidas kideoskillaattori, joka yleensä tarjoaa kellon RTC:lle;
(4) LSI: Lopuksi on sisäinen 40 kHz:n hidas RC-oskillaattori, joka voi tarjota kellon vahtikoiralle.
Yllä olevia kahta nopeaa kideoskillaattoria käytetään järjestelmän kelloon. AHB:n, APB2:n ja APB1:n kellot on johdettu näistä kahdesta nopeasta kideoskillaattorista sisäinen RC-oskillaattori, joten se on yleensä Käytä ulkoista kideoskillaattoria.
ST konfigurointikello
SystemInit-toiminnossa ST konfiguroi kellon: ensin se käynnistää sisäisen kellon HSI:n, valitsee sisäisen 8MHz:n järjestelmän kelloksi ja toimii väliaikaisesti sisäisen 8MHz:n kellon kanssa. Käynnistä sitten ulkoinen kello, konfiguroi ulkoinen kello siirtymään PLL-vaihelukittu silmukka taajuuden kertomista varten, 8MHz kerrotaan 9-kertaisesti ja saat 72MHz Kun vaihelukitun silmukan lähtö on vakaa, valitse vaihelukittu silmukka lähtö järjestelmän kellona, niin että järjestelmän kello Vaihdettu 8MHz:stä 72MHz:iin.
CSS-kellon turvajärjestelmä
CSS (kellon turvajärjestelmä): Kellon turvajärjestelmä vastaa myös kellojen vaihtamisesta järjestelmän kellon ja estää ohjelman juuttumisen Tapaturman aiheuttama kuolema.
kellon jakelupiiri
*2
, ja sitten oikealla puolella se avataan erikseen ajastimille 2-7, koska esiskaalaajakerroin tässä on 2, joten taajuuden tulee olla*2
, joten ajastimiin 2-7 johtava kello on 72 MHz. Siksi, olipa kyseessä edistynyt ajastin, yleinen ajastin tai perusajastin, niiden sisäinen referenssikello on 72 MHz.*2
. Koska taajuusjakokerroin on 1, ajastinten 1 ja 8 kellot ovat 72 MHz.// 恢复缺省配置
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);