proteus仿真stm32控制呼吸灯

proteus仿真stm32控制呼吸灯

  • 设计思路:

采用stm32f103r6为主控芯片,及led-green;时钟源为晶振为8M的系统内部时钟;使用的定时器为TIM2,并且使用PWM Generation CH1为PWM输出;

  • proteus仿真电路设计

在这里插入图片描述

  • 软件设计:
/***   TIM2和PWM配置    ***/
TIM_HandleTypeDef htim2; 
/* TIM2 init function */
void MX_TIM2_Init(void)
{  
 TIM_ClockConfigTypeDef sClockSourceConfig = {0};
 TIM_MasterConfigTypeDef sMasterConfig = {0}; 
 TIM_OC_InitTypeDef sConfigOC = {0};
 htim2.Instance = TIM2;  htim2.Init.Prescaler = 8000-1;
 htim2.Init.CounterMode = TIM_COUNTERMODE_UP; 
 htim2.Init.Period = 100-1; 
 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
 if (HAL_TIM_Base_Init(&htim2) != HAL_OK) 
 {    
  	Error_Handler();
  } 
 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;  
 if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) 
 {    
 	Error_Handler();
  } 
 if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) 
 {    
 	Error_Handler();
 } 
 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
 sMasterConfig.MasterSlaveModeTIM_MASTERSLAVEMODE_DISABLE;  
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) 
 {   
 	 Error_Handler(); 
 }  
 sConfigOC.OCMode = TIM_OCMODE_PWM1;  
 sConfigOC.Pulse = 50;  
 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;  
 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; 
 if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
 {    
 	Error_Handler(); 
 } 
 HAL_TIM_MspPostInit(&htim2); 
 }
/***   开启PWM    ***/
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
/***   主函数    ***/
int main(void)
{  
 /* USER CODE BEGIN 1 */  
 /* 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 */
 ystemClock_Config();  
 /* USER CODE BEGIN SysInit */
 /* USER CODE END SysInit */  
 /* Initialize all configured peripherals */
 MX_GPIO_Init(); 
 MX_TIM2_Init();
 /* USER CODE BEGIN 2 */
 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
 int i = 0; 
 /* USER CODE END 2 */   
 /* Infinite loop */  
 /* USER CODE BEGIN WHILE */ 
  while (1) 
  {   
    /* USER CODE END WHILE */   
    /* USER CODE BEGIN 3 */ 
    for(i=0;i<=100;i++)	
 	{		
 	 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,  i);
	 HAL_Delay(100);		
	 i+=9;	
	}	  
    for(i=100;i>=0;i--)	
	{		  
 	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,  i);
	HAL_Delay(100);		
	i-=9;	
	}   
  }  
 /* USER CODE END 3 */
}
  • Keil仿真PWM引脚输出波形:
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45323971/article/details/107433930