Časovače sú súčasťou periférie ovládača STM32, čo nám umožňuje aj presne hodinu. Tse, mabut, jedna z najdôležitejších a najviac víťazných funkcií, prote є y іnshі. Je potrebné vidieť, že v regulátoroch STM32 sú časovače stúpajúceho stupňa strmosti. Nayprostіshі tse Základné časovače ... Stinks sú dobrý tím, ešte jednoduchšie je upravovať a spravovať s pomocou minima registrov. Všetko, ak je smrad v strede časových intervalov hodín a generátory, ak časovač dosiahne nastavenú hodnotu. Skupina napreduje ( univerzálne časovače ) strmší ako prvý, smrad v generátore PWM, vo vvazhatých impulzoch, môžete ísť na spev nizhki, môžete pripojiť kodér atď. 1. najlepší časomer pokročilý časovač ovládania , Myslím, že opäť nevyhrám, keďže som odišiel bez potreby trojfázového elektromotora keruvati. Zoznámte sa s časovačmi Teraz je to jednoduchšie, rozhodol som sa začať so základnými časovačmi. Zvdannya, ako som to povedal: Časovač Zmusiti generuje druhú kožu.

V prvom rade to znamená, že na zbernicu APB1 sú pripojené základné časovače (TIM6 a TIM7), keďže frekvencia hodinových impulzov sa v určitom bode zmení, potom budú časovače vyššie alebo vyššie. Ak sa v úpravách taktu nič nezmení a ak sa prepíšu, tak frekvencia APB1 nastavte 24 MHz pre zvod, kde je pripojenie prstenca quartz na frekvenciu 8 MHz. Hodinový systém STM32 je ešte prefíkanejší a pokúsim sa o ňom napísať okremiy príspevok. A odchod je len rýchly súbor vylepšení, ktoré nastavuje kód automaticky generovaný CooCoxom. Pozrite si varto z národného registra TIMx_CNT(Tu i dal x je číslo základného časovača 6 alebo 7). Veľa 16-bitových registrov, takže môžete stráviť hodinu bez prestávky. Shhorazu if z shini APB1 prísť hodinovým impulzom, namiesto registra, vrátiť sa na jeden. Ak sa register prestaví, všetko sa opraví od základov. Pre našu predvolenú frekvenciu zbernice APB1 nie je časovač na jednu sekundu 24 miliónov krát! Tse duzhe dofiga, a k tomu časovač predajcu, keruvati yakim môže byť pomocou registra TIMx_PSC... Po zapísaní v novej hodnote 24000 - 1 mi zmusimo lychilny register TIMx_CNT zbilshuvati svoju hodnotu na milisekundu kože (Frekvencia APB1 dlimo číslom v registri preddeličky a je prijateľné zmeniť počet krát za sekundu na výmenu filtra). Jednotka požiadavky na odstránenie šrotu z evidencie je nula, čo znamená, že počet inklúzií je na jednu jednotku. Teraz, ak najlepší registrátor dosiahne 1000 míľ, môžeme s istotou povedať, že uplynula len jedna sekunda! І Aký je teraz najlepší registrátor a pozrite sa na doky, ktorých bude 1000? Toto nie je naša metóda, môžeme ju tiež použiť! Ale bida, perevvannya s nami úplne sám, a nie vyhrať, ak je kamera resetovaná na nulu. Plnič bol pred termínom vynulovaný a ak nedosiahol 0xFFFF, slúži ako register TIMx_ARR... Bude zapísané v rovnakom čísle, do ktorého registra dorakhovuvati je vinná TIMx_CNT pred yakom, vynulujte. Ak to chceme vidieť raz na sekundu, musíme si zapísať týchto 1000. Ale samotný časovač nevie, ako to vidieť na hodinu. Yogo je potrebné zapnúť po nainštalovaní bitu CEN pri registri TIMx_CR1... Tsey bit vám umožňuje vidieť obrázok, ako keby bol odhodený, potom ste ho videli (vaše K.O.). Na registri є y іnshi bije, ale smrad nie sme zvlášť tsіkavі. Dajte nám ďalší kúsok tsіkaviy, ešte viac v registri TIMx_DIER... Volať sa vin UIE, po jeho nastavení môže časovač generovať prenos, keď je registrácia odstránená. Os je silnejšia ako všetko, nejde hladko, nie je ani v niektorých AVR. Otzhe, nie skvelé zhrnutie: Na opravu základného časovača je potrebné:

  1. Nainštalujte preddeličku s časovačom bez rýchleho klepania ( TIMx_PSC)
  2. Stanovte hranicu, do ktorej sa časovač previní tým, že sa pohral s vlastným šmykom ( TIMx_ARR)
  3. Zakryte bitom CEN pri registri TIMx_CR1
  4. Povoliť opätovné priradenie pomocou bajtov opätovného priradenia UIE pri registri TIMx_DIER

