当前位置: 首页 > news >正文

网站对公司的意义西安借贷购物网站建设

网站对公司的意义,西安借贷购物网站建设,做海淘网站赚钱吗,足球最新世界排名表1.通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作 例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led2灯熄灭 5.例如在串口输入led…

1.通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作
例如在串口输入led1on,开饭led1灯点亮

2.例如在串口输入led1off,开饭led1灯熄灭

3.例如在串口输入led2on,开饭led2灯点亮

4.例如在串口输入led2off,开饭led2灯熄灭

5.例如在串口输入led3on,开饭led3灯点亮

6.例如在串口输入led3off,开饭led3灯熄灭

2.编程要求:

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)结构体数组

方式1:cmd_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,...........)

}

led.h

#ifndef __TEST_H__
#define __TEST_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"#define GPIO_PIN_8 8
#define GPIO_PIN_9 9
#define GPIO_PIN_10 10//GPIO章节初始化
void GPIO_INIT();//UART章节初始化
void UART_INIT();//RCC章节初始化
void RCC_INIT();//发送一个字符
void put_char(const char str);//发送一个字符串
void put_string(const char* str);//接收一个字符
char get_char();//接收一个字符串
char* get_string();//字符串比较函数
int my_strcmp(char *a,char *b);//封装灯泡亮灭枚举
typedef enum 
{reset_t,set_t,
}status_t;//结构体封装
typedef struct{char* cmd_arr; gpio_t* gpiox;unsigned int pin; status_t status;   void(*gpio_write_pin)(gpio_t* gpiox,unsigned int pin,status_t status);  
}cmd_t;
cmd_t* find_command(char* str);//重写函数
void hall_gpio_write(gpio_t* gpiox,unsigned int pin,status_t state);
#endif

led.c

