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

STM32基于TIM1的比较输出

[复制链接]
ST老少女 发布时间:2008-12-2 14:32
以下为源代码,CC1进行比较输出,模式为翻转电平.4 k# p+ f4 H* F. |: c8 y. l' w) {6 ~. i

1 m, }% [7 q  A程序运行后,CC中断可以进去,PA.11的指示灯能闪,但PA.08的指示一直为低电平,请教一下程序哪里错了???2 a6 C' n, p" w( N  k/ }/ p3 k

: X8 s# V" Y+ I+ Z  D( F( Bvoid TIM1_CC_Init(void)# z$ u0 U& Z5 i# T
{     
; l, \$ ~; u0 lNVIC_InitTypeDef NVIC_InitStructure;  - a( j; h6 z  c
GPIO_InitTypeDef GPIO_InitStructure;  3 d9 K$ z7 U0 K) F9 q1 u

3 B* i7 F# x/ A- H' N! }7 ^/* 使能定时器 TIM1_CC 中断 */  U) S% C& I: _5 @# [) C
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQChannel;; B' p6 }  M9 u$ E  B8 R! [6 H5 V
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;( r3 k, h% ]$ N" W6 K
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
. F8 u# s) g! nNVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
: p3 w: R4 q# Y# F. ?NVIC_Init(&NVIC_InitStructure);
$ [$ l2 P) |: J: a$ j. m8 {! f1 l. v4 [
2 ^# G/ C5 g; i, E, N; j7 @5 n/* 配置 PA.11 为推挽输出 */
* r2 T- r% d+ h. z- J$ `GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; 6 ^# w5 u' J2 Y$ @7 u0 F
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;* y% f, J: F; f
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 5 \2 w, x" n% o6 |4 F
GPIO_Init(GPIOA, &GPIO_InitStructure);4 V6 H1 u5 T: G4 z( v$ m
         ( }" w) |9 ^5 z# _
GPIOA->BSRR = GPIO_Pin_11; // 将PA.08配置为高电平
$ ?* H3 G" q" L' C5 A9 E3 |/ @, _9 M) p+ U. K- u
/* 配置 PA.08 为复用推挽输出 */* h5 p3 d' r: `! T. i5 u$ X
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; ( ~5 ?$ r& @& o
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;* p/ _$ l! A, n
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   `/ z% P+ H/ D
GPIO_Init(GPIOA, &GPIO_InitStructure);3 [, A1 v' z* v1 z, i+ N8 S  v

' l- Z5 w3 m, e( o1 @0 S4 I, Z! Q/* 预分频自动重载寄存器 */: Z* ~. o# A+ ^& q- {3 d" q
TIM1->ARR   = 0x2FFF;   
3 ]5 V' k. T/ Q/ g/* PSC 预分频器:计数频率 = CK_PSC /(PSC + 1) */% C- ?1 f" _+ R+ F7 v
TIM1->PSC   = 0xFF;                ! e" T, m- c1 t6 M4 X* |# o9 ^
/* CCR1 捕获比较值寄存器 */             2 I1 ^/ a- `% j- d9 w
TIM1->CCR1  = 0xFFF;    1 k2 @9 G" x4 w, T  l
/* 循环计数器的寄存器(控制更新事件) */. z: F# M6 Y; o! N+ ?8 i
TIM1->RCR   = 0x00;   // 每次更新   / T4 t3 }' I  \
/* 捕获/比较模式寄存器 */
# l$ g' q  S2 n0 t. @" vTIM1->CCMR1 = 0x30;   // CC1为输出,CCR1立即生效,输出翻转.   
& a* R6 _. M- v& U& T3 s: N' C: |/* 捕获/比较使能寄存器 */ + h( i- P1 X, o
TIM1->CCER  = 0x03;   // 开启CC1输出,反向输出
0 r7 ~5 D7 C% E7 ^( v' }/* 中断使能寄存器 */! @! b% \8 I! m0 O% f9 J( L( v
TIM1->DIER  = 0x02;   // 使能 CC1 中断     # k( ?4 i& l" P# a$ w- v
/* 控制寄存器1 */' A$ ?7 v+ e0 y/ s9 |3 c
TIM1->CR1   = 0x01;   // 使能计数器(向上计数)
6 S3 l. P1 y1 e% L}
* A" Z* F4 u' A  C' w; e0 s   
" y  A7 z1 I) s, g5 f+ C1 r/***************************************************************************************& h  Q) l! w2 c1 O0 D
** 函数名称: TIM1_CC_IRQHandler
* M8 D1 \+ u% W3 t+ Z2 y, m9 D** 功能描述: CC 中断
0 e' F* J  ?! H  s6 V0 a7 _0 M: l** 参    数: None
0 I, P3 R+ `( c: b1 r  ~. J0 R* ~' k** 返 回 值: None       + w( M2 i. C4 W4 J! J0 K5 n, M
****************************************************************************************// K9 u+ }1 w! B! Q* F0 e
void TIM1_CC_IRQHandler(void) ; u) B) P& ]+ }. z
{! J2 m! a' W5 Z
static uint32 counter = 0;
4 @6 q; B' K+ m% z* l            % v  g7 V8 t  x0 l" \0 v
TIM1->SR &= ~2; // 清除中断标志(不做判断提高效率)- H# ?+ I; m! Y5 [/ o) N4 S
/ j7 n1 ^; P1 s2 i; B8 {
if(counter)- ^- b& E/ k2 \3 e' e# [" N
{
6 Y5 u7 D+ `7 n7 k* W  counter = 0; . J$ k3 W5 U5 k5 u6 j; e
  GPIOA->BSRR = GPIO_Pin_11;
* d0 D2 t' ~+ S8 M/ h" G$ p}
+ ~9 @/ q* x# d, a, I5 V" Eelse4 ?5 Z! T0 ~: }, Y+ i/ H! a( }3 m
{  % }! E/ o% |4 b! o, m) ~5 U
  counter = 1;
+ l( V; f) K9 k6 r: f1 \1 B  GPIOA->BRR = GPIO_Pin_11;
4 v; Y8 Q) J4 O  M& i+ v" N. y}9 f/ i9 L- |3 R- E( h
}
收藏 评论3 发布时间:2008-12-2 14:32

举报

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

RE:STM32基于TIM1的比较输出


# ]: B) L, M4 c: ]0 U% k找到问题,没有打开主输出...
0 X& f& k! u6 }6 a* e* @/* 打断和死区控制器 */* x# }% M: U8 H1 U: a# |! D
TIM1->BDTR  = 0x8000;                // 主输出使能(MOE)        
4 u. R* f0 p) `) N5 ^) m- D3 _加这句就可以了.
ST老少女 回答时间:2008-12-2 14:34:52

RE:STM32基于TIM1的比较输出

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

RE:STM32基于TIM1的比较输出

你好,楼主,) D3 r7 J  o3 W; Y
我刚接触到STM32F103这款芯片,同时也要使用TIM1高级时钟这个模块,主要是用来控制电机,但发现互初输出的PWM信号的占空比不正确,譬如:软件中设置的占人比为20%,但实际输出才有16%,其它的占空比都是一样,存在误差!
% e+ E: w3 A6 [, T% W) C0 ?ps:我的PWM信号频率为20KHZ,死区时间:2us,中心对齐,下溢中断9 ]/ B0 @% \2 y+ u- x6 u5 H( T
谢谢

所属标签

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