TA的每日心情 | 衰 2024-4-11 15:49 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目前是想用TIM6实现us延时 ,下面是配置函数: X% c* T) t' u3 h& H& s
void TIM6_configuration(void)& q) ], J" n( m) i. J( O4 C6 J$ v9 g
{! U) ^: o# p, l. Q! F3 O$ M
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;( W8 s7 M0 I: v( U6 u; _
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6 , ENABLE);
2 [' e$ q6 A* j. v0 v * R" g- Z4 H- \4 }; U* Y
TIM_DeInit(TIM6);6 f. s. `& |5 G V6 A0 j" m
TIM_TimeBaseStructure.TIM_Period=10-1; // 自动重装载寄存器周期的值(计数值)+ J6 u' @3 Q2 T' }7 F9 ]5 o' v$ ?. l
TIM_TimeBaseStructure.TIM_Prescaler=8-1; // 时钟预分频数 72M/3 f: s/ f) b i
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 采样分频
8 {6 g: j- l1 n7 J$ j TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 向上计数模式
0 {6 j3 d* O+ z; ~ TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
1 E) a( L) I4 v, |3 r0 r5 s, _6 {
3 A# r# p! }/ l1 r/ K8 H TIM_CleaRFlag(TIM6, TIM_FLAG_Update); // 清除溢出中断标志
( l4 u& y! y& C$ H TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);: N2 |+ t; {& _: @0 [
TIM_Cmd(TIM6, ENABLE); // 开启时钟 & c" F" \+ R' n L0 L4 m5 x
}- M+ q: H* j; K1 x/ C
下面是中断函数
) R5 Z1 t8 t% o9 A8 O+ z5 dvoid TIM6_IRQHandler(void)) A4 X5 W* p& j/ j4 A7 Y
{; ~7 e6 G# L, c1 c5 f$ Q
if ( TIM_GetITStatus(TIM6 , TIM_IT_Update) != RESET ) 2 D P: X O+ ?! f
{ + ?& o, X( F" H" c
if( delaycnt > 0 ) - U5 c; z3 k- X: l% U8 P
{
7 ]+ O( ~; v( \3 k- U delaycnt--; 1 W2 e* k: |( [. j
}- I0 s2 ^) H: e, s2 |
TIM_ClearITPendingBit(TIM6 , TIM_FLAG_Update); 4 L' g* P6 J, ]- E
}. B0 ?+ T: G4 C, i, s" A$ M
}, k# F* [7 X+ \
还有延时函数3 u! q' _, X; f$ U3 k% i0 e) Q& E
void Delay1us(uint32_t nus)( d7 H7 J+ t( f7 u, y8 w k9 w
{
* I7 Q3 _* w0 I6 ?- h Z delaycnt = nus;
7 [3 \6 `. v' h
# q' \" P: ~4 H// TIM_Cmd(TIM6, ENABLE);
0 {; F' C- f" W/ d2 p& D* r1 K9 y! | while(delaycnt>0);( S, e" Z* B, ? r* }; T, R) h
// TIM_Cmd(TIM6, DISABLE);
. @/ R9 g2 |. m. Y4 j1 P% q: x" _}
8 G* Y+ h0 v1 _想精准的实现1us的延时,就把这两个值修改如下
2 j5 o6 Y' z+ H6 E TIM_TimeBaseStructure.TIM_Period=1-1; // 自动重装载寄存器周期的值(计数值)
7 y/ I& u! P* t2 I9 B4 N TIM_TimeBaseStructure.TIM_Prescaler=72-1; // 时钟预分频数 72M/$ {: p7 t! M# {/ r/ o$ x4 s
理论上可行,但是实际调试时候发现卡在了 while(delaycnt>0);,不能执行下一步,而当TIM_Period写成(2-1),确实是2us延时,请问这是什么错误引起的
F! _, R" ]3 \( x+ M t7 s
+ l( V f. V1 ?/ b% {5 l) F
2 X+ O5 x! l3 ^ i! L* T5 ` |
|