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

STM32基于TIM1的比较输出

[复制链接]
ST老少女 发布时间:2008-12-2 14:32
以下为源代码,CC1进行比较输出,模式为翻转电平.

程序运行后,CC中断可以进去,PA.11的指示灯能闪,但PA.08的指示一直为低电平,请教一下程序哪里错了???

void TIM1_CC_Init(void)
{     
NVIC_InitTypeDef NVIC_InitStructure;  
GPIO_InitTypeDef GPIO_InitStructure;  

/* 使能定时器 TIM1_CC 中断 */
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* 配置 PA.11 为推挽输出 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
         
GPIOA->BSRR = GPIO_Pin_11; // 将PA.08配置为高电平

/* 配置 PA.08 为复用推挽输出 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* 预分频自动重载寄存器 */
TIM1->ARR   = 0x2FFF;   
/* PSC 预分频器:计数频率 = CK_PSC /(PSC + 1) */
TIM1->PSC   = 0xFF;               
/* CCR1 捕获比较值寄存器 */            
TIM1->CCR1  = 0xFFF;   
/* 循环计数器的寄存器(控制更新事件) */
TIM1->RCR   = 0x00;   // 每次更新   
/* 捕获/比较模式寄存器 */
TIM1->CCMR1 = 0x30;   // CC1为输出,CCR1立即生效,输出翻转.   
/* 捕获/比较使能寄存器 */
TIM1->CCER  = 0x03;   // 开启CC1输出,反向输出
/* 中断使能寄存器 */
TIM1->DIER  = 0x02;   // 使能 CC1 中断     
/* 控制寄存器1 */
TIM1->CR1   = 0x01;   // 使能计数器(向上计数)
}
   
/***************************************************************************************
** 函数名称: TIM1_CC_IRQHandler
** 功能描述: CC 中断
** 参    数: None
** 返 回 值: None      
****************************************************************************************/
void TIM1_CC_IRQHandler(void)
{
static uint32 counter = 0;
            
TIM1->SR &= ~2; // 清除中断标志(不做判断提高效率)

if(counter)
{
  counter = 0;
  GPIOA->BSRR = GPIO_Pin_11;
}
else
{  
  counter = 1;
  GPIOA->BRR = GPIO_Pin_11;
}
}
收藏 评论3 发布时间:2008-12-2 14:32

举报

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

RE:STM32基于TIM1的比较输出


找到问题,没有打开主输出...
/* 打断和死区控制器 */
TIM1->BDTR  = 0x8000;                // 主输出使能(MOE)        
加这句就可以了.
ST老少女 回答时间:2008-12-2 14:34:52

RE:STM32基于TIM1的比较输出

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

RE:STM32基于TIM1的比较输出

你好,楼主,
我刚接触到STM32F103这款芯片,同时也要使用TIM1高级时钟这个模块,主要是用来控制电机,但发现互初输出的PWM信号的占空比不正确,譬如:软件中设置的占人比为20%,但实际输出才有16%,其它的占空比都是一样,存在误差!
ps:我的PWM信号频率为20KHZ,死区时间:2us,中心对齐,下溢中断
谢谢

所属标签

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