標(biāo)題:
STM32F103C8T6單片機(jī)定時(shí)器1通道1,2,3無(wú)輸出
[打印本頁(yè)]
作者:
liusir617
時(shí)間:
2022-3-9 21:10
標(biāo)題:
STM32F103C8T6單片機(jī)定時(shí)器1通道1,2,3無(wú)輸出
#include "PWM.h"
extern u16 zhankong;
void PWM_init(u16 a,u16 b)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStructure;
// TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,DISABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP ;
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
TIM_TimeBaseInitStruct.TIM_Period = 0;//自動(dòng)裝載ARR的值
TIM_TimeBaseInitStruct.TIM_Prescaler =300;
TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter =0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
TIM_OCInitStructure.TIM_Pulse = a;//比較CCR的值,決定脈沖寬度,決定占空比
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比較輸出使能TIM_
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
//TIM_OCInitStructure.TIM_OutputState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //輸出極性:TIM輸出比較極性高
TIM_OC1Init(TIM1, &TIM_OCInitStructure); //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC2
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM3在CCR2上的預(yù)裝載寄存器
TIM_CtrlPWMOutputs(TIM1, ENABLE);
TIM_Cmd(TIM1,ENABLE);
}
void pwm(void)
{TIM_SetAutoreload(TIM1, 0X3000);//設(shè)置預(yù)裝載寄存器
TIM_SetCompare1( TIM1,zhankong);//設(shè)置占空
}
作者:
liusir617
時(shí)間:
2022-3-13 11:47
#include "stm32f10x.h"
int main(void){
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
//
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,DISABLE);
RCC->APB2ENR|=1<<11; //TIM1時(shí)鐘使能
RCC->APB2ENR|=1<<2; //使能PORTA時(shí)鐘
RCC->APB2ENR|=1<<3; //使能PORTB時(shí)鐘
RCC->APB2ENR|=1<<0; //開(kāi)啟輔助時(shí)鐘
GPIOA->CRH&=0XFFFFF000; //清除PA8,9,10配置
GPIOA->CRH|=0X00000BBB; //PA8,9,10推挽復(fù)用功能輸出 B=1011
GPIOB->CRH&=0X000FFFFF; //清除PB13,14,15配置
GPIOB->CRH|=0XBBB00000; //PB13,14,15推挽復(fù)用功能輸出
GPIOA->ODR|=1<<8;
GPIOA->ODR|=1<<9;GPIOA->ODR|=1<<10;
GPIOB->ODR|=1<<13;
GPIOB->ODR|=1<<14;GPIOB->ODR|=1<<15;
TIM1->CCR1=1500;
TIM1->CCR2=800;
TIM1->CCR3=1200;
TIM1->ARR=3000; //設(shè)定計(jì)數(shù)器自動(dòng)重裝值
TIM1->PSC=30; //預(yù)分頻器不分頻
TIM1->BDTR|=0xCD; // 死區(qū)時(shí)間設(shè)定
TIM1->CCER|=1<<0;//TIM1CH1通道開(kāi)關(guān)使能
TIM1->CCER|=1<<2;//TIM1CH1N 通道開(kāi)關(guān)
TIM1->CCER|=1<<4;
TIM1->CCER|=1<<6;
TIM1->CCER|=1<<8;
TIM1->CCER|=1<<10;
TIM1->CCMR1|=7<<4; //CH1 PWM2模式
TIM1->CCMR1|=1<<3; //CH1預(yù)裝載使能
TIM1->CCMR1|=7<<12; //CH2 PWM2模式
TIM1->CCMR1|=1<<11; //CH1預(yù)裝載使能
TIM1->CCMR2|=7<<4; //CH3 PWM2模式
TIM1->CCMR2|=1<<11; //CH3預(yù)裝載使能
TIM1->CR1|=0X80;// CR1 ARPE自動(dòng)重裝載預(yù)裝載允許位使能
TIM1->BDTR|=1<<15; //剎車(chē)使能位置1,開(kāi)啟所有輸出通道
TIM1->CR1|=0X01; //使能定時(shí)計(jì)數(shù)器1
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1