TA的每日心情 | 衰 2024-4-11 15:49 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目前是想用TIM6实现us延时 ,下面是配置函数: U/ R' h; j, R! |9 n: O5 N
void TIM6_configuration(void)
+ ]1 N. \% \, f7 ?! v$ a- f{; J0 J& `1 c0 m# }/ E8 }0 ?
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;; i( l) P" K, V, c5 ]6 M
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 , ENABLE);
* D3 Q/ |2 I* ^2 @/ m; V7 X9 p - G* u1 Y1 T/ d
TIM_DeInit(TIM6);# {! E0 ~' P# s( [3 ^
TIM_TimeBaseStructure.TIM_Period=10-1; // 自动重装载寄存器周期的值(计数值)+ z! e9 d6 j& @$ ^
TIM_TimeBaseStructure.TIM_Prescaler=8-1; // 时钟预分频数 72M/
7 Q9 f2 |0 D8 I1 Y TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 采样分频, ~3 o; b1 h0 Z( P
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 向上计数模式7 {! {' n1 g' s5 E
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
4 E, s& P: }: d2 b6 I. C& a v
5 U! a% @0 K0 q! D3 n TIM_CleaRFlag(TIM6, TIM_FLAG_Update); // 清除溢出中断标志9 i) R1 B0 v5 g4 V0 S
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);4 c7 J- `, M8 D% U7 @0 v
TIM_Cmd(TIM6, ENABLE); // 开启时钟
) H; Q! u% r7 J0 R, }}
* M9 z( N; R9 \ b- C下面是中断函数$ e2 C( G+ O* |1 m8 M- Y1 _- c2 Y' Q1 u+ W
void TIM6_IRQHandler(void)
7 g/ k0 l$ w! m) h& m) [+ {( J& e- u{
! K; F, w. ], z+ u0 p( c7 _- ~6 U5 Q if ( TIM_GetITStatus(TIM6 , TIM_IT_Update) != RESET ) 0 d) d, K" ]' v' d/ Y; n6 f- X E1 s
{
% {! P$ r+ }) ?' l4 f3 D& l% U if( delaycnt > 0 ) 1 q; O# _ c4 v$ q7 o
{
+ n k! W% W* F( v' q6 K delaycnt--; ' ?4 W5 ]& T5 l* j
}
/ r: `+ y! P/ N$ I+ Y4 I TIM_ClearITPendingBit(TIM6 , TIM_FLAG_Update); 5 _, Z1 a3 X! T
}4 ^( {: o7 H+ G# p9 y! M
}; W4 j% R s; n- E3 m3 j
还有延时函数* m2 g( ]3 e, }8 J# [( Y f( J# ~
void Delay1us(uint32_t nus)5 h+ n- }) {. e
{8 G5 ^: O9 P3 p; V$ f! }$ }- a
delaycnt = nus;
/ H4 w' n5 S6 W, f4 m
/ r9 z& k; U( P# C/ C, }' R/ s// TIM_Cmd(TIM6, ENABLE); : {7 S/ Z" k: k' q. B
while(delaycnt>0);
: W, o3 U: X; m% J7 J" k' v// TIM_Cmd(TIM6, DISABLE); $ [ }( t/ Q2 A2 f5 P; J
}8 n- C- e- Y9 x! A) f- W+ H& D
想精准的实现1us的延时,就把这两个值修改如下
9 f: q2 l/ c6 E* Y TIM_TimeBaseStructure.TIM_Period=1-1; // 自动重装载寄存器周期的值(计数值)# b1 F' ~/ {) S+ W# t
TIM_TimeBaseStructure.TIM_Prescaler=72-1; // 时钟预分频数 72M/5 m* e \; t; m- T% u1 t
理论上可行,但是实际调试时候发现卡在了 while(delaycnt>0);,不能执行下一步,而当TIM_Period写成(2-1),确实是2us延时,请问这是什么错误引起的/ f1 Q, ~2 m; d. \0 Q. c9 L8 [& n9 L
' _. k. [0 a) Y0 f
; S3 N& ?+ J1 I* z: U8 @ |
|