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

好公司网站建设价格低最新免费网站收录提交入口

好公司网站建设价格低,最新免费网站收录提交入口,免费网站创建,根据百度地图做网站1.通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作 1>例如在串口输入led1on,开饭led1灯点亮 2>例如在串口输入led1off,开饭led1灯熄灭 3>例如在串口输入led2on,开饭led2灯点亮 4>例如在串口输入led2off,开饭led2灯熄灭 5>例如…

1.通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作

1>例如在串口输入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); //处理LED状态的函数指针

}cmd_t;

头文件:

#ifndef __NEW_H__
#define __NEW_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
//led初始化
void led_init();
void led1_init();
void led2_init();
void led3_init();//uart初始化
void uart4_init();
//接收一个字符
char get_char();
//接收一串字符
char *get_string();
//发送一个字符
void put_char(const char ch);
//发送一个字符串
void put_string(const char *sr);typedef enum{GPIO_RESET_T,GPIO_SET_T,
}status_t;#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 15typedef struct{char* cmd;//命令gpio_t* gpiox;//组号unsigned int pin;//引脚status_t status;//灯的状态void(*gpio_write_pin)(gpio_t* gpiox,unsigned int pin,status_t status);//设置灯的状态
}cmd_t;/*
//灯亮
void led_on(int i);
//灯灭
void led_off(int i);
*/void hal_gpio_write(gpio_t* gpiox,unsigned int pin,status_t status);
cmd_t* find_command(char *string);
//比较字符串
int strcmp(char *arr,const char *src);#endif

源文件:

