OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6637|回复: 8

F405定时器输出脉冲,单步运行和连续运行产生的宽度不一致

[复制链接]

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
发表于 2021-6-2 16:40:56 | 显示全部楼层 |阅读模式
100金钱
本帖最后由 xuande 于 2021-6-3 11:43 编辑

F405,把 PB8 管脚映射为 TIM10 ch1,想用 PWM mode 1 模式产生一个 1mS 宽的脉冲,高有效。

程序编写完,下载运行,示波器监测 PB8 脚,
发现用仿真器单步运行时脉冲宽度正常,很准确的 1mS;
如果程序下载后连续运行,或者 CPU 脱开仿真器、上电自主运行,脉冲宽度只有 12uS。
二者相差几十倍。

也就是说,单步运行和连续运行,产生的脉冲宽度严重不一致。似乎预分频寄存器被跳过,无视了。


不知道为什么?怎么解决?






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
 楼主| 发表于 2021-6-2 16:41:28 | 显示全部楼层
本帖最后由 xuande 于 2021-6-3 08:52 编辑

完整程序如下:

//Configure PB8 as output:

RCC -> AHB1ENR |= 1 << 1;                                        //Enable clock of GPIOB.

GPIOB -> MODER &= ~( 0x3 << 16 ) ;                                //PB8 as AF mode.
GPIOB -> MODER |= 2 << 16;
GPIOB -> AFR[1] |= 3 << 0;                                        //PB8 as AF3 (TIM10).

//Configure TIM10.
RCC -> APB2ENR |= ( 1 << 17 );                                //Enable clock of TIM10.

TIM10 -> CCMR1 |= 6 << 4;                                        //Ch1 as PWM mode 1 mode.
TIM10 -> CCER |= 1 << 0;                                        //Ch1 output enabled.

TIM10 -> PSC = 83;                                                  //脉冲宽度为 1mS 。
TIM10 -> CCR1 = 2000;

//测试程序。
while        (1)
        {
        TIM10 -> CNT = 0;   
        TIM10 -> CR1 |= 1 << 0;                                    //启动定时器。

        while         ( !( TIM10 -> SR & ( 1 << 1 ) ) );        //等待脉冲结束。

        TIM10 -> CR1 &= ~( 1 << 0 );                                //Disable TIM10.
        TIM10 -> SR &= ~( 3 << 1 );                                //Clear flag.

        for        ( i=0; i<0x20000; i++ );
        }



回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-6-2 16:50:12 | 显示全部楼层
帮顶  
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
 楼主| 发表于 2021-6-3 08:53:08 | 显示全部楼层
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
 楼主| 发表于 2021-6-3 16:24:30 | 显示全部楼层


在反复实验过程中,怀疑连续运行时 PSC 寄存器不起作用。
下午用实验验证一下。

具体方法是:
保持 PSC 分频器的值为 0,即分频系数为 1,
那么脉冲宽度由匹配寄存器 CCR1(针对 TIM10) 或 CCR3(针对 TIM4) 决定。

实验结果:
无论单步运行,还是带仿真器连续运行,还是下载后 CPU 自主运行(重新上电),
脉宽都是正常的,不再出现异常的 12uS 。

两个定时器都试了,结果都正常,而使用 PSC 的时候都不正常。

这似乎验证了上面的结论:连续运行或者自主运行时,PSC 被无视了。
原因不明。


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2021-6-4 01:01:50 | 显示全部楼层
这个说不准哦,倒是没遇到过这个问题
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4734
金钱
4734
注册时间
2015-1-10
在线时间
591 小时
发表于 2021-6-4 15:12:37 | 显示全部楼层
资深版主问了一个定时器分频值的问题,我只能怀疑是片子本身的问题
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11476
金钱
11476
注册时间
2014-4-1
在线时间
1297 小时
 楼主| 发表于 2021-6-4 16:02:49 | 显示全部楼层
阿侑kevin 发表于 2021-6-4 15:12
资深版主问了一个定时器分频值的问题,我只能怀疑是片子本身的问题


不同角度做了好多实验,
上面描述只是其中一部分。

确实,我现在也怀疑是芯片问题。

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2021-6-4 23:44:24 | 显示全部楼层
xuande 发表于 2021-6-4 16:02
不同角度做了好多实验,
上面描述只是其中一部分。

换个片子试试?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 17:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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