完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
11个回答
|
|
这样写不太好,从代码来看你是用中断模拟一个PWM波形,PC2引脚好像也没定义硬件PWM,这样只能做较低频率的PWM。
假设你做一个30%占空比的PWM,周期为T,则启动的时候将T3的中断周期设置为0.3T,其间PC2输出高电平,当T3产生中断时,PC2输出低电平,并将T3的中断周期改为0.7T,再次产生中断时,回到开始,就完成循环输出。如果输出的脉冲个数有限制,可以每完成一个周期计数一次,到达脉冲数之后就不再输出。 因此你的中断里面需要做一下几件事情: 1、设置PC2的输出电平 2、修改T3的周期,表示PC2电平持续的时间 3、统计输出的脉冲数(非必需) 4、重新启动T3 伪码: void T3_IRQHandle(void) { 禁止T3; if(T3中断标志) { if(电平标志 == 高) { PC2输出低电平 修改T3的中断周期,表示低电平持续的时间 电平标志 = 低 } else { PC2输出高电平 修改T3的中断周期,表示高电平持续的时间 电平标志 = 高 } } 清除中断标志 if(输出脉冲 < 设定脉冲)//可以是其他终止条件,也可以没有终止一直输出 { 使能T3 } } 这样中断一直发生,输出一直可以持续,但是如果你的频率很高,就要考虑代码执行时间对波形的影响 这样做是不稳定的,就是如果其他中断在执行,输出的占空比精度会受到影响 如果你要做一些控制例如电机加减速,则可以在步骤2加入计算或查表等等 不要在中断里面使用while(1),中断时间过长会影响系统性能,例如这时候其他设备串口发来数据,但是你还在T3里面循环,等退出来的时候可能串口数据已经丢掉了一部分....
最佳答案
|
|
|
|
用定时器
|
|
|
|
自己顶一下
|
|
|
|
应该先看看原理图吧,看看PC2有没有定时器复用,再或者看看那个定时器的映射管脚有没有PC2,不知道对不对
|
|
|
|
|
|
|
|
没有啊,有的话配置一下就可以了 |
|
|
|
请问这样写中断函数吗有问题吗? |
|
|
|
|
|
|
|
这样写中断函数有问题吗?
|
|
|
|
andy_wsj 发表于 2016-11-21 17:13 请问是这样的吗?
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2049 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1893 浏览 3 评论
4485 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2040 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2549 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:57 , Processed in 0.724580 second(s), Total 65, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号