大邑县建设银行网站,最好看免费观看高清视频了,建设工程施工合同司法解释2022,3个典型网站建设公司题目#xff1a;通过操作Cortex-A7核#xff0c;串口输入相应的命令#xff0c;控制LED灯进行工作---上传CSDN 1.例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led…题目通过操作Cortex-A7核串口输入相应的命令控制LED灯进行工作---上传CSDN 1.例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led2灯熄灭 5.例如在串口输入led3on,开饭led3灯点亮 6.例如在串口输入led3off,开饭led3灯熄灭编程要求 1结构体封装 typedef struct{ char* cmd_arr; //命令行字符串 gpio_t* gpiox;//GPIO组号 unsigned int pin; //引脚编号 status_t status; //LED灯状态 void(*gpio_write_pin)(gpio_t* gpiox,unsigned int pin,status_t status); }cmd_t; 2结构体数组 方式1cmd_t cmd_arr[6] {{led1off,GPIOE,GPIO_PIN_10,GPIO_RESET_T},{},}; cmd_t cmd_arr[6] { [0] { .cmd_arr led1off, .gpiox GPIOE, .pin GPIO_PIN_10, .status GPIO_RESET_T, .gpio_write_pin hal_gpio_write, }, [1] {}, [2] {}, }; 3在串口输入一个字符串 1在串口输入一个字符串需要定义一个变量接收串口接收到的字符串 char* string uart_get_string(); 2串口中输入的字符串与结构体中每个元素中的cmd_arr变量进行比较 3如果比较成功代表查到输入的字符串 思考函数实现如何编写cmd_t* find_command(const char* str) { //串口中输入的字符串与结构体中每个元素中的cmd_arr变量进行比较 //遍历比较自己编写strcmp比较的函数 return 0;//失败返回0 } 4思考main.c函数编写 cmd_t* cmd_arr; char* string uart_get_string(); cmd_arr find_command(string); if(cmd_arr 0){ 查找失败 }else { cmd_arr-gpio_write_pin(cmd_arr-gpiox,...........)}代码mix.h#ifndef __MIX_H__
#define __MIX_H__ #include stm32mp1xx_rcc.h
#include stm32mp1xx_gpio.h
#include stm32mp1xx_uart.h
#include gpio.h
typedef struct
{ char* cmd_arr; gpio_t* gpiox; unsigned int pin; gpio_status_t status; void(*gpio_write_pin)(gpio_t* gpiox,unsigned int pin,gpio_status_t status);
}cmd_t;
void hal_mix_rcc();
void hal_mix_gpio();
void hal_mix_uart();
void func();
void hal_gpio_write(gpio_t* gpiox,unsigned int pin,gpio_status_t status);
cmd_t* find_command(const char* str);
char *get_string();
#endif mix.c#include mix.hextern void delay_ms(int ms);
cmd_t cmd_arr[6]
{[0]{.cmd_arrled1on,.gpioxGPIOE,.pinGPIO_PIN_10,.statusGPIO_SET_T,.gpio_write_pinhal_gpio_write,},[1]{.cmd_arrled1off,.gpioxGPIOE,.pinGPIO_PIN_10,.statusGPIO_RESET_T,.gpio_write_pinhal_gpio_write,},[2]{.cmd_arrled2on,.gpioxGPIOF,.pinGPIO_PIN_10,.statusGPIO_SET_T,.gpio_write_pinhal_gpio_write,},[3]{.cmd_arrled2off,.gpioxGPIOF,.pinGPIO_PIN_10,.statusGPIO_RESET_T,.gpio_write_pinhal_gpio_write,},[4]{.cmd_arrled3on,.gpioxGPIOE,.pinGPIO_PIN_8,.statusGPIO_SET_T,.gpio_write_pinhal_gpio_write,},[5]{.cmd_arrled3off,.gpioxGPIOE,.pinGPIO_PIN_8,.statusGPIO_RESET_T,.gpio_write_pinhal_gpio_write,}
};void hal_mix_rcc()
{RCC-MP_AHB4ENSETR|(0x11);RCC-MP_AHB4ENSETR|(0x14);RCC-MP_AHB4ENSETR|(0x15);RCC-MP_AHB4ENSETR|(0x16);RCC-MP_APB1LPENSETR|(0x116);
}
void hal_mix_gpio()
{GPIOB-MODER(~(0x34));GPIOB-MODER|(0x24);GPIOG-MODER(~(0x322));GPIOG-MODER|(0x222);GPIOB-AFRL(~(0xf8));GPIOB-AFRL|(0x88);GPIOG-AFRH(~(0xf12));GPIOG-AFRH|(0x612);GPIOE-MODER(~(0x320));GPIOE-MODER|(0x120);GPIOF-MODER(~(0x320));GPIOF-MODER|(0x120);GPIOE-MODER(~(0x316));GPIOE-MODER|(0x116);GPIOE-OTYPER(~(0x110));GPIOF-OTYPER(~(0x110));GPIOE-OTYPER(~(0x18));GPIOE-OSPEEDR(~(0x320));GPIOF-OSPEEDR(~(0x320));GPIOE-OSPEEDR(~(0x316));GPIOE-PUPDR(~(0x320));GPIOF-PUPDR(~(0x320));GPIOE-PUPDR(~(0x316));
}
void hal_led_on(int num)
{switch(num){case 1:GPIOE-ODR|(0x110);break;case 2:GPIOF-ODR|(0x110);break;case 3:GPIOE-ODR|(0x18);break;}
}
void hal_led_off(int num)
{switch(num) { case 1: GPIOE-ODR(~(0x110));break; case 2: GPIOF-ODR(~(0x110));break; case 3: GPIOE-ODR(~(0x18)); break; }
}
void hal_mix_uart()
{delay_ms(20);USART4-CR1(~(0x10));USART4-CR1(~(0x128));USART4-CR1(~(0x112));USART4-CR1(~(0x115));USART4-CR1(~(0x110));USART4-CR2(~(0x312));USART4-PRESC(~(0xf0));USART4-BRR0x22B;USART4-CR1|(0x13);USART4-CR1|(0x12);USART4-CR1|(0x10);
}
void put_char(const char ch)
{while(!(USART4-ISR(0x17)));USART4-TDRch;while(!(USART4-ISR(0x16)));
}
void put_string(const char *string)
{int i0;char ch;while(1){chstring[i];put_char(ch);if(ch\0){break;}i;}
}
char get_char()
{char ch;while(!(USART4-ISR(0x15)));chUSART4-RDR; return ch;
}
char buffer[20];
char *get_string()
{for(int i0;i19;i){buffer[i]get_char();put_char(buffer[i]);if(buffer[i]\r){put_char(\n);buffer[i]\0;break;}}return buffer;
}
int my_strcmp(const char *a,char *b)
{int i0;int j0;while(*(ai)!\0*(bj)!\0*(ai)*(bj)){i;j;}return *(ai)-*(bj);
}
void buffer_clear()
{for(int i0;i20;i){buffer[i]0;}
}
void func()
{get_string();if(my_strcmp(buffer,led1on)0){hal_led_on(1);}else if(my_strcmp(buffer,led1off)0){hal_led_off(1);}else if(my_strcmp(buffer,led2on)0){hal_led_on(2);}else if(my_strcmp(buffer,led2off)0){hal_led_off(2);}else if(my_strcmp(buffer,led3on)0){hal_led_on(3);}else if(my_strcmp(buffer,led3off)0){hal_led_off(3);}
}
void hal_gpio_write(gpio_t* gpiox,unsigned int pin,gpio_status_t status)
{if(statusGPIO_SET_T){gpiox-ODR|(0x1pin);}else{gpiox-ODR(~(0x1pin));}
}
cmd_t* find_command(const char* str)
{//串口中输入的字符串与结构体中每个元素中的cmd_arr变量进行比较//遍历比较自己编写strcmp比较的函数 for(int i0;i6;i){if(my_strcmp(str,cmd_arr[i].cmd_arr)0){return cmd_arr[i];}}return 0;//失败返回0
}
main.c #include mix.hextern 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);}int main(){hal_mix_rcc(); hal_mix_gpio(); hal_mix_uart(); cmd_t* cmd_arr1;while(1){char* string get_string();cmd_arr1 find_command(string);if(cmd_arr1 0){ printf(find warning\n); }else{cmd_arr1-gpio_write_pin(cmd_arr1-gpiox,\cmd_arr1-pin,\cmd_arr1-status); }}return 0;}运行结果