打印

STM32 捕获寄存器的值实时在变,为什么?

[复制链接]
5163|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lixiaoxu2meng|  楼主 | 2011-2-19 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现用 STM32F103VE 将定时器TIM1 设为选择外部时钟模式1,把TIM1通道1上的信号作为计数的时钟源,然后选择通道4作为输入捕获引脚,设置为上升沿捕获,每秒捕获一次,不应该是每次捕获发生时才更新捕获寄存器CCR1吗?但是现发现捕获寄存器CCR1内的数值实时在变?
沙发
lixiaoxu2meng|  楼主 | 2011-2-21 11:30 | 只看该作者
怎么没人回答呢?

使用特权

评论回复
板凳
香水城| | 2011-2-21 11:42 | 只看该作者
几个问题:
1)既然TIM1是选择外部时钟模式1,又如何把TIM1通道1上的信号作为计数的时钟源?
2)如何控制每秒捕获一次?
3)在通道4做捕获操作,为什么要读捕获寄存器CCR1,而不是CCR4?

使用特权

评论回复
地板
lixiaoxu2meng|  楼主 | 2011-2-21 12:00 | 只看该作者
3# 香水城


1. 就是对定时器TIM1通道1进行计数,
数据手册上:外部时钟源模式1 当TIMx_SMCR寄存器的SMS=111时,此模式被选中。计数器可以在选定输入端的每个上升沿或下降沿计数。
我将TIM1的通道1设为输入端。

2 用其他定时器定时产生1s的方波,连接到定时器TIM1的通道是4上,然后将定时器TIM1通道4设置为每个上升沿都捕获。
3 寄存器是我写错了 读的是CCR4

使用特权

评论回复
5
香水城| | 2011-2-21 12:22 | 只看该作者
1)请贴出其它寄存器的配置
2)如何把其他定时器定时产生的1s方波,连接到定时器TIM1的通道4上?
3)如何判断捕获寄存器的值在实时变化?

使用特权

评论回复
6
lixiaoxu2meng|  楼主 | 2011-2-21 12:47 | 只看该作者
5# 香水城
1.我用的2.0V的固件库
void AdvanTIM_Configuration(void)
{
  TIM_ICInitTypeDef  TIM_ICInitStructure;
  
  /* Selects the TI1 as clock for TIM1: the external clock is connected to TI1 input pin,
  the rising edge is the active edge and no filter sampling is done (ICFilter = 0) */
  TIM_TIxExternalClockConfig(TIM1, TIM_TS_TI1FP1, TIM_ICPolarity_Rising, 0);

  /* TIM1 Input trigger configuration: External Trigger connected to TI1 */
  TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1);   
  TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_External1);  
  
  
  /* TIM1 Input Capture TIM_Channel_4 Configuration */
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 7;
  
  TIM_ICInit(TIM1, &TIM_ICInitStructure);
  
  /*使能TIM1计数器*/
  TIM_Cmd(TIM1, ENABLE);
  
  /*使能TIM1 CC4中断请求*/
  TIM_ITConfig(TIM1, TIM_IT_CC4, ENABLE);
}
2.我用定时器TIM2产生周期为1秒的PWM,然后直接将其连接到定时器TIM1的通道4上,用示波器观察正常
3.我在程序里实时读取捕获寄存器CCR4,让后通过液晶显示出来,发现其值随着计数器的值改变而实时改变,而不是每秒改变一次,但是观察发现 捕获中断的确是是每秒进入一次。

使用特权

评论回复
7
lixiaoxu2meng|  楼主 | 2011-2-21 12:52 | 只看该作者
5# 香水城
连接:我是通过外部将两个引脚连接起来的

使用特权

评论回复
8
香水城| | 2011-2-21 13:04 | 只看该作者
5# 香水城  
连接:我是通过外部将两个引脚连接起来的
lixiaoxu2meng 发表于 2011-2-21 12:52


哪两个引脚?

使用特权

评论回复
9
lixiaoxu2meng|  楼主 | 2011-2-21 13:11 | 只看该作者
8# 香水城
我用的是STM32103F VE100脚的
定时器TIM2的通道1 (PA15)和定时器TIM1的通道4 (PA11)
定时器TIM2的通道1 (PA15)引脚是复用的  刚开始是配置为 JTDI功能 让后延时一段 再配置为 PWM模式

使用特权

评论回复
10
香水城| | 2011-2-21 15:47 | 只看该作者
请问你在中断中读到的捕获值正确吗?
6楼说在程序里实时读取捕获寄存器CCR4,是怎么读的?是否读错了?

使用特权

评论回复
11
lixiaoxu2meng|  楼主 | 2011-2-21 17:00 | 只看该作者
谢谢香主 问题解决了  呵呵 是我自己在显示程序中  弄错了

使用特权

评论回复
12
lixiaoxu2meng|  楼主 | 2011-2-21 17:01 | 只看该作者
寄存器读错了:L

使用特权

评论回复
13
香水城| | 2011-2-21 17:51 | 只看该作者
:dizzy: :sleepy:

使用特权

评论回复
14
usst_mcclane| | 2014-4-29 21:56 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1679

帖子

2

粉丝