/* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */volatilechar capture_flag =0;//捕获状态标记变量,0x80最高位标记捕获完一个周期,0x40表示捕获到了上升沿volatileuint8_t OverflowCount_high =0;//高电平期间溢出次数volatileuint8_t OverflowCount_low =0;//低电平期间溢出次数volatileuint32_t value1, value2, value3;//下图中三个边沿中的值volatileuint32_t Pulse_Width =0;//脉宽volatileuint32_t PWM_Period =0;//周期uint32_t PWM_Period_ARR[5]={0};uint8_t PWM_Period_CNT =0;/* USER CODE END PV */intmain(void){/* USER CODE BEGIN 1 */uint32_t TimerUART;// uint16_t plusewidth = 500;//脉冲宽度;f=1000 000/500=2000Hz// uint16_t plusedelay = 20;//脉宽40us/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();MX_TIM14_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */uint32_t sysclock =0;//sysclock =RCC_GetHSIFreq();
sysclock =HAL_RCC_GetSysClockFreq();//RCC_GetHSIFreq()
TimerUART =HAL_GetTick();printf("STM32F030 SysClockFreq:%d \r\n", sysclock);// __HAL_TIM_SET_AUTORELOAD(&htim14, plusewidth - 1); //调整分频系数,可以改变arr以改变频率// __HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, plusedelay); //PWM脉冲宽度,修改占空比比较值/* 使能PWM输出 */HAL_TIM_PWM_Start(&htim14, TIM_CHANNEL_1);/* 清零中断标志位 */__HAL_TIM_CLEAR_IT(&htim1, TIM_IT_UPDATE);/* 使能定时器的更新事件中断 */__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);/* 使能输入捕获 */HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if((HAL_GetTick()- TimerUART)>1000){printf("/********************/\r\n");printf("脉宽为: %d us\r\n", Pulse_Width);printf("周期为: %d us\r\n", PWM_Period);printf("/********************/\r\n");
TimerUART =HAL_GetTick();}}/* USER CODE END 3 */}