嵌入式作业5

在函数main.c中初始化三种颜色的灯

gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF);

//蓝灯

gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF);

//绿灯

gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_OFF);

//红灯

同时为了响应以上修改,进入isr。c文件添加以下代码

void UART_User_Handler(void)

{

    //声明局部变量

    uint8_t ch;

    uint8_t flag;

    uint32_t mMainLoopCount;

    mMainLoopCount=0;

    //关总中断

    DISABLE_INTERRUPTS;

    //读取字节

    ch=uart_recv(UART_User, &flag); //调用接收一个字节的函数,清接收中断位

    //根据标志判断是否真正收到一个字节的数据

    if(flag)

    {

        //有数据

        if(ch=='B')

        {

            gpio_set(LIGHT_BLUE, LIGHT_ON);

            gpio_set(LIGHT_RED, LIGHT_OFF);

            gpio_set(LIGHT_GREEN, LIGHT_OFF);

        }

        else if(ch=='G')

        {

            gpio_set(LIGHT_GREEN, LIGHT_ON);

            gpio_set(LIGHT_RED, LIGHT_OFF);

            gpio_set(LIGHT_BLUE, LIGHT_OFF);

        }

        else if(ch=='R')

        {

            gpio_set(LIGHT_RED, LIGHT_ON);

            gpio_set(LIGHT_BLUE, LIGHT_OFF);

            gpio_set(LIGHT_GREEN, LIGHT_OFF);

        }

        else

        {

            gpio_set(LIGHT_RED, LIGHT_OFF);

            gpio_set(LIGHT_BLUE, LIGHT_OFF);

            gpio_set(LIGHT_GREEN, LIGHT_OFF);

        }

        ch=ch+1;

        uart_send(UART_User, ch); //回发接收到的字节

    }

}

(2)UART部分用直接地址方式实现(即不调用uart.c中的函数,其他部分如GPIO、中断设置可调用函数)。

在寄存器程序里面初始化:

volatile uint32_t* uart_isr; // UART中断和状态寄存器基地址

volatile uint32_t* uart_crl; //UART控制寄存器1基地址

volatile uint32_t* uart_cr2; //UART控制寄存器2基地址

volatile uint32_t* uart_cr3; //UART控制寄存器3基地址

volatile uint32_t* uart_tdr; //UART发送数据寄存器

volatile uint32_t* uart_rdr; //UART接收数据寄存器32106100129

uint16_t usartdiv; //BRR寄存器应赋的值

//变量赋值

RCC_APB1=0x40021058UL; //UART时钟使能寄存器地址

RCC_AHB2=0x4002104CUL; //GPIO的A口时钟使能寄存器地址

gpio_ptr=0x48000000UL; //GPIOA端口的基地址

uart_ptr=0x40004400UL; //UART2端口的基地址

gpio_mode=0x48000000UL; //引脚模式寄存器地址=口基地址

gpio_afr1=0x48000020UL; // GPIO复用功能低位寄存器

uart_cr1=0x40004400UL; //UART控制寄存器1基地址

uart_rdr=0x40004424UL; //UART接收数据寄存器32106100129

uart_brr=0x4000440CUL; //UART波特率寄存器地址

uart_isr=0x4000441CUL; // UART中断和状态寄存器基地址

uart_tdr=0x40004428UL; //UART发送数据寄存器

uart_cr2=0x40004404UL; //UART控制寄存器2基地址

uart_cr3=0x40004408UL; //UART控制寄存器3基地址

继续在main程序中初始化三种灯:

gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF);

//蓝灯

gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF);

//绿灯

gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_OFF);

//红灯

最后实现并运行:

while(1) {

    uint8_t ch;

    ch=uart_rdr; //获取接收寄存器中的值

    *uart_tdr = ch+1; //发送接收到数据的下一个字符

    if(ch=='B')

    {

        gpio_set(LIGHT_BLUE, LIGHT_ON);

        gpio_set(LIGHT_GREEN, LIGHT_OFF);

        gpio_set(LIGHT_RED, LIGHT_OFF);

    }

    else if(ch=='R')

    {

        gpio_set(LIGHT_RED, LIGHT_ON);

        gpio_set(LIGHT_BLUE, LIGHT_OFF);

        gpio_set(LIGHT_GREEN, LIGHT_OFF);

    }

    else if(ch=='G')

    {

        gpio_set(LIGHT_GREEN, LIGHT_ON);

        gpio_set(LIGHT_RED, LIGHT_OFF);

        gpio_set(LIGHT_BLUE, LIGHT_OFF);

    }

    else

    {

        gpio_set(LIGHT_BLUE, LIGHT_OFF);

        gpio_set(LIGHT_GREEN, LIGHT_OFF);

        gpio_set(LIGHT_RED, LIGHT_OFF);

    }

}

之后运行结果与(1)大致相同

//初始化红灯五、运行结果

用适当的文字、截图、图片等描述实验的结果。

通过以上代码,使用构建调用的方式实现了实验内容功能:

实验主板的灯对应输入字符点亮:

输入R点亮红灯

输入B点亮蓝灯

输入G点亮绿灯。

 输入其他字符:

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

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

相关文章

STM32 CubeMX使用记录

取消DMA中断默认使能 DMA中断默认使能勾选无法取消选中 取消勾选Force DMA channels interrupts

cadence23---PCB Editer 学习笔记

1.交互式布局 在Orcad中点击图标N生成第一网表: 在PCB Editer中导入第一网表, 之后点击移动命令并在右侧属性框中勾选Symbol选项卡: 设置--应用模式--点击常规编辑: 之后就可以进行交互式选择了。 绿色图标为打开全部飞线&#…

web前端学习笔记11

