2月23号作业

news2024/12/26 11:21:33

题目:

题目一:通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作--->上传CSDN

1.例如在串口输入led1on,开饭led1灯点亮

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

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

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

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

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

题目二:检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话--->上传CSDN

例如:

当按键1按下之后,让LED1状态取反,并打印“LED1 down”

当按键2按下之后,让LED2状态取反,并打印“LED2 down”

当按键3按下之后,让LED3状态取反,并打印“LED3 down”

火焰传感器/人体红外/光电开关实验要求如上

代码:

代码一:

mix.h

#ifndef __MIX_H__            
#define __MIX_H__            
                             
#include "stm32mp1xx_rcc.h"  
#include "stm32mp1xx_gpio.h" 
#include "stm32mp1xx_uart.h" 
                             
void hal_mix_rcc();          
void hal_mix_gpio();         
void hal_mix_uart();         
void func();                 
                             
#endif                       

min.c

#include "mix.h"

extern void delay_ms(int ms);
void hal_mix_rcc()
{
    RCC->MP_AHB4ENSETR|=(0x1<<1);
    RCC->MP_AHB4ENSETR|=(0x1<<4);
    RCC->MP_AHB4ENSETR|=(0x1<<5);
    RCC->MP_AHB4ENSETR|=(0x1<<6);

    RCC->MP_APB1LPENSETR|=(0x1<<16);
}
void hal_mix_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);
    GPIOG->AFRH&=(~(0xf<<12));
    GPIOG->AFRH|=(0x6<<12);

    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));
}
void hal_led_on(int num)
{
    switch(num)
    {
    case 1:
        GPIOE->ODR|=(0x1<<10);
        break;
    case 2:
        GPIOF->ODR|=(0x1<<10);
        break;
    case 3:
        GPIOE->ODR|=(0x1<<8);
        break;
    }
}
void hal_led_off(int num)
{
    switch(num)                   
    {                             
    case 1:                   
        GPIOE->ODR&=(~(0x1<<10));
        break;                
    case 2:                   
        GPIOF->ODR&=(~(0x1<<10));
        break;                
    case 3:                   
        GPIOE->ODR&=(~(0x1<<8)); 
        break;                
    }                            
}
void hal_mix_uart()
{
    delay_ms(20);
    USART4->CR1&=(~(0x1<<0));

    USART4->CR1&=(~(0x1<<28));
    USART4->CR1&=(~(0x1<<12));
    USART4->CR1&=(~(0x1<<15));
    USART4->CR1&=(~(0x1<<10));

    USART4->CR2&=(~(0x3<<12));

    USART4->PRESC&=(~(0xf<<0));

    USART4->BRR=0x22B;

    USART4->CR1|=(0x1<<3);
    USART4->CR1|=(0x1<<2);
    USART4->CR1|=(0x1<<0);
}
void put_char(const char ch)
{
    while(!(USART4->ISR&(0x1<<7)));
    USART4->TDR=ch;
    while(!(USART4->ISR&(0x1<<6)));
}
void put_string(const char *string)
{
    int i=0;
    char ch;
    while(1)
    {
        ch=string[i];
        put_char(ch);
        if(ch=='\0')
        {
            break;
        }
        i++;
    }
}
char get_char()
{
    char ch;
    while(!(USART4->ISR&(0x1<<5)));
    ch=USART4->RDR;    
    return ch;
}
char buffer[20];
char *get_string()
{
    for(int i=0;i<19;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(char *a,char *b)
{
    int i=0;
    int j=0;
    while(*(a+i)!='\0'&&*(b+j)!='\0'&&*(a+i)==*(b+j))
    {
        i++;
        j++;
    }
    return *(a+i)-*(b+j);
}
void func()
{
    char temp[20]={0};
    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);
    }
}

main.c

#include "mix.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()
{
    hal_mix_rcc();                     
    hal_mix_gpio();                    
    hal_mix_uart();                    

    printf("abc");
    while(1)
    {
        func();                            
    }
    return 0;
}

代码二:

运行结果:

结果一:

