有沒有大佬救救小白,我用的是普中的STM32F103ZET6開發板,想使用TIM1的比較輸出功能生成PWM波驅動直流電機,然后代碼寫好了,但是電機沒反應,有沒有大佬幫我看一下代碼有什么問題嗎
PWM.c:
#include "PWM.h"
void PWM_Init(u16 PWMT,u16 psc,u16 ENT){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//開啟TIM1時鐘
TIM_TimeBaseInitTypeDef TIM_InitST; //定時器時基結構體成員賦值
TIM_InitST.TIM_CounterMode=TIM_CounterMode_Up; //向上計數模式
TIM_InitST.TIM_Period=PWMT; //PWM周期
TIM_InitST.TIM_Prescaler=psc; //計數器分頻系數
TIM_TimeBaseInit(TIM1,&TIM_InitST); //時基初始化
TIM_OCInitTypeDef OC_InitST; //TIM1定時器比較輸出結構體初始化
OC_InitST.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式1
OC_InitST.TIM_Pulse=ENT; //占空比
OC_InitST.TIM_OCPolarity=TIM_OCPolarity_High; //高電平有效
OC_InitST.TIM_OutputState=TIM_OutputState_Enable; //輸出比較使能
TIM_OC1Init(TIM1,&OC_InitST); //比較輸出初始化
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); //比較輸出暫存器重計數器
TIM_Cmd(TIM1,ENABLE); //定時器使能
}
void TIM1_GPIO_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //TIM1比較輸出通道時鐘使能
GPIO_InitTypeDef GPIO_InitST; //GPIO初始化結構體成員賦值
GPIO_InitST.GPIO_Mode=GPIO_Mode_AF_PP; //復用輸出模式
GPIO_InitST.GPIO_Pin=GPIO_Pin_8; //TIM1比較輸出管腳
GPIO_InitST.GPIO_Speed=GPIO_Speed_50MHz; //輸出速度
GPIO_Init(GPIOA,&GPIO_InitST); //管腳初始化
}
PWM.h:
#include "stm32f10x.h"
#ifndef __PWM_H
#define __PWM_H
void PWM_Init(u16 PWMT,u16 psc,u16 ENT);
void TIM1_GPIO_Init(void);
#endif
main.c:
#include "stm32f10x.h"
#include "PWM.h"
int main(){
TIM1_GPIO_Init();
PWM_Init(1000,72-1,400);
while(1){
;
}
}
萬分感謝大佬!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/283698.html
標籤:單片機/工控