由于项目需要,需要发出固定个数的PWM脉冲,因为未接触过网上搜集的也多不行,后来根据官方手册调试成功。使用的第一种方式,后续的测试后放出。 void PWMS8_Init()2 n1 C! Q, ]: U5 i. C$ F& ^7 A" P6 B { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* TIM4 clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); /* GPIOB clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);" Y: d7 }6 c' l. [ /* TIM4_CH1 pin (PB.06) configuration */- S. r/ I, J3 K, f6 ^/ e$ q GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;' F5 L7 v. @5 i+ _5 q GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;. i7 }. c* e# G6 } GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = 200;5 R/ z* }7 d' U TIM_TimeBaseStructure.TIM_Prescaler = 7200;# Q# E1 b- v( v6 _; p2 h TIM_TimeBaseStructure.TIM_ClockDivision = 0;. O( H6 S- R/ p+ a8 S- y* `$ i f TIM_TimeBaseStructure.TIM_RepetitionCounter=0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;) h# s, v1 m$ w- _ TIM_TimeBaseStructure.TIM_RepetitionCounter = 5;4 v1 h! B8 N+ H& D: R, U) O2 v TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); & Y t: F5 _7 l5 z+ u3 e" k TIM_GenerateEvent(TIM8,TIM_EventSource_Update);) o" x, K: a) v# P5 Z: W* _ TIM_InternalClockConfig(TIM8); TIM_SelectOCxM(TIM8,TIM_Channel_2,TIM_OCMode_PWM1);/ r$ b. a' b5 z& g4 w7 C* L7 u /* PWM1 Mode configuration: Channel2 */1 n. O# b: b3 a TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;1 u+ U7 m4 |% R4 _! V0 x' U TIM_OCInitStructure.TIM_Pulse = 100;" e* y5 G: N6 ~0 ~ U TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; L; T: P' m/ r- p TIM_OC2Init(TIM8, &TIM_OCInitStructure);; i6 a2 [5 s" P9 H9 [ TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM8, ENABLE);% |3 a4 {% N% g /* TIM8 enable counter */ TIM_CtrlPWMOutputs(TIM8,ENABLE);' X/ j E+ B- j 0 U" Q) T- J4 M, F6 B& i2 `) K TIM_SelectOnePulseMode(TIM8,TIM_OPMode_Single);. e' E$ H- `0 F& V TIM_Cmd(TIM8, ENABLE); } 6 W1 b3 O& n- g 以上是核心代码,自己可根据需要修改,生成不同个数以及频率的脉冲。 |
éç¨å®æ¶å¨.pdf
下载1.81 MB, 下载次数: 876
这个功能只对高级定时器起作用,普通定时器实现不了
你只需要对应的修改引脚就可以了啊
RCR寄存器是8位的,怎么可能写成1000呢
还是不明白,加入我要输出1000个脉冲,要修改什么呢
我修改了不起作用
你要实现什么?传上来看看