TIMER
#include "stm32f4xx.h" GPIO_InitTypeDef GPIO_InitStructure !cu hinh GPIO! $%I&_InitTypeD $%I&_InitTypeDef ef $%I&_InitStr $%I&_InitStructure ucture ! cu hinh hinh muu uu tien n't! TI(_Time)seInitTypeDef TI(_Time)seStructure !cu hinh timer! *+id *+id *+id *+id
GPIO_&+nfi'urti+n,*+id- TI(se_&+nfi'urti+n,*+id- TI(2_&+nfi'urti+n,*+id- Dely,__IO uint32_t n&+unt-
*+ltile int32_t deu' int min,*+id / int32_t n+0time1lsttime GPIO_&+nfi'urti+n,- TI(se_&+nfi'urti+n,- TI(2_&+nfi'urti+n,- 0hile ,/ lsttime TI(_Get&+unter,TI(2-! ly 'i tri c+unter timer2! GPIO_T+''le)its,GPIO)1GPIO_Pin_- Dely,- n+0time TI(_Get&+unter,TI(2- deu' n+0time 5 lsttime 6 6 *+id GPIO_&+nfi'urti+n,*+id / ! cp xun' nhip ch+ p+rt ) ! 7&&_89)Periph&l+c:&md,7&&_89)Periph_GPIO)1 7&&_89)Periph&l+c:&md,7&&_ 89)Periph_GPIO)1 ;$8)<;- ! &+nfi'ure P) P) in +utput pushpull m+de ! GPIO_InitStructure.GPIO_Pin GPIO_InitStructure.GPIO_ Pin GPIO_Pin_ = GPIO_Pin_ GPIO_InitStructure.GPIO_(+de GPIO_InitStructure.GPIO_ (+de GPIO_(+de_O>T GPIO_InitStructure.GPIO_OType GPIO_InitStructure.GPIO_ OType GPIO_OType_PP GPIO_InitStructure.GPIO_Speed GPIO_InitStructure.GPIO_ Speed GPIO_Speed_(9? GPIO_InitStructure.GPIO_PuPd GPIO_InitStructure.GPIO_ PuPd GPIO_PuPd_$OP><< GPIO_Init,GPIO)1 @GPIO_InitStructure- 6
*+id TI(se_&+nfi'urti+n,*+id / !cp xun' nhip ch+ TI(4! 7&&_8P)Periph&l+c:&md,7&&_8P)Periph_TI(41 7&&_8P)Periph&l+c:&md,7 &&_8P)Periph_TI(41 ;$8)<;-
! Time se c+nfi'urti+n ! TI(_Time)seStructure.TI(_Prescler ,,System&+re&l+c:!2-!-5 freAuency ! TI(_Prescler B3 ! TI(_Time)seStructure.TI(_Peri+d 5 TI(_Time)seStructure.TI(_&l+c:Di*isi+n TI(_Time)seStructure.TI(_&+unter(+de TI(_&+unter(+de_>p TI(_Time)seInit,TI(41 @TI(_Time)seStructure- !nhy *+ n't :hi TI(4 trn + dem! TI(_IT&+nfi',TI(41TI(_IT_>pdte1;$8)<;- TI(_&md,TI(41 ;$8)<;-
6
$%I&_InitStructure.$%I&_I7C&hnnel TI(4_I7Cn $%I&_InitStructure.$%I&_I7C&hnnelPreempti+nPri+rity $%I&_InitStructure.$%I&_I7C&hnnelSuPri+rity $%I&_InitStructure.$%I&_I7C&hnnel&md ;$8)<; $%I&_Init,@$%I&_InitStructure-
*+id TI(2_&+nfi'urti+n,*+id / 7&&_8P)Periph&l+c:&md,7&&_8P)Periph_TI(21 ;$8)<;- ! Time se c+nfi'urti+n ! ! Timer 2 :h+n' nht *+ n't! TI(_Time)seStructure.TI(_Prescler TI(_Time)seStructure.TI(_Peri+d x TI(_Time)seStructure.TI(_&l+c:Di*isi+n TI(_Time)seStructure.TI(_&+unter(+de TI(_&+unter(+de_>p TI(_Time)seInit,TI(21 @TI(_Time)seStructure- TI(_&md,TI(21 ;$8)<;- 6
*+id Dely,__IO uint32_t n&+unt / 0hile,n&+unt55/ 6 6
#ifdef >S;_><<_8SS;7T *+id ssert_filed,uintB_t file1 uint32_t line / ! >ser cn dd his +0n implementti+n t+ rep+rt the file nme nd line er1 exE printf,"Fr+n' prmeters *lueE file s +n line dHrHn"1 file1 line0hile ,/6 6 #endif
Chức năng và hoạt động của các bộ đếm thời gian đa mục đích từ TIM2 đến TIM5 M!i bộ đếm thời gian nà" g#m c$ một bộ đếm %& bit t' động nạ( )ại *a+to,-.)oa/0 đ1c đi3+ 4hin b6i một bộ (-.7ca).- c$ th )8( t-9nh đ1c: Các tim.- nà" c$ th đ1c 7; /ụng cho nhi3+ mục đích< bao g#m c= đo độ /ài >+ng đ?+ vào *chế độ in(+t ca(t+-.0< tạo /ạng 7$ng tín hi@+ -a *chế độ o+t(+t com(a-. và ABM0 cng nh1 mục đích cD b=n )à đếm 4ho=ng thời gian đ#ng h#: M!i bộ tim.- đ3+ hoạt động hoàn toàn độc )8(< ngoài -a chEng c$ th đ1c đ#ng bộ hoạt động vFi nha+: Một 7G đHc đim chức năng chính của các bộ tim.- nà" • • •
•
ộ đếm %& bit tăngJgi=m a+to,-.)oa/ ộ A-.7ca).- %& bit< /Kng đ chia t?n 7G cho bộ đếm: L 4nh độc )8( cho các tác vụ In(+t ca(t+-.< N+t(+t com(a-.< ABM< Nn.,(+)7. o+t(+t: Tạo ngOt t-ong nhPng 7' 4i@n 7a+
Q(/at. bộ đếm v1t R+a giá t-S cao nhtJth( nht< 4h6i tạo bộ đếm • • •
In(+t Ca(t+-. N+t(+t com(a-. T-igg.- .v.nt Các chế độ của tim.- bao g#m
• • • • • •
Co+nt.- mo/. In(+t ca(t+-. N+t(+t com(a-. ABM in(+t mo/. Nn.,(+)7. mo/. ABM mo/.
T-ong m!i c+ h9nh chế độ 4hác nha+< tim.- c$ đHc đim hoạt động 4hác nha+: ChEng ta 7U )?n )1t t9m hi+ các chế độ nà" t-ong bài hVc nà" và các bài tiế( th.o: Ta 7U t9m hi+ chế độ đDn gi=n nht )à chế độ co+nt.- mo/. thWng th1ờng t-1Fc tin: XhGi chức năng chính t-ong một mo/+). tim.- )à bộ đếm %&,bit cKng vFi các thanh ghi )in R+an của n$: XhGi nà" gVi )à Tim., ba7. +nit *mục %5:Y:% t-ong Z.[.-.nc. Man+a)0: ộ đếm nà" c$ th đếm tăng< đếm gi=m hoHc c= tăng và gi=m: C)oc4 c( cho bộ đếm đ1c chia từ c)oc4 h@ thGng b6i một h@ 7G (-.7ca).-: XhGi tim.,ba7. bao g#m Y thanh ghi • • •
Thanh ghi co+nt.- *TIM>\C]T0 Thanh ghi (-.7ca).- *TIM>\A^C0 Thanh ghi a+to,-.)oa/ *TIM>\_ZZ0
M!i 4hi bộ đếm bS t-àn t-n *ov.-`o0 hoHc t-àn /1Fi *+n/.-`o0 4hi đếm gi=m< một +(/at. .v.nt đ1c 7inh -a: ộ đếm đ1c c( c)oc4 b6i đ?+ -a của bộ (-.7ca).- *>.m ig:% , mục %5:2< Z.[.-.nc. man+a)0
Prescaler
ộ (-.7ca).- th'c hi@n chia t?n 7G c)oc4 c( vào co+nt.- b6i một h@ 7G bt 49 ndm t-ong 4ho=ng từ % đến &55Y&: eiá t-S (-.7ca).- nà" c$ th đ1c tha" đfi nga" c= t-ong 4hi tim.- đang hoạt động và 7U c$ tác /ụng 4hi >=" -a một +(/at. .v.nt tiế( th.o: Các h9nh /1Fi đ" minh hVa tác /ụng của (-.7ca).- và 7' tha" đfi giá t-S nà" t-ong 4hi bộ đếm đang chạ"
Counter Mode: a) Chế độ đếm tăng (Upcounting mode)
T-ong chế độ +(co+nting< bộ đếm bOt đ?+ đếm từ giá t-S ch o tFi giá t-S a+to,-.)oa/ *đ1c )1+ t-ong thanh ghi TIM>\_ZZ0< 7a+ đ$ -.7ta-t từ và tạo -a một +(/at. .v.nt: Một +(/at. .v.nt c$ th đ1c tạo a 4hi bộ đếm ov.-`o hoHc đ1c 7inh -a b6i (h?n m3m bdng cách 7.t bit Qe t-ong thanh ghi TIM>\eZ: Xhi một +(/at. .v.nt >=" -a< tt c= cá c thanh ghi đ1c c8( nh8t và cờ +(/at. *bit QI t-ong thanh ghi TI M>\^Z0 đ1c 7.t và , A-.7ca).- b+.- đ1c nạ( )ại giá t-S từ thanh ghi (-.7ca).- c ont-o) *TIM>\A^C0: , Thanh ghi a+to,-.)oa/ 7ha/o của bộ đếm đ1c c8( nh8t v Fi giá t-S từ thanh ghi TIM>\_ZZ: j9nh /1Fi đ" minh hVa hoạt động của co+nt.-
^' 4hác bi@t giPa vi@c thanh ghi TIM>\_ZZ 4hWng đ1c (-.)o a/ và đ1c (-.)oa/ đ1c minh hVa t-ong 2 h9nh /1Fi đ"
Xhi đ1c (-.)oa/< giá t-S mFi ghi vào thanh ghi TIM>\_ZZ 7U c $ tác /ụng tại +(/at. .v.nt tiế( th.o *ig %k0< nế+ 4hWng đ1c ( -.)oa/ th9 giá t-S đ1c ghi mFi vào TIM>\_ZZ 7U c$ tác /ụng nga" )8( tức *ig %l0: Counter Mode: a) Chế độ đếm tăng (Upcounting mode)
T-ong chế độ +(co+nting< bộ đếm bOt đ?+ đếm từ giá t-S cho tFi giá t-S a+to,-.)oa/ *đ1c )1+ t-ong thanh ghi TIM>\_ZZ0< 7a+ đ$ -.7ta-t từ và tạo -a một +(/at. .v.nt: Một +(/at. .v.nt c$ th đ1c tạo -a 4hi bộ đếm ov.-`o hoHc đ1c 7inh -a b6i (h?n m3m bdng cách 7.t bit Qe t-ong thanh ghi TIM>\eZ: Xhi một +(/at. .v.nt >=" -a< tt c= các thanh ghi đ1c c8( nh8t và cờ +(/at. *bit QI t-ong thanh ghi TIM>\^Z0 đ1c 7.t và , A-.7ca).- b+.- đ1c nạ( )ại giá t-S từ thanh ghi (-.7ca).cont-o) *TIM>\A^C0:
, Thanh ghi a+to,-.)oa/ 7ha/o của bộ đếm đ1c c8( nh8t vFi giá t-S từ thanh ghi TIM>\_ZZ: j9nh /1Fi đ" minh hVa hoạt động của co+nt.-
^' 4hác bi@t giPa vi@c thanh ghi TIM>\_ZZ 4hWng đ1c (-.)oa/ và đ1c (-.)oa/ đ1c minh hVa t-ong 2 h9nh /1Fi đ"
Xhi đ1c (-.)oa/< giá t-S mFi ghi vào thanh ghi TIM>\_ZZ 7U c$ tác /ụng tại +(/at. .v.nt tiế( th.o *ig %k0< nế+ 4hWng đ1c (-.)oa/ th9 giá t-S đ1c ghi mFi vào TIM>\_ZZ 7U c$ tác /ụng nga" )8( tức *ig %l0: b) Chế độ đếm giảm (Doncounting mode)
Chế độ /onco+nting t1Dng t' nh1 +(co+nting< t+" nhin bộ đếm đếm ng1c từ giá t-S a+to,-.)oa/ v3 giá t-S : joạt động t1Dng t' nh1 +(co+nting
c) Chế độ center!aligned (up"don couting)
T-ong chế độ nà"< bộ đếm đếm từ giá t-S tFi giá t-S a+to, -.)oa/ , %< 7inh -a một 7' 4i@n ov.-`o< 7a+ đ$ đếm từ giá t-S a+to,-.)oa/ v3 % -#i 7inh -a một 7' 4i@n +n/.-`o: Tiế( th.o )ại tiế( tục đếm từ : Minh hVa
Stm32f4xx_tim.h
typedef struct / uint16_t TIM_Prescaler used t+ di*ide the TI( cl+c:.
!J Specifies the prescler *lue This prmeter cn e numer
et0een x nd x ! uint16_t TIM_CounterMode
!J Specifies the c+unter m+de. This prmeter cn e *lue
+f Kref TI(_&+unter_(+de ! uint32_t TIM_Period e l+ded int+ the cti*e
!J Specifies the peri+d *lue t+ 8ut+57el+d 7e'ister t the
next updte e*ent.
This prmeter must e numer et0een x nd x.
!
uint16_t TIM_ClockDivision
!J Specifies the cl+c: di*isi+n. This prmeter cn e *lue +f
Kref TI(_&l+c:_Di*isi+n_&LD ! uint8_t TIM_RepetitionCounter !J Specifies the repetiti+n c+unter *lue. ;ch time the 7&7 d+0nc+unter reches ?er+1 n updte e*ent is 'enerted nd c+untin' restrts fr+m the 7&7 *lue ,$-. This mens in PF( m+de tht ,$M- c+rresp+nds t+E 5 the numer +f PF( peri+ds in ed'e5li'ned m+de 5 the numer +f hlf PF( peri+d in center5li'ned m+de This prmeter must e numer et0een x nd x. Kn+te This prmeter is *lid +nly f+r TI( nd TI(B. ! 6 TI(_Time)seInitTypeDef
. TIM_Prescaler et0een x nd x 2. TIM_CounterMode Kdef'r+up TI(_&+unter_(+de K/ ! #define #define #define #define #define #define == H
TI(_&+unter(+de_>p TI(_&+unter(+de_D+0n TI(_&+unter(+de_&enter8li'ned TI(_&+unter(+de_&enter8li'ned2 TI(_&+unter(+de_&enter8li'ned3 IS_TI(_&O>$T;7_(OD;,(OD;- ,,,(OD;-
,,uintN_t-x,,uintN_t-x,,uintN_t-x2,,uintN_t-x4,,uintN_t-xN TI(_&+unter(+de_>p-
,,(OD;- TI(_&+unter(+de_D+0n- == H ,,(OD;- TI(_&+unter(+de_&enter8li'ned- == H ,,(OD;- TI(_&+unter(+de_&enter8li'ned2- == H ,,(OD;- TI(_&+unter(+de_&enter8li'ned3-! K6
Y
TIM_Period
et0een x nd x 4
TIM_ClockDivision
! Kdef'r+up TI(_&l+c:_Di*isi+n_&LD K/ ! #define #define #define #define
TI(_&LD_DI% ,,uintN_t-xTI(_&LD_DI%2 ,,uintN_t-xTI(_&LD_DI%4 ,,uintN_t-x2IS_TI(_&LD_DI%,DI%- ,,,DI%- TI(_&LD_DI%- == H ,,DI%- TI(_&LD_DI%2- == H ,,DI%- TI(_&LD_DI%4--
! K6 !
! Kdef'r+up TI(_interrupt_s+urces K/ ! #define #define #define #define #define #define #define #define
TI(_IT_>pdte TI(_IT_&& TI(_IT_&&2 TI(_IT_&&3 TI(_IT_&&4 TI(_IT_&O( TI(_IT_Tri''er TI(_IT_)re:
,,uintN_t-x,,uintN_t-x2,,uintN_t-x4,,uintN_t-xB,,uintN_t-x,,uintN_t-x2,,uintN_t-x4,,uintN_t-xB-
TI(_IT_>pdte thiết )8( ngOt 4hi t-àn bộ đếm