野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13711|回复: 1

高级定时器为什么我配置进入终端就不能进行PWM互补输出了?

[复制链接]
发表于 2016-11-23 19:03:00 | 显示全部楼层 |阅读模式
  1. #include "bsp_AdvanceTim.h"

  2. uint16_t Counter_sine=0;
  3. uint16_t Duty_Cycle_sinewavetable[9]={1,2,3,4,5,6,7,8,9};
  4. //extern uint16_t Counter_sine;
  5. //extern uint16_t Duty_Cycle_sinewavetable[9];

  6. //pwm输出GPIO配置
  7. static void ADVANCE_TIM_GPIO_Config(void)
  8. {
  9.   GPIO_InitTypeDef GPIO_InitStructure;

  10.   // 输出比较通道 GPIO1 初始化
  11.         RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE);
  12.   GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_CH1_PIN;
  13.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  14.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.   GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);

  16.   // 输出比较通道互补通道 GPIO1 初始化
  17.         RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1N_GPIO_CLK, ENABLE);
  18.   GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_CH1N_PIN;
  19.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  20.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  21.   GPIO_Init(ADVANCE_TIM_CH1N_PORT, &GPIO_InitStructure);

  22.   // 输出比较通道刹车通道 GPIO1 初始化
  23.         RCC_APB2PeriphClockCmd(ADVANCE_TIM_BKIN_GPIO_CLK, ENABLE);
  24.   GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_BKIN_PIN;
  25.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  26.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  27.   GPIO_Init(ADVANCE_TIM_BKIN_PORT, &GPIO_InitStructure);
  28.         // BKIN引脚默认先输出低电平
  29.         GPIO_ResetBits(ADVANCE_TIM_BKIN_PORT,ADVANCE_TIM_BKIN_PIN);       
  30. }



  31. // 中断优先级配置

  32. static void ADVANCE_TIM_NVIC_Config(void)
  33. {
  34.     NVIC_InitTypeDef NVIC_InitStructure;
  35.     // 设置中断组为0
  36.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);               
  37.                 // 设置中断来源
  38.     NVIC_InitStructure.NVIC_IRQChannel = ADVANCE_TIM_IRQ ;       
  39.                 // 设置主优先级为 0
  40.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;         
  41.           // 设置抢占优先级为3
  42.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;       
  43.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  44.     NVIC_Init(&NVIC_InitStructure);
  45. }



  46. static void ADVANCE_TIM_Mode_Config(void)
  47. {
  48.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;               
  49.                 // 开启定时器时钟,即内部时钟CK_INT=72M
  50.     ADVANCE_TIM_APBxClock_FUN(ADVANCE_TIM_CLK, ENABLE);       
  51.                 // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
  52.     TIM_TimeBaseStructure.TIM_Period=ADVANCE_TIM_Period;
  53.           // 时钟预分频数
  54.     TIM_TimeBaseStructure.TIM_Prescaler= ADVANCE_TIM_Prescaler;       
  55.                 // 时钟分频因子 ,没用到不用管
  56.     TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;               
  57.                 // 计数器计数模式,设置为向上计数
  58.     TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;                
  59.                 // 重复计数器的值,没用到不用管
  60.                 TIM_TimeBaseStructure.TIM_RepetitionCounter=0;       
  61.           // 初始化定时器
  62.     TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseStructure);
  63.        
  64.                 // 清除计数器中断标志位
  65.     TIM_ClearFlag(ADVANCE_TIM, TIM_FLAG_Update);
  66.           
  67.                 // 开启计数器中断
  68.     TIM_ITConfig(ADVANCE_TIM,TIM_IT_Update,ENABLE);
  69.                
  70.                 // 使能计数器
  71.     TIM_Cmd(ADVANCE_TIM, ENABLE);
  72.                
  73.                
  74.                 /*--------------------输出比较结构体初始化-------------------*/               
  75.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  76.         // 配置为PWM模式1
  77.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  78.         // 输出使能
  79.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  80.         // 互补输出使能
  81.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  82.         // 设置占空比大小
  83.         TIM_OCInitStructure.TIM_Pulse = Duty_Cycle_sinewavetable[Counter_sine];
  84.         // 输出通道电平极性配置
  85.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  86.         // 互补输出通道电平极性配置
  87.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  88.         // 输出通道空闲电平极性配置
  89.         TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  90.         // 互补输出通道空闲电平极性配置
  91.         TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
  92.         TIM_OC1Init(ADVANCE_TIM, &TIM_OCInitStructure);
  93.         TIM_OC1PreloadConfig(ADVANCE_TIM, TIM_OCPreload_Enable);

  94.         /*-------------------刹车和死区结构体初始化-------------------*/
  95.         // 有关刹车和死区结构体的成员具体可参考BDTR寄存器的描述
  96.         TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
  97.   TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
  98.   TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
  99.   TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
  100.         // 输出比较信号死区时间配置,具体如何计算可参考 BDTR:UTG[7:0]的描述
  101.         // 这里配置的死区时间为152ns
  102.   TIM_BDTRInitStructure.TIM_DeadTime = 11;
  103.   TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
  104.         // 当BKIN引脚检测到高电平的时候,输出比较信号被禁止,就好像是刹车一样
  105.   TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  106.   TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
  107.   TIM_BDTRConfig(ADVANCE_TIM, &TIM_BDTRInitStructure);
  108.        
  109.         // 使能计数器
  110.         TIM_Cmd(ADVANCE_TIM, ENABLE);       
  111.         // 主输出使能,当使用的是通用定时器时,这句不需要
  112.         TIM_CtrlPWMOutputs(ADVANCE_TIM, ENABLE);
  113. }

  114. void ADVANCE_TIM_Init(void)
  115. {
  116.         ADVANCE_TIM_GPIO_Config();
  117.         ADVANCE_TIM_NVIC_Config();
  118.         ADVANCE_TIM_Mode_Config();               
  119. }

  120. /*********************************************END OF FILE**********************/

  121. 我想知道这样配置进入中断好使为什么PWM互补输出不好使了?
复制代码


回复

使用道具 举报

发表于 2016-11-23 19:55:34 | 显示全部楼层
帮顶。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 04:52 , Processed in 0.025265 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表