结果二:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/366771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[HarekazeCTF2019]Easy Notes

知识点&#xff1a;session 反序列化&#xff0c;代码审计代码分析 flag.php 中有个 is_admin 函数的判断。 在 lib.php 中有 is_admin 函数&#xff0c;需要 session[admin] 为 true&#xff0c;或者通过文件读取的方式。 在 index.php 中的 include 并不能使用伪协议读取 …

JVM回顾与Java虚拟机的内存管理

目录 什么是JVM&#xff1f; 主流虚拟机 JVM与操作系统关系 JVM、JRE、JDK的关系 Java程序的执行过程 JVM翻译字节码有三种执行方式 Java虚拟机的内存管理 JVM整体架构图 JVM运行时内存 Java7和Java8内存结构的不同主要体现在方法区的实现 对于Java8&#xff0c;HotSp…

Hadoop MapReduce基本概念与详细流程

Hadoop MapReduce是Hadoop 中一个批量计算的框架&#xff0c;在整个mapreduce作业的过程中&#xff0c;包括从数据的输入&#xff0c;数据的处理&#xff0c;数据的数据输入这些部分&#xff0c;而其中数据的处理部分就要map&#xff0c;reduce&#xff0c;combiner等操作组成。…

刚接手的APP项目需要优化,需要从哪些方向入手?

对于每个Android 开发团队来说产品上线&#xff0c;是让人喜忧参半的一件事。**喜指的是&#xff1a;付出了大量的时间&#xff0c;产品终于上线了&#xff1b;而忧指的是&#xff1a;担心中间会不会出现一些性能相关的问题&#xff0c;比如卡顿、内存泄漏、崩溃……等&#xf…

干翻 nio ,王炸 io_uring 来了 !!(图解+史上最全)

大趋势&#xff1a;全链路异步化&#xff0c;性能提升10倍 随着业务的发展&#xff0c;微服务应用的流量越来越大&#xff0c;使用到的资源也越来越多。 在微服务架构下&#xff0c;大量的应用都是 SpringCloud 分布式架构&#xff0c;这种架构总体上是全链路同步模式。 全链…

java 抽象类 详解

目录 一、抽象类概述&#xff1a; 二、抽象方法 : 1.概述 : 2.应用 : 3.特点 : 三、抽象类特点 : 1.关于abstract关键字 : 2.抽象类不能被实例化&#xff0c;只能创建其子类对象 : 3.抽象类子类的两个选择 &#xff1a; 四、抽象类的成员 : 1.成员变量 : 2.成员方…

趣味三角——第12章——tanx

第12章节 tanx In his very numerous memoires, and especially in his great work, Introductio in analysin infinitorum (1748), Euler displayed the most wonderful skill in obtaining a rich harvest of results of great interest. . . . Hardly any other work …

业务单据堆积如山?如何提升会计做账效率?

某集团以“创建现代能源体系、提高人民生活品质”为使命&#xff0c;形成了贯通下游分销、中游贸易储运、上游生产的清洁能源产业链和涵盖健康、文化、旅游、置业的生命健康产品链。目前&#xff0c;某集团在全国21个省&#xff0c;为超过2681万个家庭用户、21万家企业提供能源…

Android:同步屏障的简单理解和使用

同步屏障的简单理解和使用1、背景2、何为同步屏障&#xff1f;2.1、 发送屏障消息——postSyncBarrier2.2、发送异步消息2.3、处理消息2.4、移除屏障消息——removeSyncBarrier2、系统什么时候添加同步屏障&#xff1f;参考1、背景 这里我们假设一个场景&#xff1a;我们向主线…

网狐服务端C++引入http功能剖析

旗舰版本的网狐服务端及以前的版本都是没有http解析功能的&#xff0c;导致就是web后台改了配置不能及时通知到游戏里面去&#xff0c;以至于很多小公司拿这种框架来开发的变通的方案就是用定时器不定时去刷数据库&#xff0c;导致多少个功能就有多少个定时去刷新&#xff0c;代…

0基础学习软件测试难么