Os je taká jednoduchá konzistencia. A teraz sme mimochodom inštruovali hodinu a skúsili sme miliónkrát žmurknúť s nešťastným svitlodiodom, celkom pre dodatočný časovač 🙂

#include "stm32f10x.h" #include "stm32f10x_gpio.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" int main () (GPIO_InitTypeDefing RCClock time /APBGP2 PORT s portom /APBGP2 Include LED diódy na výstupe PORT.GPIO_Pin = (GPIO_Pin_9 | GPIO_Pin_8); PORT.GPIO_Mode = GPIO_Mode_Out_PP; PORT.GPIO_Speed ​​​​= GPIO_Speed_2MHz časovač = 1000-krát pre AR 1000 sekúnd; TDI DIER6 raz za sekundu; prepis TDI DIER6 za sekundu / THUIM / je povolené prepísať časovač TIM6-> CR1 | = TIM_CR1_CEN; NVIC_EnableIRQ (TIM6_DAC_IRQn); // Získať nenahlásený cyklus TIM6_DAC_IRQn)) // Vzorkovač prevodu TIM6_DAC void TIM6_DTIOCMoid TIM6_DDRAC_IRQH ^ = (GPIO_Pin_9 | GPIO_Pin_8); // Obrátený sklad na osvetlenie svetelných zdrojov)

Varto dodati trochu pozornosti obrobnik perevvannya. Napravo v tom sme víťazní naraz s dvoma blokmi periférie: časovačom 6 a DAC. To znamená, že ak napíšete program, ktorý vám umožní výmenu medzi oboma periférnymi prílohami, potom v prípade obroblyuvach musíte niektoré z nich vymeniť. V našom vipadku som sa nestal robotizovaným, takže neexistuje žiadny spôsob, ako by som nemohol vyhrať niektorý z týchto DAC. Vyhrajte nie úpravy, ale štandardne spevnené po lehote splatnosti. Univerzálne časovače sú okamžite viditeľné a praktické.

Mať sprostý ovládač є časovače... Majú tsіy statti mova pіde about jednoduché (základné) objavenie časovačov stm32f4.
Tse špeciálne časovače. Smrad 16 bitov s automatickým re-intailingom. Okrem є 16 bitových programov predajca frekvencií... Є schopnosť generovať re-re-re-re-re-zapis sestryže / abo energizoval DMA.

Pokračujte. Yak a skôr, hádam Eclipse + st-util na ubuntu linux

Ďalšie nadpisy:

#include #include #include #include #include

Pre tsyomu nie je nič nové. Nie je to jasné, páchnuce hviezdy pochádzajú alebo si prečítajte predné štatistiky alebo otvorte súbor a prečítajte si ho.

Vizuálne dve konštanty. Jeden pre zmysluplné deti, іnshu rad samotných tichých detí:

Const uint16_t LEDS = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; // vsetky diody const uint16_t LED = (GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15); // pole s diódami

Shvidshe pre všetkých rovnako poznáte funkciu periférie (tobto diodiv):

Void init_leds () (RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOD, ENABLE); // povolenie hodín GPIO_InitTypeDef gpio; // štruktúra GPIO_StructInit (& gpio); // nastavenie gpio na všetky štandardy gpio, & gpi; GPIOD);

Funkcia časovača:

Void init_timer () (RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6, ENABLE); // zahŕňa hodiny časovača / * Tieto parametre TIM_TimeBaseInitTypeDef * neignorujú zmysel pre základ * TIMBase / baseTimer. / Timer 104000 base 1000 impulzov TIM_TimeBaseInit (TIM6 a base_timer); Spustenie časovača TIM6. * / TIM_ITConfig (TIM6, TIM_IT_Update, ENABLE); TIM_CmdIR_NVAC; ENABLE