11. CSS3高级特效 11.1 CSS3变形 CSS3变形是一些效果的集合, 如平移、旋转、缩放、倾斜效果 每个效果都可以称为变形(transform),它们可以分别操控元素发生平移、旋转、缩放、倾斜等变化 语法 transform:[transform-function] ; /* 设置变形函数,可以是一个,也可以是多…

2024年【N1叉车司机】考试题及N1叉车司机找解析

题库来源:安全生产模拟考试一点通公众号小程序 N1叉车司机考试题参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总,相对有效帮助N1叉车司机找解析学员顺利通过考试。 1、【多选题】《特种设备使用…

git使用介绍

一、为什么做版本控制(git是版本控制工具) 为了保留之前所以的版本,以便回滚和修改 二、点击安装 三、基础操作 1、初步认识 想要让git对一个目录进行版本控制需要以下步骤: 进入要管理的文件夹进行初始化命令 git init管理…

Amesim基础篇-元件详解-H型膨胀阀四象限解析

一 膨胀阀简介 膨胀阀的主要功能是节流和调节过热度,库内膨胀阀包含节流管、H型膨胀阀、T型膨胀阀三种: 节流管:一根内径较小的管路,当制冷剂通过他时发生等等焓降压降温,具有成本低,内径不可变的特点,因此普遍在家用空调中使用,在汽车空调上使用较少。当我们建模过程…

Linux虚拟主机中如何创建文件和文件夹

我想创建一个新的文件夹,由于我使用的Hostease的Linux虚拟主机产品默认带普通用户权限的cPanel面板,但是不知道如何在cPanel上操作创建文件,因为也是对于Hostease主机产品不是很了解,因此联系Hostease的咨询了Hostease技术支持&am…

JAVA线程池的线程数量配置

一 JAVA线程池的线程数量配置 关于线程的配置,线程数量配置多少这个问题呢?往往不同的环境与不同的线程中的代码决定其配置的线程的数量。 二 常见的线程量配置 最常见的方式根据线程中处理的代码划分为CPU密集型或IO密集型: CPU密集型&…

学习Uni-app开发小程序Day18

昨天学习了使用轮播显示图片和文字,轮播方式纵向和横向。今天使用扩展组件和scroll-view显示图片,使用scroll-view的grid方式、插槽slot、自定义组件、磨砂背景定位布局做专题组件 这就是需要做成的效果,下面将一步一步的完成。 首先&#x…

如何高效创建与配置工程环境:零基础入门

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、工程环境的搭建与准备 二、配置虚拟环境与选择解释器 三、编写代码与自动添加多行注释 …

SpringMVC笔记

一、SpringMVC 简介 1.1 什么是 MVC MVC 是一种软件架构的思想,将软件按照模型、视图、控制器来划分 1.M:Model 模型层,指工程中的 JavaBean ,作用是处理数据 JavaBean 分为两类 实体类Bean:专门存储业务数据的…

C++vector的简单模拟实现

文章目录 目录 文章目录 前言 一、vector使用时的注意事项 1.typedef的类型 2.vector不是string 3.vector 4.算法sort 二、vector的实现 1.通过源码进行猜测vector的结构 2.初步vector的构建 2.1 成员变量 2.2成员函数 2.2.1尾插和扩容 2.2.2operator[] 2.2.3 迭代器 2…

【Apache Doris】BE宕机问题排查指南

【Apache Doris】BE宕机问题排查指南 背景BE宕机分类如何判断是BE进程是Crash还是OOMBE Crash 后如何排查BE OOM 后如何分析Cache 没及时释放导致BE OOM(2.0.3-rc04) 关于社区 作者|李渊渊 背景 在实际线上生产环境中,大家可能遇…

校园网拨号上网环境下多开虚拟机,实现宿主机与虚拟机互通,并访问外部网络

校园网某些登录客户端只允许同一时间一台设备登录,因此必须使用NAT模式共享宿主机的真实IP,相当于访问外网时只使用宿主机IP,此方式通过虚拟网卡与物理网卡之间的数据转发实现访问外网及互通 经验证,将centos的物理地址与主机物理…

有什么好用的语音翻译软件推荐?亲测实用的语音翻译工具来了

嘿,大家好!你们有没有想过,现在世界这么“小”,我们跟不同国家的人打交道的机会越来越多了。 但是呢,语言不通真是个大问题。别担心,现在有个超棒的解决方案——语音翻译技术!这玩意儿能实时把…

Spring Cloud学习笔记(Nacos):配置中心基础和代码样例

这是本人学习的总结,主要学习资料如下 - 马士兵教育 1、Overview2、样例2.1、Dependency2.2、配置文件的定位2.3、bootstrap.yml2.4、配置中心新增配置2.5、验证 1、Overview 配置中心用于管理配置项和配置文件,比如平时写的application.yml就是配置文件…

【Spring Security + OAuth2】OAuth2

Spring Security OAuth2 第一章 Spring Security 快速入门 第二章 Spring Security 自定义配置 第三章 Spring Security 前后端分离配置 第四章 Spring Security 身份认证 第五章 Spring Security 授权 第六章 OAuth2 文章目录 Spring Security OAuth21、OAuth2简介1.1、OAu…

Linux驱动开发笔记(二) 基于字符设备驱动的I/O操作

文章目录 前言一、设备驱动的作用与本质1. 驱动的作用2. 有无操作系统的区别 二、内存管理单元MMU三、相关函数1. ioremap( )2. iounmap( )3. class_create( )4. class_destroy( ) 四、GPIO的基本知识1. GPIO的寄存器进行读写操作流程2. 引脚复用2. 定义GPIO寄存器物理地址 五、…

【2024最新华为OD-C卷试题汇总】传递悄悄话的最长时间(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 前…