完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
工程师您好,我在使用STM32PWM定时器的时候遇到一个奇怪的问题,我用的芯片是STM32F030K6T6,外接8MHz的晶振,经过处理达到48MHz的频率,我用tiM1生成15kHz的PWM信号输出是正常的,我想让每隔10000个PWM周期(时间大概是0.66s)进入一次中断,部分配置代码如下图所示:
首先我定义了一个全局变量uint32_t time_cnt = 0; 然后我让程序每次进入中断将变量time_cnt加1 但奇怪的是程序运行时我在watch窗口看到time_cnt以极快的速度更新,并不是正常的0.66s更新。为了验证我进入中断是否正常,我在main函数的while(1)循环中将一个引脚的电平拉低,在中断函数中我将引脚的电平拉高,用示波器采到该引脚的信号如下图所示: 可以看到两次高电平的时间间隔是696ms,这说明中断是正常的,但是我想不明白简单定义一个变量让它每次进入中断加1为什么就不对呢? |
|
相关推荐
1个回答
|
|
几点建议:
1. 确保启用了TIM1定时器的中断功能。在您的代码中,您需要调用以下函数之一启用中断: - `HAL_TIM_Base_Start_IT(&htim1);` - `HA... 2. 在中断处理函数中正确地处理时间计数。根据您的描述,您的目标是在每个10000个PWM周期后触发中断,但是您的代码中并没有涉及这个逻辑。在中断处理函数中,您应该增加一个判断语句,以检查时间计数是否达到所需值。具体怎么写取决于您的代码逻辑,但是以下是一个示例,请根据您的需要进行修改: ``` void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim == &htim1) { time_cnt++; if(time_cnt >= 10000) { // 在这里添加您希望执行的任务 time_cnt = 0; // 重置时间计数 } } } ``` 3. 确保中断处理函数已正确注册。根据您的代码,您应该有类似以下的中断处理函数: ``` void TIM1_IRQHandler(void) { HAL_TIM_IRQHandler(&htim1); } ``` 确保在 `main()` 函数中正确地调用了 `HAL_TIM_Base_MspInit()` 函数,以启用定时器中断。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2136 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1970 浏览 3 评论
4566 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2116 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2629 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 23:58 , Processed in 0.971370 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号