Komentoval som kód, takže si myslím, že je všetko jasné.
Kľúčovými parametrami sú tu časovač (TIM_Prescaler) a perióda (TIM_Period) časovača. Tse parametre, ako vasne a naladit casovac robota.

Napríklad, ak je vaša hodinová frekvencia STM32F4 DISCOVERY nastavená na 48 MHz, potom je hodinová frekvencia na časovačoch 24 MHz. Ak nastavíte časovač (TIM_Prescaler) 24000 (frekvencia rakhunku = 24MHz / 24000 = 1KHz) a periódu (TIM_Period) 1000, tak časovač zobrazí interval 1s.

Beštiálny rešpekt, ako tse ležal v taktovacej frekvencii. Її vi maєte z'yasuvati určite.

To tiež znamená, že pri vysokých frekvenciách je miešanie svitlodiod podľa perevvannuyu rovnaká frekvencia. S hodnotou 1 MHz na výstupoch, ktoré získali približne 250 kHz, tobto. rozdiel nie je prijateľný. Takýto výsledok môže prejsť cez vitrati hodinu.

Globálna zmena je zástancom diódy, ako spáliť:

príznak U16 = 0;

Interviewer, ktorý generuje časovač. Pretože súčasne sa generuje, keď je DAC robotický, niekoľkokrát sa zmenil zo samotného časovača:

