使用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