你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32基于TIM1的比较输出

[复制链接]
ST老少女 发布时间:2008-12-2 14:32
以下为源代码,CC1进行比较输出,模式为翻转电平." y2 k: ?- b/ ~# P6 B# M

8 l0 y! Y3 m$ B& R, g9 C1 O程序运行后,CC中断可以进去,PA.11的指示灯能闪,但PA.08的指示一直为低电平,请教一下程序哪里错了???8 Z: ?0 U& \* J0 r! D

; }1 E0 M. a9 m  ?1 kvoid TIM1_CC_Init(void)+ }5 \$ U# t% {" D9 Y
{     + C8 ]& G0 [3 X! b# L
NVIC_InitTypeDef NVIC_InitStructure;  
) S! ]; }0 \  Q4 s3 qGPIO_InitTypeDef GPIO_InitStructure;  
$ b$ h/ O$ P* o3 ~& \$ H8 _( O$ l$ S7 k$ d' T; Z% Z4 z' I
/* 使能定时器 TIM1_CC 中断 */
0 v$ @0 M9 @; a9 `8 t: ^2 [NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQChannel;
( }9 z" D" U* j8 j7 _NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- j1 r7 E$ i% f$ A6 I6 I) k3 `1 q) ZNVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;( W4 e6 v- S/ h2 K) ~' T1 W3 N0 x
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
3 D, g3 \  [- d% L' i7 s0 N/ u& a! y) tNVIC_Init(&NVIC_InitStructure);
+ G9 H' [) n, t2 ?+ p6 u6 w+ Y; `* n
/* 配置 PA.11 为推挽输出 */, P/ i: R7 f3 M
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- X, j9 W; j" |5 y2 ~3 OGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;; l# }: X, C: |2 M! l
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; * ^$ a2 O$ a& `
GPIO_Init(GPIOA, &GPIO_InitStructure);
- E4 B8 R$ _% p- o7 r" R         % }' y/ T. P" b; K, M
GPIOA->BSRR = GPIO_Pin_11; // 将PA.08配置为高电平
: R/ d! ?  s8 B' U
3 C7 U0 y* K0 A7 L/* 配置 PA.08 为复用推挽输出 */
& W$ k$ O+ C$ G1 @GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;   m8 [& w3 ?* f+ J# v
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;# F5 `% M1 X* f- M) X7 [0 r9 q# e
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 8 F$ B$ }1 E# Q: d0 Y
GPIO_Init(GPIOA, &GPIO_InitStructure);
( w" m  q. _! Y! f4 n0 }( p% W, R$ Z' ^  x
/* 预分频自动重载寄存器 */
0 P* ^& G- K6 g( p: K/ {TIM1->ARR   = 0x2FFF;   % _  q* {. k: c, }2 R
/* PSC 预分频器:计数频率 = CK_PSC /(PSC + 1) */
+ t$ M' E$ R) W. n( \/ c" sTIM1->PSC   = 0xFF;                1 l$ M! a' n1 Q( x4 v9 c
/* CCR1 捕获比较值寄存器 */               N' C& d9 c! x0 h  E# o
TIM1->CCR1  = 0xFFF;   
% G3 V  |& |) T/* 循环计数器的寄存器(控制更新事件) */
' ^. ?/ L' B- \. L3 wTIM1->RCR   = 0x00;   // 每次更新   9 w" e9 y  q% g: K' a' @9 X( U
/* 捕获/比较模式寄存器 */
$ ?% o' z2 C" v# P4 g  J! W! K6 iTIM1->CCMR1 = 0x30;   // CC1为输出,CCR1立即生效,输出翻转.   
2 @3 S9 B+ t7 R0 a  \" h  {/* 捕获/比较使能寄存器 */
+ R9 T; S& a/ J! {( G3 K6 YTIM1->CCER  = 0x03;   // 开启CC1输出,反向输出
. e2 h& ^9 T' P/* 中断使能寄存器 */
! D; D) E/ A- _TIM1->DIER  = 0x02;   // 使能 CC1 中断     
9 v) @) x5 p/ |# G8 y+ g8 r+ _* A7 ^/* 控制寄存器1 */
! S/ z$ ]  \$ [" }. N( Z  X2 uTIM1->CR1   = 0x01;   // 使能计数器(向上计数)! J4 Y, Z+ _2 Z3 }" |8 M' ?
}
! ~0 q2 {' T2 z; M   
9 z' {6 X2 Z* i7 Z2 u& ^, m2 m7 w/***************************************************************************************
+ z0 u8 h" n, O** 函数名称: TIM1_CC_IRQHandler( G+ G. G! E* e4 d# w: E- M
** 功能描述: CC 中断
; f1 V, T9 }( g9 |$ N** 参    数: None
6 X" p, _4 p  A) N** 返 回 值: None       ( k7 s+ o8 P5 W' N
****************************************************************************************/: K4 r9 E/ D, S: f) i+ B2 C
void TIM1_CC_IRQHandler(void)
! D4 H5 [# K( f% p{0 W! X# y1 S7 x* |' O9 Z/ m
static uint32 counter = 0;
; j! D* f3 p4 u; E9 O; C2 a9 q            
; _- Y" |% [' v: D3 qTIM1->SR &= ~2; // 清除中断标志(不做判断提高效率)* i6 G$ c& j. h2 W& y
7 ?6 r( y2 Z! Y- ?" w$ P
if(counter)' v% F' p& \' k. s1 r! x& w
{4 f- p. X7 n$ y0 @8 @, _6 X9 q% ?
  counter = 0; : K0 L1 _# F! N$ j/ ~
  GPIOA->BSRR = GPIO_Pin_11;( ~$ W/ y  n- u" v. b5 O8 e# u; o# M
}
) I6 d. ]( C; delse
' [' F7 c, v& [+ }5 \' b! t9 x3 {{  
2 o& {' y3 E2 Y- `  counter = 1;4 m% U/ h. Z2 `" W3 R; u: K8 \
  GPIOA->BRR = GPIO_Pin_11;
1 S8 j" T4 h$ C- i) y}& k' t: Q1 j: v
}
收藏 评论3 发布时间:2008-12-2 14:32

举报

3个回答
得蜜 回答时间:2008-12-2 14:33:45

RE:STM32基于TIM1的比较输出

5 g  X* I" t: y1 p0 ?6 d
找到问题,没有打开主输出...
1 ^( `1 }, K' L4 M; B8 Q( G# W/* 打断和死区控制器 */
+ q$ G' k# D( n0 W! y& d! nTIM1->BDTR  = 0x8000;                // 主输出使能(MOE)        + N, Y  b! E  k1 x/ |1 Y
加这句就可以了.
ST老少女 回答时间:2008-12-2 14:34:52

RE:STM32基于TIM1的比较输出

谢谢
can-39743 回答时间:2012-3-30 12:34:27

RE:STM32基于TIM1的比较输出

你好,楼主,
% B7 V5 j6 y9 H9 ?# V我刚接触到STM32F103这款芯片,同时也要使用TIM1高级时钟这个模块,主要是用来控制电机,但发现互初输出的PWM信号的占空比不正确,譬如:软件中设置的占人比为20%,但实际输出才有16%,其它的占空比都是一样,存在误差!3 w2 Q) z: R- I/ E8 V7 J
ps:我的PWM信号频率为20KHZ,死区时间:2us,中心对齐,下溢中断
+ @; E8 _* [7 T- y谢谢

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版