OpenEdv-开源电子网

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

求助,rtt硬件定时器定时不准

[复制链接]

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2019-6-28
在线时间
27 小时
发表于 2019-11-21 20:17:37 | 显示全部楼层 |阅读模式

如题:我打开了定时器的PWM功能,PWM闪烁正常。但是定时器的5秒定时不准,基本是几毫秒级别的

static rt_thread_t tid1 = RT_NULL;
struct rt_device_pwm *pwm_dev;
rt_device_t hw_dev;
rt_uint32_t period=500000;
rt_uint32_t pulse = 50000;
rt_uint32_t dir;
rt_err_t ret = 0;
rt_uint32_t freq = 10000;
rt_hwtimer_mode_t mode;
rt_hwtimerval_t timeout_s;


int main(void)
{
        hw_dev = rt_device_find("timer3");
        if(hw_dev!=NULL)
        {
                rt_kprintf("timer3 find ok\r\n");
        }
        ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);
        if (ret != RT_EOK)
        {
                rt_kprintf("open timer3 device failed!\n");
                return ret;
        }
        rt_device_set_rx_indicate(hw_dev, timeout_cb);
        rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
        mode = HWTIMER_MODE_PERIOD;
        rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);
        timeout_s.sec = 5;
        timeout_s.usec = 0;
        rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s));


        pwm_dev = (struct rt_device_pwm *)rt_device_find("pwm3");
        if(pwm_dev!=NULL)
        {
                rt_kprintf("pwm find ok\r\n");
        }
        rt_pwm_set(pwm_dev, 2, period, pulse);
        rt_pwm_enable(pwm_dev, 2);
        tid1 = rt_thread_create("thread1",
                                                        thread1_entry, RT_NULL,
                                                        500,
                                                        23, 10);

        if (tid1 != RT_NULL)
        rt_thread_startup(tid1);
       
       
        return 0;
}

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

使用道具 举报

10

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2018-7-23
在线时间
23 小时
发表于 2019-12-9 10:07:21 | 显示全部楼层
不如说 ST 的定时器不准或者驱动没有对接好,RTT 的这个框架没有对硬件做什么,软件本身没有做什么事情。
不过还是得确定一下问题点在哪?
回复 支持 反对

使用道具 举报

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2019-6-28
在线时间
27 小时
 楼主| 发表于 2019-12-10 08:56:17 | 显示全部楼层
Ernest2000 发表于 2019-12-9 10:07
不如说 ST 的定时器不准或者驱动没有对接好,RTT 的这个框架没有对硬件做什么,软件本身没有做什么事情。
...

我在单独打开定时器的时候是准确的,但是加上PWM之后就不准了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2019-8-27
在线时间
19 小时
发表于 2020-2-19 16:55:25 | 显示全部楼层
我和你遇到一样的问题,在f103上定时5s是准确的,移植到潘多拉上就不是5s,感觉也是毫秒级别的
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2013-4-1
在线时间
105 小时
发表于 2020-2-20 14:43:21 | 显示全部楼层
还是检查你的代码的,你前面是准的已经说明这事情跟rtt没啥关系了啊
回复 支持 反对

使用道具 举报

10

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2012-1-22
在线时间
51 小时
发表于 2020-4-14 13:09:26 | 显示全部楼层
可以肯定是你代码的原因,RTT不涉及到你的定时器,你串口发送的波特率是多少??适当设置高些,我之前也遇到过RTT里面延时不准的情况,后面找到原因了,串口波特率太低了,导致发送数据占用时间,而且这个时间会随着你的系统越跑延时越慢,你自己看看
回复 支持 反对

使用道具 举报

10

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2017-3-27
在线时间
66 小时
发表于 2020-5-15 09:41:18 | 显示全部楼层
把RTT没用的调试关了, rtt只是软件框架,你要用的硬件定时器就好好看看自己的代码
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2014-2-14
在线时间
3 小时
发表于 2020-5-15 09:46:47 | 显示全部楼层
应该是没有配置好
回复 支持 反对

使用道具 举报

11

主题

1041

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3696
金钱
3696
注册时间
2011-5-23
在线时间
2008 小时
发表于 2020-5-18 14:54:52 | 显示全部楼层
和各通道之间的关联有关吧,timer也是复用timer通道的。
使用不同的timer就可以不受影响。
RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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