使用STM32(HAL库)实现串行通信控制继电器

最近在学STM32 分享一下在学习过程的一个小制作

模块:

芯片型号:STM32F103C8T6 

继电器模块:

USB转TTL串口工具:

 

软件工具 :

编程软件:CUBEIDE(因为我这边还没有搞移植keil5就一直用这个了)

操作:

先启动我们的cubeide,选择NEW 再选择STM32 project

然后我们进行芯片选型,在上方输入框中输入我们使用的芯片,我这边使用的STM32F103C8T6

选择好我们的芯片型号我们给它取个名字

取好名字之后我们来到芯片界面

我们先进行时钟信号的设定,将RCC选到我们的外部时钟系统就会自动选择好我们的外部时钟引脚

SYS配置如下

这时候来到时钟界面将时钟频率调到72MHZ全速运行

现在我们进行输出引脚的设置,我们将PC13作为继电器输出引脚,因为继电器是高电平驱动所以我们将PC13引脚设置为低电平输出。

现在进行串行通信的设置,下方第一个参数为波特率我们自行修改。

这样我们的芯片配置就做好了 按下CTRL+s保存进入代码编辑界面

代码:
#include "main.h"
#include "string.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
uint8_t Receive_data[3];
uint8_t Returns_data[10]="relay1_RUN";
uint8_t Returns_data1[10]="relayl_OFF";
uint8_t Compare_data1[3]="RNR";
uint8_t Compare_data2[3]="OFF";

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart1;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
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 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

	 HAL_UART_Receive(&huart1, Receive_data, 3, 100);
	 if(strcmp((char*)Receive_data,(char*)Compare_data1)==0)
	 {
		 HAL_UART_Transmit(&huart1, Returns_data, 10, 100);
		 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
		 Receive_data[0]='0';
	 }

	 if(strcmp((char*)Receive_data,(char*)Compare_data2)==0)
	 	 {
	 		 HAL_UART_Transmit(&huart1, Returns_data1, 10, 100);
	 		 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
	 		Receive_data[0]='0';
	 	 }
  }
  /* USER CODE END 3 */
}
具体现象:

我们先进行线路连接:

使用USB转TTL串口工具与单片机进行连接:

继电器的连接就是正极接入5v 负极接地,信号线接入PC13进行控制。

现在我们插入电脑开始通信,启动我们的串口调试助手,波特率选择115200;编码格式选择UTF-8

发送”RNR“单片机返回relay1_RUN:

继电器吸合:

发送”OFF“单片机返回relayl_OFF,继电器断开:

这样基于HAL库的STM32的串行通信控制继电器就做好了,因为是第一次发博客,很多地方都没有注意到,希望各位大佬们多多包涵谢谢大家,如果有兴趣可以一起交流。(^ω^) 

作者:ASH_HH

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32(HAL库)实现串行通信控制继电器

发表评论