新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2014-6-4
- 在线时间
- 90 小时
|
100金钱
- #include "stm32f10x.h"
- int main(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_InitStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
- //PA8 :TIM1_CH1的输出比较通道 ->推挽复用模式
- //PB13:TIM1_CH1的输出比较通道的互补通道 ->推挽复用模式
- //PB12:TIM1_CH1的输出比较通道的刹车通道 ->推挽复用模式
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- ///GPIO_ResetBits(GPIOB,GPIO_Pin_12);
- TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_InitStructure.TIM_Period = 100-1; //这里将频率设为10KHz
- TIM_InitStructure.TIM_Prescaler = 72-1;
- TIM_InitStructure.TIM_RepetitionCounter = 0; //此处没用到
- TIM_TimeBaseInit(TIM1,&TIM_InitStructure);
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式
- TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; //互补通道空闲电平极性
- TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //比较通道空闲电平极性(这两个根据情况随便配置一下就行)
- TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; //互补通道电平极性配置
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出通道电平极性配置(高电平有效)
- TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;//输出使能
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; //互补输出使能
- TIM_OCInitStructure.TIM_Pulse = 25; //25%
- TIM_OC1Init(TIM1,&TIM_OCInitStructure);
- TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
- TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
- TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
- TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//当PB12检测到高电平的时候输出比较信号就会禁止,状态变为上面配置的空闲电平状态
- TIM_BDTRInitStructure.TIM_DeadTime = 50; //这里没有搞清楚怎么算的,这里设为5ns,死区是由MOS管特性产生,可以理解为电平在该跳变的时候没有及时跳变,可能会烧坏元器件,所以要配置死区世间加以延时
- TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;//LOCK的级别参数
- TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;
- TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
- TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
- TIM_CtrlPWMOutputs(TIM1,DISABLE);
- TIM_Cmd(TIM1,ENABLE);
-
- while(1)
- {
-
- }
- }
- void TIM1_UP_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
- {
- TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
- }
- }
复制代码
我明明禁止了通道使能,为什么还有波形,这个是不是ST的 bug.
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;//输出使能
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; //互补输出使能
TIM_CtrlPWMOutputs(TIM1,DISABLE);
|
|