22081-12-17 串口输入控制灯的亮灭

1、实验要求:串口输入对应的命令,通过对应的命令,控制硬件工作

例子: 在串口工具输入led1on -------->硬件LED1点亮

在串口工具输入led1off -------->硬件LED1熄灭

在串口工具输入led2on -------->硬件LED2点亮

在串口工具输入led2off -------->硬件LED2熄灭

在串口工具输入led3on -------->硬件LED3点亮

在串口工具输入led3off -------->硬件LED3熄灭

//.h文件
#ifndef __GPIO_H__
#define __GPIO_H__

#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"
#define GPIO_PIN_0 0
#define GPIO_PIN_1 1
#define GPIO_PIN_2 2
#define GPIO_PIN_3 3
#define GPIO_PIN_4 4
#define GPIO_PIN_5 5
#define GPIO_PIN_6 6
#define GPIO_PIN_7 7
#define GPIO_PIN_8 8
#define GPIO_PIN_9 9
#define GPIO_PIN_10 10
#define GPIO_PIN_11 11
#define GPIO_PIN_12 12
#define GPIO_PIN_13 13
#define GPIO_PIN_14 14
#define GPIO_PIN_15 15

//enum封装引脚状态
typedef enum
{
	GPIO_RESET,
	GPIO_SET,
}status_t;

typedef struct
{
	char* cmd_arr;
	gpio_t* gpio;
	unsigned int pin;
	status_t status;
	void (*gpio_write_p)(gpio_t* gpio,unsigned int pin,status_t status);	
}cmd_t;
//GPIO初始化函数
void hal_gpio_init(gpio_t *gpiox,unsigned int pin);

//LED的点亮熄灭
void hal_gpio_write(gpio_t *gpiox,unsigned int pin,status_t status);

//UART4串口初始化
void hal_uart_init(void);
//发送一个字符
void hal_put_char(const char str);
//发送一个字符串
void hal_put_string(const char* string);
//接收一个字符
char get_char(void);
//接收一个字符串
char* get_string(void);
//比较函数
int strcmp(char* dest,char* src);
//输入命令与字符串比较
cmd_t* find_command(char* str);
#endif
//功能函数(部分)
#include "gpio.h"
extern void delay_ms(int ms);
extern cmd_t cmd[];
int strcmp(char* dest,char* src)
{
	while((*dest!='\0')&&(*src!='\0')&&(*dest==*src))
	{
		dest++;
		src++;
	}
	return *dest-*src;
}
cmd_t* find_command(char* str)
{
	int i;
	for(i=0;i<6;i++)
	{
		if(!(strcmp(str,cmd[i].cmd_arr)))
		{
			return &cmd[i];
		}
	}
	if(i==6)
	{
		hal_put_string("no found");
	}
	return 0;
}
//主函数
#include "gpio.h"

extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}

cmd_t cmd[6]={
	[0]={
		.cmd_arr="led1on",
		.gpio=GPIOE,
		.pin=GPIO_PIN_10,
		.status=GPIO_SET,
		.gpio_write_p=hal_gpio_write,
	},
	[1]={
		.cmd_arr="led1off",
		.gpio=GPIOE,
		.pin=GPIO_PIN_10,
		.status=GPIO_RESET,
		.gpio_write_p=hal_gpio_write,
	},
	[2]={
		.cmd_arr="led2on",
		.gpio=GPIOF,
		.pin=GPIO_PIN_10,
		.status=GPIO_SET,
		.gpio_write_p=hal_gpio_write,
	},
	[3]={
		.cmd_arr="led2off",
		.gpio=GPIOF,
		.pin=GPIO_PIN_10,
		.status=GPIO_RESET,
		.gpio_write_p=hal_gpio_write,
	},
	[4]={
		.cmd_arr="led3on",
		.gpio=GPIOE,
		.pin=GPIO_PIN_8,
		.status=GPIO_SET,
		.gpio_write_p=hal_gpio_write,
	},
	[5]={
		.cmd_arr="led3off",
		.gpio=GPIOE,
		.pin=GPIO_PIN_8,
		.status=GPIO_RESET,
		.gpio_write_p=hal_gpio_write,
	},
};
int main()
{
	hal_gpio_init(GPIOE,GPIO_PIN_10);
	hal_gpio_init(GPIOF,GPIO_PIN_10);
	hal_gpio_init(GPIOE,GPIO_PIN_8);
	hal_uart_init();
	while(1)
	{
		cmd_t* p=find_command(get_string());
		if(p)
		{
			p->gpio_write_p(p->gpio,p->pin,p->status);
		}
	}
	return 0;
}

//现象

猜你喜欢

转载自blog.csdn.net/wyl2333/article/details/128351760