首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32F103定时器信道模式

STM32F103定时器信道模式
EN

Stack Overflow用户
提问于 2018-11-04 02:03:21
回答 1查看 4.9K关注 0票数 1

我在手册里找不到这样的信息所以我在问。

我在设计PCB,我对计时器有问题。我需要设置8个独立的PWMs和6个计数器(输入频率从50赫兹到2千赫不等),我没有任何自由的引脚,所以重新映射不是一个选择。是否可以在一个定时器内,但在不同的频道上混合模式?

我的意思是,是否有可能设置这样的配置:

  • TIM1_CH1 -脉宽调制
  • TIM1_CH2 -脉宽调制
  • TIM1_CH3 -碳纳米管
  • TIM1_CH4 -碳纳米管
  • TIM2_CH1 -碳纳米管
  • TIM2_CH2 -碳纳米管
  • 此通道的TIM2_CH3 -引脚用于美国
  • 此通道的TIM2_CH4 -引脚用于美国
  • TIM3_CH1 -脉宽调制
  • TIM3_CH2 -脉宽调制
  • TIM3_CH3 -脉宽调制
  • TIM3_CH4 -脉宽调制
  • TIM4_CH1 -脉宽调制
  • TIM4_CH2 -脉宽调制
  • TIM4_CH3 -碳纳米管
  • TIM4_CH4 -碳纳米管
EN

回答 1

Stack Overflow用户

发布于 2018-11-04 15:45:19

是否可以在一个定时器内,但在不同的频道上混合模式?

是的,但是他们会共享计数器并重新加载寄存器。这意味着,如果PWMs使用的是特定的频率,即不只是数到65535 (没有预分频器就会给出~1 kHz @ 64或72 MHz),那么捕获寄存器只会在这个范围内获得时间戳。

每个定时器只有一个计数器,由它的4个通道共享。它可以计数某些时钟事件(通常等于系统时钟的APB时钟),也可以计数一个外部触发器输入。为了产生PWM信号,计数器必须提供PWM频率。要在其他输入线路上计数脉冲,需要DMA通道或中断例程来提供额外的计数器。

计时器中断的计数

您可以在脉宽调制模式下设置两个通道,在输入捕获模式下设置另外两个通道,如参考手册的各个章节所述。在输入捕获通道上启用中断。在中断处理程序中,检查计时器状态寄存器以查看哪个通道导致中断,并进行计数。在重新设置状态寄存器中的中断位时,请小心,不要意外地重置尚未处理的事件位。这应该是可行的:

代码语言:javascript
复制
uint32_t t1c3, t1c4;
void TIM1_Handler(void) {
    if(TIM1->SR & TIM_SR_CC3IF) {
        t1c3++;
        TIM1->SR = ~TIM_SR_CC3IF;
    }
    if(TIM1->SR & TIM_SR_CC4IF) {
        t1c4++;
        TIM1->SR = ~TIM_SR_CC4IF;
    }
}

如果需要两个事件之间的确切时间,还可以从捕获/比较寄存器读取时间戳值。

EXTI中断计数

任何I/O引脚都可以是EXTI中断源,其约束条件是两个数目相同的引脚不能同时映射为EXTI中断源,即PA0,PA1,PB2,PC3,PA4可以,但PA0,PB0不能。设置EXTI中断可能比定时器捕获通道容易,缺点是没有时间戳和输入过滤器。

用DMA进行计数

即使在中断的情况下,以最多2 kHz来计数6个通道,即信号至少要间隔500个,对单片机来说也是没有问题的。但是,如果MCI还有很多其他事情要做,并且您有大量免费的DMA通道,您可以设置捕获通道来生成DMA请求,而不是中断。

请注意,TIM4_CH4没有与DMA通道相关联,因此您必须重新排列引脚,或者在中断模式下使用此通道。

如果不需要事件之间的确切时间,那么将DMA通道设置为外设到内存、8位、循环模式,并禁用外设和内存地址增量。源地址和目标地址都应该是有效的,并且字节是可调整的,但是这些值并不重要。在CNDTR中添加一些较大的值,例如0x8000 (使溢出处理更简单)。它将计数计时器捕获事件(向下),同时重复复制同一个字节。您可以在需要时检查控制循环中的计数器。

这样做的优点是根本不使用单片机核心,它可以休眠以节省电源,外围模块将自动计数。缺点当然是它使用6个DMA信道(在7个中,例如在STM32F103C8上)。

如果需要时间戳,可以让DMA将它们从CCR寄存器复制到真正的内存缓冲区,同时打开内存增量。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53137147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档