#include "new.h"
extern void printf(const char *fmt,...);
extern void delay_ms(int ms);
cmd_t cmd_arr[6] = {[0] = {.cmd = "led1on",.gpiox = GPIOE,.pin = GPIO_PIN_10,.status = GPIO_SET_T,.gpio_write_pin = hal_gpio_write,},[1] = {.cmd = "led1off",.gpiox = GPIOE,.pin = GPIO_PIN_10,.status = GPIO_RESET_T,.gpio_write_pin = hal_gpio_write,},[2] = {.cmd = "led2on",.gpiox = GPIOF,.pin = GPIO_PIN_10,.status = GPIO_SET_T,.gpio_write_pin = hal_gpio_write,},[3] = {.cmd = "led2off",.gpiox = GPIOF,.pin = GPIO_PIN_10,.status = GPIO_RESET_T,.gpio_write_pin = hal_gpio_write,},[4] = {.cmd = "led3on",.gpiox = GPIOE,.pin = GPIO_PIN_8,.status = GPIO_SET_T,.gpio_write_pin = hal_gpio_write,},[5] = {.cmd = "led3off",.gpiox = GPIOE,.pin = GPIO_PIN_8,.status = GPIO_RESET_T,.gpio_write_pin = hal_gpio_write,}
};
//led初始化
void led_init()
{/********RCC章节*********/RCC->MP_AHB4ENSETR |= (0x1 << 4);//GPIOE使能   RCC->MP_AHB4ENSETR |= (0x1 << 5);//GPIOF使能led1_init();led2_init();led3_init();
}void led1_init()
{/********GPIO章节********/GPIOE->MODER &= (~(0x3 << 20));GPIOE->MODER |= (0x1 << 20);//输出模式GPIOE->OTYPER &= (~(0x1 << 10));//推挽GPIOE->OSPEEDR &= (~(0x3 << 20));//低速GPIOE->PUPDR &= (~(0x3 << 20));//无上下拉
}void led2_init()
{/********GPIO章节********/GPIOF->MODER &= (~(0x3 << 20));GPIOF->MODER |= (0x1 << 20);//输出模式GPIOF->OTYPER &= (~(0x1 << 10));//推挽GPIOF->OSPEEDR &= (~(0x3 << 20));//低速GPIOF->PUPDR &= (~(0x3 << 20));//无上下拉
}void led3_init()
{/********GPIO章节********/GPIOE->MODER &= (~(0x3 << 16));GPIOE->MODER |= (0x1 << 16);//输出模式GPIOE->OTYPER &= (~(0x1 << 8));//推挽GPIOE->OSPEEDR &= (~(0x3 << 16));//低速GPIOE->PUPDR &= (~(0x3 << 16));//无上下拉
}//uart初始化
void uart4_init()
{/********RCC章节*********/RCC->MP_AHB4ENSETR |= (0x1 << 1);//GPIOB使能RCC->MP_AHB4ENSETR |= (0x1 << 6);//GPIOG使能RCC->MP_APB1ENSETR |= (0x1 << 16);//UART4使能/********GPIO章节********/GPIOB->MODER &= (~(0x3 << 4));GPIOB->MODER |= (0x2 << 4);//复用模式GPIOG->MODER &= (~(0x3 << 22));GPIOG->MODER |= (0x2 << 22);//复用模式GPIOB->AFRL &= (~(0xf << 8));GPIOB->AFRL |= (0x8 << 8);//设置复用功能RXGPIOG->AFRH &= (~(0xf << 12));GPIOG->AFRH |= (0x6 << 12);//设置复用功能TX/********uart4章节*******/if(USART4->CR1 & (0x1)){delay_ms(500);USART4->CR1 &= (~(0x1));//禁止UE}USART4->CR1 &= (~(0x1 << 12));USART4->CR1 &= (~(0x1 << 28));//设置8位数据位USART4->CR1 &= (~(0x1 << 10));//无奇偶校验位USART4->CR1 &= (~(0x1 << 15));//x16采样率USART4->CR2 &= (~(0x3 << 12));//无停止位USART4->PRESC &= (~(0xf));//一级分配USART4->BRR = 0x22B;//115200USART4->CR1 |= (0x1 << 2);//读端使能USART4->CR1 |= (0x1 << 3);//写端使能USART4->CR1 |= 0x1;//UE使能}
//接收一个字符
char get_char()
{char ch;//检查接收寄存器是否有数据可读while(!(USART4->ISR & (0x1 << 5)));//接收字符ch = USART4->RDR;put_char(ch);return ch;
}
//接收一串字符
char buf[50] = "";
char *get_string()
{int i;for(i = 0;(buf[i] = get_char()) != '\r';i++);buf[i] = '\0';put_char('\n');put_char('\r');put_string(buf);return buf;
}
//发送一个字符
void put_char(const char ch)
{while(!(USART4->ISR & (0x1 << 7)));USART4->TDR = ch;while(!(USART4->ISR & (0x1 << 6)));
}
//发送一个字符串
void put_string(const char *sr)
{for(int i=0;sr[i] != '\0';i++){put_char(sr[i]);}put_char('\n');put_char('\r');
}
/*
//灯亮
void led_on(int i)
{switch(i){case 1:GPIOE->ODR |= (0x1 << 10);//led1亮break;case 2:GPIOF->ODR |= (0x1 << 10);//led2亮break;case 3:GPIOE->ODR |= (0x1 << 8);//led3亮break;}
}//灯灭
void led_off(int i)
{switch(i){case 1:GPIOE->ODR &= (~(0x1 << 10));//led1灭break;case 2:GPIOF->ODR &= (~(0x1 << 10));//led2灭break;case 3:GPIOE->ODR &= (~(0x1 << 8));//led3灭break;}
}*/
//比较字符串
int strcmp(char *arr,const char *src)
{while(*arr != '\0' || *src != '\0'){if(*arr == *src){arr++;src++;}else{return (*arr - *src);}}return 0;
}void hal_gpio_write(gpio_t* gpiox,unsigned int pin,status_t status)
{if(1 == status) gpiox->ODR |= (0x1 << pin);elsegpiox->ODR &= (~(0x1 << pin));
}cmd_t* find_command(char *string)
{for(int i=0;i < 6;i++){if(strcmp(cmd_arr[i].cmd,string) == 0){return &cmd_arr[i];}}return 0;
}

Main文件:

#include "new.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()
{led_init();uart4_init();put_string("start....");while(1){char *string = get_string();cmd_t *arr = find_command(string);if(0 == arr){printf("error commond\n");}else{arr->gpio_write_pin(arr->gpiox,arr->pin,arr->status);}        }return 0;
}

实现效果:

http://www.yidumall.com/news/6958.html

相关文章:

  • 字体安装 wordpress优化王
  • 安徽省建设工程造价管理网站宁波微信推广平台哪个好
  • 南京各区房价一览表seo是什么部门
  • 资源网站快速优化排名关键词规划师
  • 做什麽网站有前景拉新推广平台
  • 邯郸网站建设服务seo sem什么意思
  • 免费的网站开发软件成人职业技能培训学校
  • 上下滚屏网站模板南宁百度seo软件
  • 怎样为公司做网站网络营销公司怎么注册
  • 莱芜最新莱芜话题广丰网站seo
  • 怎么弄网站常州网站推广排名
  • 整站建设和网站优化怎么创建私人网站
  • 网站建设sem怎么做如何提交百度收录
  • 网站定制开发需要什么资质吸引人的营销标题
  • 网站可以用什么做阳江网站建设
  • 网站怎么做收费微博推广平台
  • 北京做网站的公司有哪些免费海报模板网站
  • 中国最大的网站适合奖励自己的网站免费
  • 黄金网软件app大全下载宁波网站建设优化企业
  • 网站建站流程图在哪里找专业推广团队
  • 论坛类网站可以做移动端吗口碑营销是什么意思
  • 数据机房建设公司百色seo外包
  • fr后缀网站网络推广策划
  • 动态网站开发所需要的web构件哪里可以学网络运营和推广
  • 个人业务网站建设济南搜索引擎优化网站
  • akcms做的网站新闻头条新闻
  • 安康网站建设公司电话用网站模板建站
  • 哈尔滨做网站链接购买平台
  • 建站程序员招聘网络培训心得体会
  • 手机免费自建网站长沙sem培训