STM32
直播中

张娟

8年用户 2245经验值
私信 关注
[问答]

stm32高级定时器主输出使能后,usart1就不能发送只能接收,为什么?

我用高级定时器tiM1输出比较模式控制步进电机,然后通过蓝牙与手机上的app通信,当我把TIM_CtrlPWMOutputs(TIM1, ENABLE);去掉后(其他定时器配置都不注释掉),手机上的可以显示STM32串口发来的速度信息,但是此时是没有pwm输出的,那就说明我的串口配置是正常的,但是我加上TIM_CtrlPWMOutputs(TIM1, ENABLE);后,stm32就无法发送信息了,(一开始以为是蓝牙有问题,后来用电脑上的串口助手发现也不能受到)但是我通过手机可以控制步进电机的速度,说明接受是可以的。我以为TIM_CtrlPWMOutputs()这个函数对usart1有干扰,我看了下源码,跟usart1没有半毛钱关系啊,我还试了一下直接操作寄存器,也还是一样的效果。对此感觉很奇怪,这是不是又是stm32f103的一个bug?我把代码也上传分享一下,亲测可用的除了以上一点小bug,是57步进电机配合tb6600驱动的。

回帖(1)

石玉兰

2024-5-7 17:45:12
根据你的描述,问题可能出现在STM32的定时器和USART1之间的冲突。以下是一些可能的原因和解决方案:

1. **定时器和USART1共享相同的时钟源**:STM32的高级定时器(如TIM1)和USART1可能共享相同的时钟源。当你启用TIM1的PWM输出时,可能会影响USART1的时钟,导致无法发送数据。解决方案是检查时钟配置,确保USART1和TIM1使用不同的时钟源。

2. **GPIO复用冲突**:STM32的GPIO引脚可以复用为不同的功能,如定时器输出和USART1的TX/RX。如果TIM1的PWM输出和USART1的TX/RX共用同一个引脚,可能会导致冲突。解决方案是检查GPIO配置,确保TIM1的PWM输出和USART1的TX/RX使用不同的引脚。

3. **中断优先级冲突**:STM32的中断优先级可能影响USART1的发送。如果TIM1的中断优先级高于USART1的中断优先级,可能会导致USART1的发送被抢占。解决方案是调整中断优先级,确保USART1的中断优先级高于TIM1。

4. **软件问题**:可能是你的代码中存在逻辑错误,导致USART1无法发送数据。检查你的代码,确保在启用TIM1的PWM输出后,USART1的发送逻辑仍然正确。

5. **硬件问题**:如果以上方法都无法解决问题,可能是STM32硬件本身存在问题。尝试使用另一块STM32开发板进行测试,看是否仍然存在相同的问题。

总之,要解决这个问题,你需要从时钟配置、GPIO复用、中断优先级和代码逻辑等方面进行排查。希望这些建议能帮助你找到问题的原因并解决它。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分