OpenEdv-开源电子网

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

rtt开启同一个定时器的定时功能和pwm功能后,定时器不准

[复制链接]

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2019-6-28
在线时间
27 小时
发表于 2020-2-5 12:01:18 | 显示全部楼层 |阅读模式
1金钱
如题:我打开了定时器的PWM功能,PWM闪烁正常。但是定时器的5秒定时不准,基本是几毫秒级别的。但是当我把pwm功能屏蔽后,定时器功能就正常了。是不是rtt中通一个定时器不能同时打开定时中断和溢出中断啊!!!!

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;
}

最佳答案

查看完整内容[请看2#楼]

高铁和绿皮车的宽度都一样的,低速时可以共轨道。 但跑300时就没法共轨了。 比如你PWM要输出10Khz,而定时器要定20ms,他们2个没法在一个timer上实现啊。 你是用stm32吗? stm32的每个timer有4个通道,12通道是共用时基的,34通道是共用时基的。 你翻下STM32的参考手册看下是否可以满足你的要求的吧。 以及你之前分别是要求多少,再对比下现在代码,看是否可以改进下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

1041

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3696
金钱
3696
注册时间
2011-5-23
在线时间
2008 小时
发表于 2020-2-5 12:01:19 | 显示全部楼层
本帖最后由 aozima 于 2020-2-12 09:40 编辑

高铁和绿皮车的宽度都一样的,低速时可以共轨道。
但跑300时就没法共轨了。

比如你PWM要输出10Khz,而定时器要定20ms,他们2个没法在一个timer上实现啊。

你是用stm32吗? stm32的每个timer有4个通道,12通道是共用时基的,34通道是共用时基的。
你翻下STM32的参考手册看下是否可以满足你的要求的吧。
以及你之前分别是要求多少,再对比下现在代码,看是否可以改进下。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

11

主题

1041

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3696
金钱
3696
注册时间
2011-5-23
在线时间
2008 小时
发表于 2020-2-5 13:10:31 | 显示全部楼层
这应该是timer硬件决定的,你把定时用的定时器换一个。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2019-6-28
在线时间
27 小时
 楼主| 发表于 2020-2-11 17:31:36 | 显示全部楼层
aozima 发表于 2020-2-5 13:10
这应该是timer硬件决定的,你把定时用的定时器换一个。

但是用keil的时候是可以的啊,定时功能和pwm功能可以用一个定时器搞定啊
回复

使用道具 举报

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2019-6-28
在线时间
27 小时
 楼主| 发表于 2020-2-14 20:47:35 | 显示全部楼层
我输出的PWM只是一路啊(TIM3的CH2)
回复

使用道具 举报

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2019-6-28
在线时间
27 小时
 楼主| 发表于 2020-2-14 20:49:06 | 显示全部楼层
aozima 发表于 2020-2-5 12:01
高铁和绿皮车的宽度都一样的,低速时可以共轨道。
但跑300时就没法共轨了。

我只开了一个通道啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 13:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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