#include "test.h"//GPIO章节初始化                                                                
void GPIO_INIT()
{//设置3个灯的模式GPIOE->MODER&=(~(0x3<<20));GPIOE->MODER|=(0x1<<20);GPIOF->MODER&=(~(0x3<<20));GPIOF->MODER|=(0x1<<20);GPIOE->MODER&=(~(0x3<<16));GPIOE->MODER|=(0x1<<16);//设置推挽输出GPIOE->OTYPER&=(~(0x1<<10));GPIOF->OTYPER&=(~(0x1<<10));GPIOE->OTYPER&=(~(0x1<<8));//设置低速GPIOE->OSPEEDR&=(~(0x3<<20));GPIOF->OSPEEDR&=(~(0x3<<20));GPIOE->OSPEEDR&=(~(0x3<<16));//不需要上拉GPIOE->PUPDR&=(~(0x3<<20));GPIOF->PUPDR&=(~(0x3<<20));GPIOE->PUPDR&=(~(0x3<<16));/**********************************///设置GPIOB引脚输出为复用模式GPIOB->MODER&=(~(0x3<<4));GPIOB->MODER|=(0x2<<4);//设置GPIOG引脚输出模式GPIOG->MODER&=(~(0x3<<22));GPIOG->MODER|=(0x2<<22);//设置GPIOB功能复用模式GPIOB->AFRL&=(~(0x15<<8));GPIOB->AFRL|=(0x8<<8);//设置GPIOG功能复用模式GPIOG->AFRH&=(~(0x6<<12));GPIOG->AFRH|=(0x6<<12);}//UART章节初始化                                                                
void UART_INIT()
{//设置宽度USART4->CR1&=(~(0x1<<12));USART4->CR1&=(~(0x1<<28));USART4->CR1&=(~(0x1<<15));USART4->CR1&=(~(0x1<<10));USART4->CR1|=(0x1<<3);USART4->CR1|=(0x1<<2);USART4->CR1|=(0x1);USART4->CR2&=(~(0x3<<12));	//3.设置一级分配USART4->PRESC&=(~(0x15));//4.USART_BRR:设置串口波特率USART4->BRR=0x22B;}//RCC章节初始化                                                                 
void RCC_INIT()
{//对GPIOE和GPIOG使能RCC->MP_AHB4ENSETR|=(0x3<<4);       //对GPIOB使能RCC->MP_AHB4ENSETR|=(0x1<<1);//对GPIOG使能RCC->MP_AHB4ENSETR|=(0x1<<6);//对UART4使能RCC->MP_APB1ENSETR|=(0x1<<16);}//发送一个字符                                                                  
void put_char(const char str)
{while(!(USART4->ISR & (0x1 << 7)));                        //2.将要发送的字符,写到发送数据寄存器中                   USART4->TDR = str;                                         //3.判断发送数据是否完成 ISR[6]                            while(!(USART4->ISR & (0x1<<6)));}//发送一个字符串                                                                
void put_string(const char* str)
{//判断是否为'\0',一个字符一个字符发送  for(int i=0;str[i]!='\0';i++){put_char(str[i]);	}put_char('\n');put_char('\r');}//接收一个字符                                                                  
char get_char()
{char ch;                                         //1.判断接收数据寄存器是否有数据可读 ISR[5]      while(!(USART4->ISR & (0x1<<5)));  //2.将接收到的数据读出来                         ch = USART4->RDR;                                return ch;    }char buf[50]={0};//接收一个字符串                                                                
char* get_string()
{//for循环int i=0;//当键盘的回车键'\r'按下之后,字符串输入完成  for(i=0;(buf[i]=get_char())!='\r';i++){put_char(buf[i]);}//字符串补'\0'                                 buf[i] = '\0';  put_char('\n');put_char('\r');return buf;}//字符串比较函数                                                                
int my_strcmp(char *a,char *b)
{while(*a || *b){if(*a!=*b){return *a-*b;}a++;b++;}return 0;}//结构体封装                                                                    
cmd_t cmd_arr[6] ={[0]={"led1on" ,GPIOE,GPIO_PIN_10,set_t,hall_gpio_write},[1]={"led1off",GPIOE,GPIO_PIN_10,reset_t,hall_gpio_write},[2]={"led2on" ,GPIOF,GPIO_PIN_10,set_t,hall_gpio_write},[3]={"led2off",GPIOF,GPIO_PIN_10,reset_t,hall_gpio_write},[4]={"led3on" ,GPIOE,GPIO_PIN_8 ,set_t,hall_gpio_write},[5]={"led3off",GPIOE,GPIO_PIN_8 ,reset_t,hall_gpio_write}
};cmd_t* find_command(char* str)
{for(int i=0; i<6; i++){if(my_strcmp(str,cmd_arr[i].cmd_arr)==0){return &cmd_arr[i];}}return 0; 		//失败返回0}//对GPIO引脚写控制灯光亮灭函数
void hall_gpio_write(gpio_t* gpiox,unsigned int pin,status_t state)
{if(state == set_t){gpiox->ODR |=(0x1<<pin);}else if(state == reset_t){gpiox->ODR &= (~(0x1<<pin)); }
}

main.c

#include "test.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++);
}
int main()
{RCC_INIT();GPIO_INIT();UART_INIT();while(1){cmd_t* cmd_arr;char *string = get_string();cmd_arr = find_command(string);if(cmd_arr == 0){put_string("error");}else{cmd_arr->gpio_write_pin(cmd_arr->gpiox,cmd_arr->pin,cmd_arr->status);}}return 0;}

测试结果

 

http://www.yayakq.cn/news/236882/

相关文章:

  • 怎么样建设自己网站百度搜索指数入口
  • 太仓住房城乡建设网站三九手机网手机响应式网站模版
  • 海口网站推广公司智能设计平台
  • 山东青岛网站建设公司建设网站 托管 费用
  • 光谷网站制作怎样上传自己做的网站
  • 合肥 定制网站开发jpress和wordpress哪个好
  • 广西建设主管部门网站重庆网站设计方案
  • 路由侠怎么做网站映射莱芜
  • 电商网站前端制作分工做网站有没有前景
  • 北京专业做网站电话长沙口碑好网站建设公司
  • 网站开发概述wordpress post提交
  • 三站一体网站公司wordpress文章保存
  • php多语言网站怎么做个人电脑可以做网站服务器
  • 教做吃的网站做新闻h5网站
  • 企石网站建设网站建设内部风险分析
  • 十大免费ae模板网站网站开发维护岗位职责
  • 佛山网站建设业务员网页设计和网站建设的课程设计
  • 男女做暖暖的网站大全高校专业建设网站
  • 校园二手网站设计论文保健品商城网站模板
  • 在哪里找个人做网站的珠宝怎么做网站
  • 微网站模板建设网站建设报价ppt模版
  • 东城网站建设南充手机网站建设
  • 查重网站开发网站开发后台框架
  • 商务网站开发与建设论文新闻有哪些网站有哪些类型
  • 国外创意海报设计网站建设银行假网站首页
  • 彩票资料网站怎么做微九州合作网站
  • 网站2019建设目标WordPress手机文章缩略图
  • 北京高端网站建设费用一个做flash的网站
  • 学习建网站玩网站建设学习自学网站建设需要什么学历
  • 太原网站公司网站开发安卓开发