proteus仿真stm32利用串口通信方式,实现对电路中指示灯的控制

proteus仿真stm32利用串口通信方式,实现对电路中指示灯的控制。

  • 实现功能

发送小写字符“o”,开启指示灯LD2,发送小写字符“c”

  • 设计思路

本实验采用stm32f103r6为主控芯片,及led-green、Virtual terminal;时钟源为晶振为8M的系统内部时钟;使用USART1轮询方式实现对指示灯的控制;

  • 环境

操作系统: Window10 专业版
使用软件:Keil uVision5、Proteus 8
开发语言:C语言

  • 电路设计
    在这里插入图片描述
  • 软件设计
/***   新添加的头文件    ***/
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"    //基本输入输出头文件
#include "string.h"   //strcmp函数的头文件
/* USER CODE END Includes */
/***   定义GPIO    ***/
#define LED_Pin GPIO_PIN_0
#define LED_GPIO_Port GPIOB
/***   GPIO初始化    ***/
void MX_GPIO_Init(void)
{ 
 GPIO_InitTypeDef GPIO_InitStruct = {0};
 /* GPIO Ports Clock Enable */
 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 /*Configure GPIO pin Output Level */
 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); 
 /*Configure GPIO pin : PA0 */
 GPIO_InitStruct.Pin = GPIO_PIN_0; 
 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; 
 GPIO_InitStruct.Pull = GPIO_PULLUP;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  
  /*Configure GPIO pin : PtPin */ 
 GPIO_InitStruct.Pin = LED_Pin; 
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 
 GPIO_InitStruct.Pull = GPIO_NOPULL; 
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 AL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);  
  /* EXTI interrupt init*/
 HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
 HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
/***   USART1初始化    ***/
void MX_USART1_UART_Init(void)
{
  huart1.Instance = USART1;  
  huart1.Init.BaudRate = 115200;  
  huart1.Init.WordLength = UART_WORDLENGTH_8B;  
  huart1.Init.StopBits = UART_STOPBITS_1;  
  huart1.Init.Parity = UART_PARITY_NONE;  
  huart1.Init.Mode = UART_MODE_TX_RX;  
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;  
  huart1.Init.OverSampling =UART_OVERSAMPLING_16;  
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
     Error_Handler();
  }
}
/***   主函数    ***/
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 */  
  SystemClock_Config();   
  /* USER CODE BEGIN SysInit */   
  /* USER CODE END SysInit */   
  /* Initialize all configured peripherals */  
  MX_GPIO_Init();  
  MX_USART1_UART_Init();   
  /* USER CODE BEGIN 2 */	
  const char ch[]="";  
  /* USER CODE END 2 */   
  /* Infinite loop */  
  /* USER CODE BEGIN WHILE */  
  while (1) 
   {    
     /* USER CODE END WHILE */   
     /* USER CODE BEGIN 3 */	  	  
     if(HAL_UART_Receive(&huart1,  (uint8_t*)ch, 1, 0xFFFF)==HAL_OK)	
     {		
        if(!strcmp(ch,"o"))	
 	{			  
 	   HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);	
 	}	
        if(!strcmp(ch,"c"))	
        {
	   HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);		
        }  
     }  
   } 
  /* USER CODE END 3 */
 }
  • 仿真效果

键盘输入o时指示灯亮
****
键盘输入c时指示灯灭
在这里插入图片描述

猜你喜欢

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