实验要求:串口输入对应的命令,通过对应的命令,控制硬件工作
#ifndef __TASK_H__
#define __TASK_H__
#include "gpio.h"
#include "usart4.h"
typedef struct{
char *cmd_arr;
gpio_t *gpiox;
unsigned int pin;
gpio_status_t status;
void (*hal_gpio_write)(gpio_t* gpiox,unsigned int pin,gpio_status_t status);
}cmd_t;
cmd_t *find_command(const char* str);
int strcmp(char *str1,const char *str2);
#endif
#include "task.h"
cmd_t cmd[6] = {
{"led1on",GPIOE,GPIO_PIN_10,GPIO_SET,hal_gpio_write},
{"led1off",GPIOE,GPIO_PIN_10,GPIO_RESET,hal_gpio_write},
{"led2on",GPIOF,GPIO_PIN_10,GPIO_SET,hal_gpio_write},
{"led2off",GPIOF,GPIO_PIN_10,GPIO_RESET,hal_gpio_write},
{"led3on",GPIOE,GPIO_PIN_8,GPIO_SET,hal_gpio_write},
{"led3off",GPIOE,GPIO_PIN_8,GPIO_RESET,hal_gpio_write}
};
cmd_t *find_command(const char* str)
{
for(int i=0;i<6;i++)
{
if(! strcmp(cmd[i].cmd_arr,str))
{
return &cmd[i];
}
}
return 0;
}
int strcmp(char *str1,const char *str2)
{
while(*str1 != '\0' && *str2 != '\0')
{
if(*str1 == *str2)
{
str1++;
str2++;
}
else
{
return *str1 - *str2;
}
}
return 0;
}
#include "task.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++);
}
void led_init()
{
//RCC寄存器进行初始化
RCC_AHB4_ENSETR |= (0x3 << 4);
//GPIO结构体初始化
gpio_init_t init = {Output,Pp,Low,NO_pupd};
//对PE10引脚初始化
hal_gpio_init(GPIOE,&init,GPIO_PIN_10);
//对PF10引脚初始化
hal_gpio_init(GPIOF,&init,GPIO_PIN_10);
//对PE8引脚初始化
hal_gpio_init(GPIOE,&init,GPIO_PIN_8);
}
int main()
{
char *str;
cmd_t *p;
led_init();
hal_uart_init();
while(1)
{
str = get_string();
p = find_command(str);
if(p != 0)
p->hal_gpio_write(p->gpiox,p->pin,p->status);
}
return 0;
}