完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在PWM溢出或是比较中断时,进中断将一个IO口翻转,然后执行中断程序(用延时3us测试),屏蔽中断程序,可以看IO翻转边沿与PWM翻转边沿对齐,当执行中断程序时,IO翻转边沿滞后PWM翻转边沿。以下是初始化配置与中断程序。void PWM1_INIT(void)
{ CLK_PCKENR1 |= 0x80;//开启定时器1外设时钟 tiM1_CR1 = (1<<7); //自动预装载允许 //设置TIM1 CH1 与 TIM1 CH1N通道 TIM1_CCMR1 = (6<<4)|(1<<3)|(1<<2); //TIM1 CH1 PWM1 输出比较1预装载使能 输出比较1 快速使能 //TIM1_CCER1 |= 0x01; //CC1为输出 高电平有效 TIM1_CCER1 |= (1<<0)|(1<<2); //CC1为输出 OC1高电平有效 开启OC1N OC1N高电平有效 //设置TIM1 CH2 与 TIM1 CH2N通道 TIM1_CCMR2 =(6<<4)|(1<<3)|(1<<2); //TIM1 CH2 输出模式 PWM1 输出比较2预装载使能 输出比较2 快速使能 TIM1_CCER1 |= (1<<4)|(1<<6); //CC2为输出 互补输出使能 TIM1_PSCRH = 0x00; //预分频 0 TIM1_PSCRL = 0x00; //16M TIM1_ARRH = 0x01; //设定自动重装载值高8位 TIM1_ARRL = 0x40; //设置自动重装载值低8位 TIM1_CCR1H = 0x00; TIM1_CCR1L = 0x64; // 占空比值 TIM1_CCR2H = 0x00; TIM1_CCR2L = 0x64; // 占空比值 //TIM1_BKR |= (1<<7)|(1<<4); //刹车寄存器 使能OC1输出 定时器不工作时输出无效电平 开启刹车输入 刹车输入低电平有效 TIM1_BKR |= (1<<7); //主输出使能 关闭刹车输入 TIM1_DTR = 0x18; //死区时间 24*125ns=3000ns TIM1_EGR = (1<<0); //产生更新事件 TIM1_CR1 |= 0x01; //使能计数器 TIM1_IER |= 0x01; //允许更新中断 } #pragma vector=0xD __interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) { TIM1_SR1_UIF = 0; //更新中断标志 PC_ODR_ODR5 ^= 1; //PC_ODR_ODR5 = 1; //Delay_Just(5); //PC_ODR_ODR5 = 0; // TIM1_SR1_UIF = 0; //更新中断标志 } |
|
相关推荐
2个回答
|
|
看起来像是先延时再翻转了IO口。在DEBUG模式下看看汇编代码部分是不是先执行了延时。一般来说中断是硬件触发,到软件执行不会有什么物理延迟的,除非其他中断阻塞到它的执行
|
|
|
|
PWM溢出中断或比较中断执行中断程序有延时的原因可能是因为中断服务程序(ISR)的执行时间相对较长,导致延迟了IO口的翻转。
在STM8中,当一个中断被触发时,CPU会立即开始执行ISR,并且会自动屏蔽其他中断,以确保ISR的完整执行。在ISR执行期间,其他中断将被放置在挂起状态,直到ISR结束并启用其他中断。 在你的代码中,当PWM溢出或比较中断发生时,ISR会被触发,并执行中断程序。然而,如果中断程序的执行时间较长(例如通过延时函数延时3us),那么IO口的翻转就会延迟,因为中断程序执行期间,其他中断被屏蔽,包括IO口的翻转引脚的中断。 解决这个问题的方法是尽量减少中断程序的执行时间。如果需要实现较长的延时,可以考虑使用硬件定时器或其他定时方法来进行延时操作,而不是使用延时函数。这样可以确保IO口的翻转与PWM翻转边沿对齐。 另外,还可以考虑优化中断程序的代码,尽量使其执行时间更短。这可以通过合理的算法设计、避免使用复杂的计算或调用耗时的函数等方式来实现。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 05:41 , Processed in 0.827253 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号