STM32F0 timer3

Jan Waclawek konfera na efton.sk
Úterý Říjen 16 10:14:44 CEST 2012


Aha.

Ako vravim, ten timer v ST32 (v podstate su vsetky pouzite typy len zjednodusujuce odvodeniny z jedneho velmi zloziteho) je fakt zlozity ako orloj, a toto je naozaj pomerne tazka uloha.

Ako nulte je treba si nakonfigurovat systemove hodiny pre jadro a jednotlive zbernice, potom zapnut hodiny pre danu periferiu (bit TIM3EN v registri RCC_APB1ENR - ja tu ich akoze kniznicu nepouzivam, podla mna je to uplne zbytocny a matuci medzikus), to uz pravdepodobne viete. Mozno nie je na skodu resetnut ten timer nastavenim a vynulovani bitu TIM3RST v RCC_APB1RSTR (z takeho dovodu, ze ak pouzivate ladiace berlicky typu JTAG/SWD, tak tie nemusia vygenerovat plnohodnotny reset a tym padom nie vsetky registre su v defaultnych stavoch, z toho potom mozu vzniknut rozne "zaujimave" efekty).

Ako prve je namapovat dany pin (povedzme ze PC8) ako alternativnu funkciu (TIM3_CH3), to predpokladam ze uz viete (v registroch GPIO). Ze aj PB0 ma jednu z alternativnych funkcii TIM3_CH3, tak tym si hlavu nelamte - jednoducho PB0 na tuto funkciu nenastavite a bodka.

Dalej nastavite TIM3_CH3 ako vystup z compare jednotky (a teda nie vstup do capture jednotky; t.j. ked pozerate na blokovku timera, tak vyberiete ho ako "jeden zo 4 vystupov vpravo" naproti moznosti "jeden zo 4 vstupov vlavo". Z tej blokovky nevyplyva ze to je "bud/alebo", ale je to naozaj tak.). Nastavuje sa to bitmi OC3S v registri TIM3_CCMR2 (ale je to po resete nastavene na output, takze vlastne nic tam netreba zapisovat). Tym je mimochodom automaticky dane aj to, ze bude dany pin vystupom (to nie je z user manualu vobec jasne, vid napr. https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fAlternate%20Function%20Input%20on%20STM32F4&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&TopicsView=https%3A%2F%2Fmy.st.com%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FAllItems.aspx&currentviews=150 )

Potom nastavite rezim pre vystup. Moznosti je viac, ale ked chcete len jednoduche 1:1 blikanie, tak si nastavte "Toggle". Nastavuje sa to bitmi OC3M tiez v registri TIM3_CCMR2 (pre popis si pozrite bity OC1M v registri TIM3_CCMR1, resp.text v danej kapitole, ale z toho textu sa vela nedozviete, skor Vas len zbytocne zmatie). Toggle znamena, ze vzdy ked sa aktualna hodnota citaca (TIM3_CNT) rovna hodnote v capture/compare registri (TIM3_CCR3), tak sa zmeni "hodnota" vystupu.

Teraz si nastavte samotny citac. Najprv zvolte zdroj hodin zo systemovych hodin resp. z hodin APB zbernice, na ktorom je dany timer zaveseny (APB1), bity SMS v TIM3_SMCR (ale znova to staci nechat tak, lebo to je defaultna hodnota). Potom si povedzte, ako rychlo chcete blikat, nastavenim TIM3_ARR registra (na nenulovu hodnotu). Ak by to malo takto blikat prilis rychlo (TIM3 je 16-bitovy, t.j. ak nemate systemove hodiny nejako nezvycajne nizko nastavene, tak to naozaj bude prilis rychlo), tak nastavte este aj nejaku vhodnu hodnotu prescalera do TIM3_PSC.

Napokon nastavte compare hodnotu do TIM3_CCR3 na cokolvek v rozsahu, v ktorom timer chodi, t.j. od 0 do TIM3_ARR.

To je viacmenej vsetko, ostatne registre treba nechat v defaultnych stavoch a malo by to blikat.


Tak co, bolo to tazke? :-)


wek




----- Original Message ---------------

Subject: RE: STM32F0 timer3
   From: Michal Grunt <michal.grunt at vynet.cz>
   Date: Tue, 16 Oct 2012 09:05:57 +0200
     To: HW-news <hw-list at list.hw.cz>

>Rozblikat pomoci casovace LED na STM32F0 discovery kitu, ktera je pripojena na PC8(9) - LEDky jsou dve tak jednu z nich.
>
>MG
>
>________________________________________
>Odesílatel: hw-list-bounces at list.hw.cz [hw-list-bounces at list.hw.cz] za u¾ivatele Jan Waclawek [konfera at efton.sk]
>Odesláno: 16. øíjna 2012 0:16
>Komu: HW-news
>Pøedmìt: Re: STM32F0 timer3
>
>Timery u ST32 su velmi zlozite. Nemam pred sebou manual k f0, ale s najvacsou pravdepodobnostou su vo vsetkych radoch rovnake, a tie styri vstupy a vystupy su do a z capture/compare jednotky.
>
>Co chcete dosiahnut?
>
>wek
>
>
>
>Michal Grunt <michal.grunt at vynet.cz> wrote:
>
>>Jak presne funguje timer3 u STM32F0? Koukal jsem na blokove schema a z
>>leva to ma 4 vstupy a na prave strane jsou 4 vystupy. Navic dle
>>datasheetu jsou na timer 3 namapovany portu PB0 (ch3) a PC8 (ch3). Z
>>datasheetu a z refman9 informace nejak nedokazu vytahnout.
>>
>>Dekuji, MG



Další informace o konferenci Hw-list