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

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,中心对齐,下溢中断
谢谢

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

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