0基础开始学习任何一样事情都是有一定难度的&#xff0c;但是也要有对比&#xff0c;软件测试相比于IT行业其他学科已经算是容易入门的了&#xff0c;就看你个人的学习方法&#xff0c;找的学习资源以及你的自制力。 正确学习方法路径 “我一听就懂&#xff0c;一敲就废&…

【Spring的事务传播行为有哪些呢?Spring事务的隔离级别?讲下嵌套事务?】

如果你想寻求一份与后端相关的开发工作&#xff0c;那么关于Spring事务相关的面试题你就不能说不会并且不能不知道&#xff1f; 人生如棋&#xff0c;我愿为卒&#xff0c;行动虽慢&#xff0c;可谁曾见我后退一步&#xff1f; 一.Spring中声明事务的方式 1.1 编程式事务 编程…

Android Gradle脚本打包

1、背景资料 1.1 Android-Gradle-Groovy-Java-JVM 之间的关系 1.2 Android Gradle Plugin Version版本 与 Gradle Version版本的对应关系 Android Gradle Plugin Version版本Gradle Version版本1.0.0 - 1.1.32.2.1 - 2.31.2.0 - 1.3.12.2.1 - 2.91.5.02.2.1 - 2.132.0.0 -…

WFP网络过滤驱动-限制网站访问

文章目录前言WFP入门介绍WFP基本架构名词解释代码基本结构代码示例前言 WFP Architecture - Win32 apps | Microsoft Learn是一个网络流量处理平台。WFP 由一组连接到网络堆栈的钩子和一个协调网络堆栈交互的过滤引擎组成。 本文使用WFP&#xff0c;实现了一个网络阻断的demo…

Guna UI WinForms 2.0.4.4 Crack

Guna.UI2 WinForms is the suite for creating groundbreaking desktop app UI. It is for developers targeting the .NET Windows Forms platform. 50 多个 UI 控件 具有广泛功能的综合组件可帮助您开发任何东西。 无尽的定制 只需拖放即可创建视觉效果命令和体验。 出色的…

服务端开发之Java备战秋招面试篇2-HashMap底层原理篇

现在Java应届生和实习生就业基本上必问HashMap的底层原理和扩容机制等&#xff0c;可以说是十分常见的面试题了&#xff0c;今天我们来好好整理一下这些知识&#xff0c;为后面的秋招做足准备&#xff0c;加油吧&#xff0c;少年。 目录 1、HashMap集合介绍 2、HashMap的存储…

S2-001漏洞分析

首发于个人博客&#xff1a;https://bthoughts.top/posts/S2-001漏洞分析/ 一、简介 1.1 Struts2 Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架。 Struts2不只是Struts1下一个版本&#xff0c;它是一个完全重写的Struts架构。 1.2 S2-001 Remote code exploit o…

【保姆级】手把手捋动态代理流程(JDK+Cglib超详细源码分析)

简介动态代理&#xff0c;通俗点说就是&#xff1a;无需声明式的创建java代理类&#xff0c;而是在运行过程中生成"虚拟"的代理类&#xff0c;被ClassLoader加载。 从而避免了静态代理那样需要声明大量的代理类。上面的简介中提到了两个关键的名词&#xff1a;“静态…

C语言进阶(九)—— 函数指针和回调函数、预处理、动态库和静态库的使用、递归函数

1. 函数指针1.1 函数类型通过什么来区分两个不同的函数&#xff1f;一个函数在编译时被分配一个入口地址&#xff0c;这个地址就称为函数的指针&#xff0c;函数名代表函数的入口地址。函数三要素&#xff1a; 名称、参数、返回值。C语言中的函数有自己特定的类型。c语言中通过…

多元回归分析 | ELM极限学习机多输入单输出预测(Matlab完整程序)

多元回归分析 | ELM极限学习机多输入单输出预测(Matlab完整程序) 目录 多元回归分析 | ELM极限学习机多输入单输出预测(Matlab完整程序)预测结果评价指标基本介绍程序设计参考资料预测结果 评价指标 -----------ELM结果分析-------------- 均方根误差(RMSE):0.55438 测试集…