Void TIM6_DAC_IRQHandler () (/ * Takto by mal byť vzorkovač pre DAC zlý, musíte to zmeniť, * ak sa vám to znova zobrazí opätovnou aktualizáciou časovača TIM6. * / If (TIM_GetITStatus_ 3Upd, = príznak TIM_IT! / * Vyčistite bit z odlúpnutého čakajúceho bitu * / TIM_ClearITPendingBit (TIM6, TIM_IT_Update);

Hlavná funkcia:

Int main () (init_leds (); init_timer (); do () while (1);)

Cyklus je príliš prázdny. Úradník vikonuje svojho robota asynchrónne, ale ak ho nezachytí operácia, v danom momente bude vikonuyutsya.

Už sme sa pozerali na časovač SysTick, ktorý je súčasťou jadra Cortex. Tým sa však všetko nekončí. Časovače na stm32 sú bohaté a smrad rachotí. Potom budete mať možnosť zavibrovať časovač chi іnshy:

  • SysTick;
  • univerzálny časovač - TIM2, TIM3, TIM4, TIM15, TIM16, TIM17;
  • push-in časovač (anglický pokročilý časovač) - TIM1;
  • strážny časovač.

O pobyte varto budete ochudobnení o tie, ale existujú určité náznaky pre ovládanie zamrznutia systému a časovača, ktorý je potrebné pravidelne preskakovať. Ak sa časovač neodstráni natiahnutím intervalu spievania o jednu hodinu, časovač strážneho psa musí znova aktivovať systém (mikroovládač).

Časovače sú veľmi bitové: napríklad SysTick je 24-bitový a všetky časovače, no, máme kamene - 16-bitové (takže môžete rakhuvati až do 2 16 = 65535), okrem WatchDog. Okrem toho je tu časovač kože pre niekoľko kanálov, takže cez deň sa to dá robiť v dvoch, troch atď. Digitálne časovače možno použiť s inkrementálnymi kódovačmi, Hallovými senzormi a môžu generovať pulz šírky impulzu. Modulácia – povedzme si o tom, ale je toho veľa. Okrem toho môže smrad generovať zmenu alebo napájanie ostatných modulov (napríklad DMA - Direct Memory Access) za novými modulmi:

  • pretečenie;
  • zachytenie vstupu;
  • výstup komperovať;
  • spúšťač udalosti.

Hneď ako sa časovač prestavil (presnejšie, dosiahol „0“), SysTick nás všetkých pozorne sledoval – roboty ešte nevedeli o najvýkonnejších režimoch. Poďme sa pozrieť na prednášky.

Pretečenie signálu

Celý režim je láskavý, ale bude trvať určitý čas, kým impulzy prejdú (napríklad za sekundu). Ak príde impulz z MC, časovač vygeneruje zmenu, takže môžeme zobrať presnú hodnotu pilota (z registra TIM_CCRx, de x je číslo kanálu) a uložiť hovor. Potom nástup impulzu a jednoduchou obsluhou operácie možno dvoma impulzmi získať „hodinu“. Na pulz je možné vidieť prednú aj zadnú prednú časť, alebo naraz uraziť. Teraz to potrebujete? Predpokladajme, že máte magnet є, ktorý je nalepený na disku na kolesách a Hallov snímač je prilepený na vidlicu bicykla. Todi, balenie kolesa, môžete odstrániť kožný pulz raz, ak magnet na kolesách bude v rovnakej oblasti, rovnako ako Hallov senzor. S vedomím, že je to tak, Yaku rozlial magnet za otáčku a hodinu, môžete vypočítať rýchlosť ruchu.

K dispozícii je tiež jednoduchý režim zaplavovania PWM, rýchlejší špeciálny spôsob nastavenia časovača a režim robota nízkej úrovne: jeden kanál na zachytenie predných predných častí a druhý zadných predných častí. Prvý kanál je perióda detekcie a druhý je uložený.

Režim zhody

V takomto režime je vibračný kanál časovača zapnutý, kým nie je viditeľný pre vstup, a keďže časovač stále nie je nastavený, režim sa úplne zmení podľa nastaveného režimu (môže byť 1 alebo 0, ak je len prepne na vstup).

Režim generovania PWM

Ako názov, časovač pre takýto režim generuje moduláciu šírky impulzu. Reportáž o tomto režime, ako aj o tých, ktorí môžu / stoja, si povieme v ofenzíve rušne pri pohľade na signál.

Pomocou vloženého časovača je možné vytvoriť trojfázový SHIM, ktorý je v strede pre keruvannya trojfázový motor.

Režim mŕtveho času

Funkcia Tsya maє deyakі časovačov; je potrebný na aktiváciu spojenia na vstupoch, ktoré sú potrebné napríklad na aktiváciu najbežnejších reťazcov pred hodinou ovládania vypínačov.

V priebehu vikoristovuvati menej "preťažený signál" a "generácia PWM".

Režim zaplavovania je celý špeciálny režim časovača robota, ktorého podstata je v ofenzíve, kedy sa na spievajúcom mikrokontroléri zmení logická úroveň, význam príslušného registra sa zaznamená do posledného registra, ktorý sa nazýva tzv. povodňový register.

Na čo čakáš?
Pre dodatočný režim je možné meniť triviálnosť impulzu alebo periódu signálu.

Zaseknutý režim STM32 má niektoré špeciálne vlastnosti:

  • môže vibrovať, ktorá predná časť bude aktívna
  • Možnosť zmeniť frekvenciu vstupného signálu pre ďalší zdroj (1,2,4,8)
  • kožný kanálik na uloženie vybavenia so zabudovaným vstupným filtrom
  • na pripojenie signálu k alarmu je možné použiť časovač
  • pre dermálny kanál boli premiestnení dvaja kňazi, prvý sa objaví, keď dôjde k utopeniu, druhý, keď dôjde k utopeniu, keď sa zavedie prvý rozkaz

Na stanovenie povodňového režimu je určený register CCMR1(pre 1 a 2 kanály) CCMR2(pre 3 a 4), ako aj registr CCER, DIER.

Pozrime sa bližšie na bitové polia registra CCMR2, ktorý zobrazí pre nastavenie 4. kanála časovača, sa upraví v samotnej aplikácii. Aj keď by som chcel povedať, že v celom registri sú bitové polia, ako sa ukáže pri nastavení časovača v režime prevádzky.

CC4S- Visnachaє priamo na štvrtý kanál (vstup alebo výstup). Keď je kanál nastavený, vstupný signál je nastavený na zachytávanie

  • 00 - kanál pratsyu yak vihid
  • 01 - kanál pratsyuє yak vstup, rušiaci signál - TI4
  • 10 - kanálový vstup pratsyuє yak, signál rušenia - TI3
  • 11 - kanál pratsyuє yak vstup, rušenie signálu - TRC
IC4PSC- Viznachayut kofіtsієnt podіlu, pre signál
  • 00 - dilnik nezachyti, signal IC1PS sa tvori za skin pod
  • 01 - signál utopenia sa tvorí za kožným druhým podієya
  • 10 - signál záplavy sa vytvára za kožným štvrtým luskom
  • 11 - signál povodne sa tvorí za kožou ôsmy podієya
IC4F- indikácie nastavenia vstupného filtra, okrem počtu vibrácií, natiahnutím niektorého mikrokontroléra nereagujúceho na vstupné signály je možné upraviť aj frekvenciu vibrácií. V deň je pevná hodina dobiehania od okamihu príchodu frontu pred vibráciou „pidtverzhuyuchoi“.

Teraz sa pozrime na register CCER.

CC4E- Režim zaplavenia Vmikaє / vimikaє.
CC4P- začiatok prednej časti, kde dôjde k vysypaniu, 0 - predná časť, 1 - zadná časť.

registrujem sa DIER.

CC4DE- Umožnenie formvati feed až DMA.
CC4IE- Umožnenie odpočúvania zo zajatia.

Okrem toho, keďže došlo k pohrebu, vytvorí sa proces utopenia, pretože vystavím príkaz. Tse môže priniesť do generácie re-nárok, ktorý zapita DMA, ak je smrad povolený na registri DIER... Okrem toho môže byť úložný modul vytvorený programovo nainštalovaním bitového poľa do registra generovania modulu EGR:

Bitové polia CC1G, CC2G, CC3G a CC4G Povoliť generovanie toku z konkrétneho kanála

Pred prejavom, CCR1, CCR2, CCR3 a CCR4- Záplavový register, v ktorom je uložená hodnota časovača do signálu zaplavenia.

Aby bolo možné kontrolovať tvorbu signálu zaplavenia, register SR pre kožný kanál sú viditeľné dve prapori.

CC4IF- ak sa vytvorí signál zaplavenia, dôjde k jeho odpáleniu, aby bolo možné programovo prečítať informácie o registri zaplavenia / prevádzky.
CC4OF- vstať, keďže práporčík CC4IF nie je čistiaci signál, ale preplňovaný signál utopenia. Tsey prapor sa vymaže programovým zápisom nuly.

Teraz prevezmeme poznatky prakticky, z generátora signálu na vstup TIM5_CH4 sa odošle sínusová vlna na frekvencii 50Hz a skúsime zmeniť periódu. S cieľom urýchliť proces navrhovania vicoristovuvati DMA. Yaky visnovok MK vіdpovіdaє 4 kanálový TIM5 nájdete v datasit na MK v razdіlі Pinouty a popis pinov.

Pre DMA povinná registračná adresa CCR4 yak jogo os vedieť. Vidkrivaєmo RM0008že pri stole Zaregistrujte hraničné adresy známy z adresy cob TIM5.


zsuv na registr CCR4 možno nájsť v rovnakých dokumentoch na razdilі registrovať mapu.

#include "stm32f10x.h" #define TIM5_CCR4_Address ((u32) 0x40000C00 + 0x40) #define DMA_BUFF_SIZE 2 uint16_t buff; // Buffer uint16_t volatile T; void DMA2_Channel1_IRQHandler (void) (T = (buff> buff)? (buff - buff): (65535+ buff - buff); DMA2-> IFCR | = DMA_IFCR_CGIF1; // Povolenie na taktovanie prvého DMA modulu DMA2_Channel5_> CPAR V závislosti od adresy periférneho zariadenia - zaregistrujte výsledok konverzie ADC pre bežné kanály DMA2_Channel1-> CMAR = (uint32_t) buff; // Priradené -> CCR & = ~ DMA_CCR1_DIR; // Okamžitý priamy prenos údajov z periférie DMA2-> pamäť CNDTR = DMA_BUFF_SIZE; // Číslo prepísanej hodnoty DMA2_Channel1-> CCR & = ~ DMA_CCR1_PINC; -> CCR | = DMA_CCR1_MINC; // Adresy pamäte pre prírastok pamäte1 = DMAPS_Channel_Channel DMAPS1 | / DMA_1 Priority> ešte vyššia G / Povolenie DMA_CCR1_TCIE; // Povolenie DMA_CCR1_TCIE; // Povolenie DMA_CCR1_TCIE; // Povolenie DMA_CCR1_TCIE; // Povolenie DMA_CCR1_TCIE; // Povolenie DMA_CCR1_TCIE; // Povolenie DMA_CCR1_TCIE; // Povolenie DMA_CCR1_TCIE (v)DMA v hlavnom kanáli DMA; // zapni hodiny nnya port A, alternatívne funkcie a časovač RCC-> APB2ENR | = RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN; RCC -> APB; -> PSC = 56000-1; // nová frekvencia 1Khz TIM5-> CCMR2 | = TIM_CCMR2_CC4S_0; > CCER & = ~ TIM_CCER_CC4P; // zaplavenie vibrácií na nábežnej hrane TIM5-> CCER | = TIM_CCER_CC4E; // zapnutie režimu zaplavovania pre 4. kanál TIM5-> DIER | = TIM_DIER_CC4DE; // ak je povolené vytvárať TI, bude byť privádzaný do DMA -> DIER | = TIM_DIER_CC4IE; // prípustné opätovné uloženie TIM5-> CR1 | = TIM_CR1_CEN; // zapnite vypínač // NVIC-> ISER | = NVIC_ISER_SETENA_18; Prerušiť počas (1) ())

STM32 má ešte viac ovládateľných časovačov. Navigujte najmladší mikrokontrolér (STM32F030F4P6) є 4 takéto časovače.

8. Projekt Nalashtuumo - dodamo potrebuje súbory

Pre nastavenie časovača musíme zahrnúť súbor knižnice periférnych zariadení stm32f10x_tim.c. Takže kliknite pravým tlačidlom myši na Pracovný priestor (lіvoruch) v skupine StdPeriphLib, Pridať -> Pridať súbory, súbor LibrariesSTM32F10x_StdPeriph_Driversrcstm32f10x_tim.c.

Do súboru je potrebné pridať aj hlavičkový súbor. Otvorte stm32f10x_conf.h (pravým tlačidlom za názvom súboru v kóde „Otvoriť stm32f10x_conf.h“. Vyjadrite prosím komentár k riadku #include „stm32f10x_tim.h“.

9. Časovač Dodamo

Krytie s prázdnym cyklom je bluesové, ešte viac na tak pracovitom kryštáli ako je STM32 s kopou časovačov. Tom môže byť ľahko zachytený za časomierou.

STM32 má rôzne časovače, ktoré sú odvodené od sady výkonov. Nayprostіshі - Základné časovače, skladacie - Časovače na všeobecné použitie a nyskladnіshі - Pokročilé časovače. Jednoduché časovače sú prepojené iba jedinými hodinami. Skladacie časovače majú PWM. Najnovšie časovače môžu napríklad generovať 3-fázové PWM s priamymi a invertovanými výstupmi a mŕtvym časom. Musíme odpískať jednoduchý časovač pid číslo 6.

Tri z teórie

Všetko, čo potrebujeme, je časovač - až do singulárnej hodnoty tohto generavati perevvannya (takže cieľom je vikoristovuvati perevvannya). Časovač TIM6 je taktovaný zo systémovej zbernice, aj keď nie bez priemeru, ale cez preddeličku - jednoduché programovanie detektora-detektora (len v CPC boli uvoľnené špeciálne mikroobvodové detektory a naprogramované informácie boli jednoducho poskytnuté so špeciálnou chybou). Preddeličku je možné nastaviť, ak je hodnota 1 (tobto. Do chladiča použiť frekvenciu zbernice, 24 MHz) až 65536 (tobto. 366 Hz).

Hodiny signalizujú vo vašej vlastnej bunke, aby zvýšili vnútorné hodiny časovača a opravili ich od začiatku. Akonáhle hodnota výdajného stojana dosiahne hodnotu ARR, výdajný stojan sa prepočíta a vykoná sa zmena. Keď je časovač nastavený, pridám do chladiča 0 a spustím rakhuvati od nuly. Jednu hodinu môžem dostať zmenu (hneď, ako to bude nastavené).

Kvôli procesu existujú tri záhyby: є dva registre ARR - volací a interný. Na hodinu sa rakhunku presnejšie koreluje s interným registrom a nebude potrebné znova aktualizovať interný register z externého registra. V takom poradí je možné nekonečne meniť ARR za hodinu robotického časovača - kedykoľvek.

kód

Kód bude podobný predchádzajúcemu, pretože іnіtsіalіzatsіya všetkých periférií іnіdbuvatsya rovnakého typu - nie je to výhra, ale časovač TIM6 visí na zbernici APB1. Zahrnutý časovač: RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6, ENABLE);

Teraz je do typu TIM_TimeBaseInitTypeDef vložená štruktúra typu TIM_TimeBaseInit (TIM_TimeBaseStructInit), okamžite prenesená do funkcie časovača (TIM_TimeBaseInit) v pamäti.

TIM_TimeBaseInitTypeDef TIM_InitStructure; // Štruktúra je nastavená TIM_TimeBaseStructInit (& TIM_InitStructure); // Spustenie štruktúry TIM_InitStructure.TIM_Prescaler = 24000; // preddefinovaná TIM_InitStructure.TIM_Period = 1000; // Obdobie časovača TIM_TimeBaseInit (TIM6, TIM_InitStructure); // Funkcia pre nastavenie časovača TIM_Cmd (TIM6, ENABLE); // Zvýšte časovač

Aké sú magické čísla? Yak mi pam'yataєmo, na autobuse je hodinová frekvencia 24 MHz (s našimi úpravami projektu). Po nastavení časovača na 24 000 sa frekvencia zvýši na 24 tisíc a 1 kHz je prijateľná. Rovnaká frekvencia by mala byť spotrebovaná na vstupe časovača.

Hodnota zásobníka je 1000. Teraz môže byť zásobník obnovený po 1000 hodinových cykloch, tobto. rіvno za 1 sekundu.

V dôsledku toho máme dobrý časovač. Ale nie všetky.

10. Zbavenie sa internovaných

Dobre, perevvannya. Pre mňa, vezmite si smrad (na hodinu PIC) páchne ako tmavá fólia a ja sa v nej zasekávam, nie som víťazný - teda nie, z dobrého dôvodu. Majú však silu, ignorujte jaka nesprávnym spôsobom. Je pravda, že prechod na STM32 je pekná maličkosť, najmä mechanizmus jeho vývoja; ale tse pizze.

Yak, rešpektovali to skôr, časovač sa generoval v momente opätovného umiestnenia násypky - keď sa zapol drôt, zapol sa to isté, zapol a vypol sa to isté vpredu. Analyzujte frázu, prosím, čo potrebujeme:

  1. Zapnite prepísanie časovača TIM6;
  2. Zapnite opätovné priradenie časovača TIM6 pre opätovné priradenie kamery;
  3. Napíšte prenos procedúry-vzorka;
  4. Pislya obrobki perevannya odhodiť jogo.

Zlepšenie pererivanu

Zdá sa to veľa, nič sa tu neskladá. Ďalším krokom je povolenie prepisovania TIM6: NVIC_EnableIRQ (TIM6_DAC_IRQn); Prečo je to meno? Preto je v jadre STM32 rovnaký počet z TIM6 a DAC. Neviem, prečo je to také zničené – ekonomika, počet sobášov, alebo ako keby to bola zlá vec – neprinesiete žiadne problémy, vo svojom projekte nemáte DAC. Ak chcete navigovať v našom projekte, môžete použiť DAC - môžete ho použiť pri vstupe na prepísanie svojho používateľského mena, tohto. Mayzhe všetky іnshі časovače môžu byť monoaxiálne.

Nalashtuvannya podії-dzherela pererivan: TIM_ITConfig (TIM6, TIM_DIER_UIE, ENABLE); - Obsahuje remake časovača TIM6 pre podkľúč TIM_DIER_UIE, takže. Odoslanie aktualizácie hodnoty ARR. Je to ako spomienka z obrazu, oplatí sa to vidieť hneď z opätovného zdvihnutia sestry - takže je to to isté, čo potrebujeme.

V súčasnosti je kód časovača nasledovný:

RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6, ENABLE); TIM_TimeBaseInitTypeDef TIM_InitStructure; TIM_TimeBaseStructInit (& TIM_InitStructure); TIM_InitStructure.TIM_Prescaler = 24000; TIM_InitStructure.TIM_Period = 1000; TIM_TimeBaseInit (TIM6, & TIM_InitStructure); TIM_Cmd (TIM6, ENABLE); NVIC_EnableIRQ (TIM6_DAC_IRQn); TIM_ITConfig (TIM6, TIM_DIER_UIE, ENABLE);

Spracovanie pererivanu

Nie je možné spustiť projekt nákazlivým spôsobom - nepoznáte svoj vlastný sampler, ak chcete zmeniť časovač, ale ovládač je zavesený (presnejšie prejdite na sampler HARD_FAULT, mimochodom). Je potrebné to napísať.

Tri z teórie

Chyba je chyba matky, void TIM6_DAC_IRQHandler (neplatný). Tse im'ya, takže hodnosti vektora sú popísané v spúšťacom súbore (pre náš projekt startup_stm32f10x_md_vl.s - môžete to urobiť sami, 126 riadkov). Kvôli vektoru - centrálnej adrese kópie pamäte a keď sa jadro ARM presmeruje do oblasti cob (v preklade je spúšťací súbor úplne tvrdý, na kópii pamäte flash), prejdite na bzukot vektora tam, zmiešaný kód.

Obrátenie podії

Perche, ktorá má na svedomí smrť pri vchode do takého obrobníka, je v dôsledku zlomyseľnej reakcie premena. Infekčnosť sme zbavili jedného podіya, ale v skutočnom projekte na jednom časovači môže byť množstvo podіy. K tomu sa zmení kód a zmení sa zodpovedajúci kód.

V našom programe bude prevod vyzerať takto: ak (TIM_GetITStatus (TIM6, TIM_IT_Update)! = RESET) - všetko je inteligentné, funkcia TIM_GetITStatus sa prevedie na vzhľad zadaného podtypu časovača 1.

Očista práporčíka UIF

Ďalším krokom je čistenie praporčíka. Obráťme sa na obrázok: posledný graf UIF je rovnaký a prvý sa mení. Ak to nemôžete vyčistiť, nemôžete sa chytiť a ovládač opäť spadne do HARD_FAULT (to je to isté!).

Viconannya diy u pererivanni

Ide len o to, že tábor svitlodiodu je zmenený, ako v prvom programe. Dôvodom je, že teraz má byť náš program vykradnutý za zlomok nákladov! Kvôli tomu píšte správnejšie.

If (stav) GPIO_WriteBit (GPIOC, GPIO_Pin_8, Bit_SET); else GPIO_WriteBit (GPIOC, GPIO_Pin_8, Bit_RESET); stav = 1 - stav;

Vikoristovuєmo globálna zmena int stav = 0;

11. Celý kód pre projekt s časovačom

#include "stm32f10x_conf.h" int stav = 0; void TIM6_DAC_IRQHandler (void) (if (TIM_GetITStatus (TIM6, TIM_IT_Update)! = RESET) (TIM_ClearITPendingBit (TIM6, TIM_IT_Update); if (stav) = 1 - stav;)) void main () (RipctturePuc_HAPBPuc; ); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8, GPIO_Init (GPIOC, a GPIO_InitStructure), GPIO_WriteBit (GPIOC, GPIO_Pin_8, Bit_SET), RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM6, ENABLE); TIM_TimeBaseInitTypeDef TIM_InitStructure; TIM_TimeBaseStructInit (& TIM_InitStructure); TIM_InitStructure.TIM_Prescaler = 24 000; TIM_InitStructure.TIM_Period = 1 000; TIM_TimeBaseInit (TIM6, & TIM_InitStructure); (MDI, TIM_Cmd (TIM6, ENABLEQ_INITER6M) while (TIM6, ENABLEQIRUNDIRUNVIC); ())

Archív z projektu časovača.

Že pred prejavom môže časovač zmeniť nohu a seba, bez toho, aby zmenil manuálne spracovanie. Toto bude náš tretí projekt.

Celý cyklus:

1. Porti predstavil-vivodu

2. Časovač na prenos

3. Zadajte časovač

4. Názov NVIC

5. Inštalovateľný FreeRTOS

Zobrazenia príspevku: 235