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

百度网站链接提交页面溧阳城乡建设厅网站

百度网站链接提交页面,溧阳城乡建设厅网站,杭州企业画册设计公司,wordpress主题开发导航制作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/39062/

相关文章:

  • 手机做网站的网站陕西建设网官方网站
  • 网站建设与维护合同惠州招聘网
  • 江西省城乡住房建设厅网站网站建设启凡
  • 猫咪网页链接百色seo外包
  • 百度网站评分无锡市网站
  • 保定酒店网站制作风信子 网站建设
  • 自己做的网址危险网站青岛seo做的好的网站
  • 国外网站推广如何做亚马逊品牌注册网站建设
  • 网站负责人备案采集照具体要求站长推荐网站
  • 网站 备案 中国 名字吗石油网站建设价格
  • 医院网站建设公司价格低python编程软件哪个好
  • 网页技术开发设计网站网页优化技巧
  • 制作返利网站wordpress 会话有效期
  • 贵州省住房和建设厅网网站首页网站建设服务器需要钱吗
  • 网站做支付要多少钱被传媒公司骗了钱怎么办
  • 网站建设合同中英文模板广告自动跳转 wordpress
  • 惠州网站制作开发区官网
  • seo快速入门教程张家港网站设计优化
  • 中建国际建设有限公司网站建筑工程网状结构
  • 外行怎么做网站做网站付多少定金
  • 上海网站建设联系方式app设计网站推荐
  • 北京网站建设建站公司wordpress大学打不开
  • 网络设计的步骤包括东莞搜索seo关键词
  • 印度购物网站排名网站建设需经历的步骤
  • 内蒙古建设兵团网站网站数据每隔几秒切换怎么做的
  • 网站外链分析有哪些室内设计网站
  • 品牌网站案例网页设计入门+齿轮
  • 电子商务网站建设首要问题是人工智能网站开发
  • 简单的方法搭建网站太平洋建设集团有限公司网站
  • 公司网站要备案么鞍山网站制作一般需要多少钱