

为什么我想输出的pwm,一路正常一路无法输出 ,用的Tim1和Pa8,pa9 目的是通过tb6612控制两个电机,现在是一个电机正常一个不动,求修改代码


阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
你遇到的问题是,使用 STM32 的 Tim1 和 Pa8,Pa9 产生 PWM 信号,但只有一个电机正常工作,另一个电机无法工作。下面是可能的解决方案:
以下是一个简单的示例代码,使用 STM32 的 Tim1 和 Pa8,Pa9 产生 PWM 信号:
#include "stm32f10x.h"
int main(void) {
// 配置 Tim1
TIM1->CR1 = TIM_CR1_CEN; // 启动 Timer
TIM1->CR1 |= TIM_CR1_ARP; // 设置分频器
TIM1->PSC = 0x00; // 设置 Timer 的 clock
TIM1->ARR = 0x00; // 设置 Timer 的 reload value
// 配置 Pa8 和 Pa9
GPIOA->MODER &= ~(GPIO_MODER_MODE8 | GPIO_MODER_MODE9); // 设置 Pa8 和 Pa9 的模式
GPIOA->MODER |= GPIO_MODER_MODE8_1 | GPIO_MODER_MODE9_1; // 设置 Pa8 和 Pa9 的 Alternate Function 模式
GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED8 | GPIO_OSPEEDR_OSPEED9; // 设置 Pa8 和 Pa9 的输出速度
GPIOA->OTYPER |= GPIO_OTYPER_OT8 | GPIO_OTYPER_OT9; // 设置 Pa8 和 Pa9 的输出类型
// 产生 PWM 信号
while (1) {
// 设置 duty cycle
TIM1->CCR1 = 0x00; // 设置 duty cycle 的下限
TIM1->CCR2 = 0x00; // 设置 duty cycle 的上限
// 产生 PWM 信号
TIM1->EGR |= TIM_EGR_UG; // 产生 PWM 信号
}
return 0;
}
这个示例代码只是一个简单的示例,实际情况可能需要根据具体的需求和硬件情况进行修改。