#include "stm32f10x.h" // Device header#include "stm32f10x_gpio.h" //Keil: evice:StdPeriph Drivers:GPIO#include "stm32f10x_rcc.h" // Keil: evice:StdPeriph Drivers:RCC#include"stm32f10x_tim.h" // Keil: evice:StdPeriphDrivers:T#include "stm32f10x_exti.h" // Keil::Device:StdPeriphDrivers:EXTI#include "RTE_Device.h" // Keil::Device:Startup#include "RCC.h" // Keil::Device:StdPeriphDrivers:Framework#include "timx.h" // Keil::Device:StdPeriphDrivers:Framework#include "stm32f10x_tim.h" //Keil::Device:StdPeriph Drivers:TIM void RCC_Configuration(void); void GPIO_Configretion(void); void NVIC_Configuration(void); void Tim2_Init(void); //void Timx_Init(void); void delay_nus(unsigned long n); void delay_nms(unsigned long n); u16 CCR1_val = 18000; u16 CCR2_val = 9000; int main() { GPIO_SetBits(GPIOB,GPIO_Pin_10); RCC_Configuration(); GPIO_Configretion(); NVIC_Configuration(); //Timx_Init(); Tim2_Init(); TIM_Cmd(TIM2,ENABLE); TIM_CtrlPWMOutputs(TIM2,ENABLE); while(1); } void delay_nus(unsigned long n) { unsigned long i; while(n--) { i=8;while(i--); } } void delay_nms(unsigned long n) { while(n--) delay_nus(1000); } void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; //RCC reset RCC_DeInit(); //Enable HSE RCC_HSEConfig(RCC_HSE_ON); //Wait HSE is ready HSEStartUpStatus = RCC_WaitForHSEStartUp(); //If HSE start fail, wail and wail. while(HSEStartUpStatus == ERROR); //Set bus clock RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); //HSE8M PLL-> 72M RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Select PLL as system clock source RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); //----------------------------- CLOSE HSI--------------------------- RCC_HSICmd(DISABLE); //--------------------------- OPEN GPIO CLK------------------------- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //---------------------------- INT CONFIG--------------------------- //2-level interrupt //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //---------------------------- JTAG CONFIG--------------------------- //JTAG/SWD disable //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); } void GPIO_Configretion(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2); EXTI_InitStructure.EXTI_Line = EXTI_Line2; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; NVIC_Init(&NVIC_InitStructure); } void Tim2_Init() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //»ù±¾éèÖão·ÖÆμ, ÆμÂê, ¼Æêy·½ê½ TIM_OCInitTypeDef TIM_OCInitStructure; //·½2¨óDD§·½ê½£¬óDD§μçÆ½£¬ê1Äü»¥21ê1Äü TIM_BDTRInitTypeDef TIM_BDTRInitStructure; TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period = 35999; TIM_TimeBaseStructure.TIM_Prescaler = 7999; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //Channe l1234 Configuration in PWM mode TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;//???????? //TIM_OCInitStructure.TIM_OutputNState =TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR1_val; //μ÷½úÕ¼¿Õ±è TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_Low;//μíμçÆ½ÎaóDD§μçÆ½ //TIM_OCInitStructure.TIM_OCNPolarity =TIM_OCNPolarity_Low; //éèÖÃêä3ö±è½Ï¿ÕÏD×′ì¬(MOE=0) TIM_OCInitStructure.TIM_OCIdleState =TIM_OCIdleState_Set; //TIM_OCInitStructure.TIM_OCNIdleState =TIM_OCIdleState_Reset; TIM_OC1Init(TIM2,&TIM_OCInitStructure); //í¨μà1 TIM_OCInitStructure.TIM_Pulse = CCR2_val;//í¨μà¶tòÔ¼°Õ¼¿Õ±è TIM_OC2Init(TIM2,&TIM_OCInitStructure); TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;//ËàÇøê1Äü TIM_BDTRInitStructure.TIM_OSSIState =TIM_OSSIState_Enable; TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; TIM_BDTRInitStructure.TIM_DeadTime = 0x75; //ËàÇøê±¼ä1.625us TIM_BDTRInitStructure.TIM_Break =TIM_Break_Enable; TIM_BDTRInitStructure.TIM_BreakPolarity =TIM_BreakPolarity_High; TIM_BDTRInitStructure.TIM_AutomaticOutput =TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM2,&TIM_BDTRInitStructure); } void Timx_Init(void) { //TIM_ClearFlag(TIM2,TIM_FLAG_Update); //TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); // TIM_Cmd(TIM2,ENABLE); } |
| 欢迎光临 迅维网 (https://www.chinafix.com/) | Powered by Discuz! X3.4 |