OpenEdv-开源电子网

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

求助:PWM中断问题以及中断优先级问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-9-12
在线时间
0 小时
发表于 2019-9-12 14:09:30 | 显示全部楼层 |阅读模式
1金钱
求助:我用定时器2 做了一个PWM 功能是 每发送一次PWM 进入一次定时器2中断,然后在定时器2中断里面做一个计数器累加并判断如果大于32次就关闭PWM。这个PWM 是 大约100US 使能一次,从新产生一个PWM。。同时用定时器3做了一个100US的定时器,这个定时器中断里面我做了一些程序。结果发现  定时器3 中断会影响 我做的PWM,使PWM产生的个数大于我开始设定的32次了(可能是40左右,如果屏蔽定时器3中断里面的程序,PWM 就恢复)。我试图通过改变中断优先级来解决这个问题,但最后没有成功。问题1:通过配置中断优先级能不能解决我的问题,如果能帮忙看看我为什么失败了。问题2:有什么好的方法能解决我遇到的问题吗?希望各位大神伸出援助之手,再次感谢。
中断优先级设置:
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);       
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;        //用于PWM
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;    //抢占优先级1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;           //从优先级1,
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                              //允许中断
        NVIC_Init(&NVIC_InitStructure);

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);       
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;        //用于100Us定时
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;    //抢占优先级1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;           //从优先级2
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                              //允许中断
        NVIC_Init(&NVIC_InitStructure);


QQ图片20190912121214.jpg

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-9-13 01:55:18 | 显示全部楼层
输出精确PWM的方法,论坛有好多讨论,也有源码,你可以参考下。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 10:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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