ARMday6作业

news2024/12/27 13:38:25

1,串口字符串收发现象实现图

 2.串口控制灯亮灭

main.c

#include "uart4.h"

//封装延时函数
void delay(int ms)
{
    int i,j;
    for(i=0;i<ms;i++)
    {
        for(j=0;j<2000;j++)
        {}

    }
}

int strcmp(char *a1,char *a2)
{
  int i=0;
  while(a1[i]==a2[i])
  {
    if(a1[i]=='\0')
     {
        break;
     } 
      i++;
  }
  int sub=a1[i]-a2[i];
   return sub;
}

int main()
{
    //led初始化
    uart4_init();
    all_led_init();
    char buf[32];
    // char i;
    while(1)
    {
        // i=getchar();
        // putchar(i+1);
        // //最终的现象:键盘输入a,串口工具显示b 
        gets(buf);
       if(strcmp(buf,"L1T")==0)
       {
          LED1_ON();
       }
       if(strcmp(buf,"L1F")==0)
       {
          LED1_OFF();
       }

       if(strcmp(buf,"L2T")==0)
       {
          LED2_ON();
       }
       if(strcmp(buf,"L2F")==0)
       {
          LED2_OFF();
       }

       if(strcmp(buf,"L3T")==0)
       {
          LED3_ON();
       }
       if(strcmp(buf,"L3F")==0)
       {
          LED3_OFF();
       }
    }
    return 0;
}

usart4.h

#ifndef __UART4_H__
#define __UART4_H__

#include "led.h"
#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"

void uart4_init();
void putchar(char a);
char getchar();
void gets(char *s);
void puts(char *s);
int strcmp(char *a1,char *a2);
#endif

 usart4.c

#include "uart4.h"


void uart4_init()
{
    //使能GPIOB GPIOG UART4外设时钟
    RCC->MP_AHB4ENSETR |= (0x1<<1);//GPIOB
    RCC->MP_AHB4ENSETR |= (0x1<<6);//GPIOG
    RCC->MP_APB1ENSETR |= (0X1<<16);//UART4
    //设置PB2和PG11管脚复用
    //PB2
    GPIOB->MODER &= (~(0x3<<4));
    GPIOB->MODER |=(0x2<<4); 
    GPIOB->AFRL &= (~(0XF<<8));
    GPIOB->AFRL |= (0x8<<8);
    //PG11
    GPIOG->MODER &= (~(0x3<<22));
    GPIOG->MODER |=(0x2<<22); 
    GPIOB->AFRH &= (~(0XF<<12));
    GPIOB->AFRH |= (0x6<<12);
    //设置串口不使能 UE=0
    USART4->CR1 &= (~(0X1));
    //设置8位数据位
    USART4->CR1 &= (~(0x1<<12));
    USART4->CR1 &= (~(0x1<<28));
    //设置没有奇偶校验位
    USART4->CR1 &= (~(0x1<<10));
    //设置1位停止位
    USART4->CR2 &= (~(0x3<<12));
    //设置16倍过采样
    USART4->CR1 &= (~(0x1<<15));
    //设置时钟不分频
    USART4->PRESC &= (~(0xF));
    //设置波特率为115200
    USART4->BRR=0X22B;
    //使能发送器
    USART4->CR1 |= (0x1<<3);
    //使能接收器
     USART4->CR1 |= (0x1<<2);
    //使能uart4
     USART4->CR1 |= (0x1<<0);
    
}

//发送一个字符
void putchar(char a)
{
    //先判断发送数据寄存器是否为空
     //不为空阻塞等待
    while(!(USART4->ISR&(0x1<<7)));
    //为空向发送数据寄存器写入a的数据
   USART4->TDR=a;//写入数据
    //写入完成需要判断发送是否完成,不完成阻塞等待,完成了则函数结束
    while(!(USART4->ISR&(0x1<<6)));
}

//接收一个字符
char getchar()
{
    char a;
    //先判断接收数据寄存器中有没有准备好的数据
    //如果数据没有准备好则阻塞等待
    while(!(USART4->ISR&(0x1<<5)));
    //如果数据准备好了则读取
    a=USART4->RDR;
    //读取完毕将读取到的数据返回
    return a;
}

//发送字符串
void puts(char *s)
{
    while(*s)
    {
        putchar(*s);
        s++;
    }
    putchar('\n');// '\n'切换到下一行
    putchar('\r');//'\n'回车键,切换到行头

}

//接收字符串函数
void gets(char *s)
{
    while(1)
    {
        *s=getchar();
        putchar(*s);
        if((*s)=='\r')
            break;
        s++;
    }
    *s='\0';
    putchar('\n');//换行
}

 

实现现象

 

视频转gif在线工具:

 https://www.tutieshi.com/video/

口袋视频转换器下载地址:

https://koudaishipin

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

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

相关文章

微软发布首款AI PC ,产业链有望迎来新一轮量价齐升

3月21日晚&#xff0c;微软举办主题为“办公新时代”的线上新品发布会&#xff0c;发布Surface Pro 10和Surface Laptop 6&#xff0c;新品将搭载基于英特尔酷睿Ultra或高通骁龙X Elite的处理器&#xff0c;配备新一代NPU&#xff0c;以增强AI性能。 这两款AI PC将支持“AI Exp…

爱普生EPSON全新传感技术方案亮相高交会,创造新时代“精智生活”

2023年中国国际高新技术成果交易会在深圳福田会展中心盛大举行&#xff0c;是目前中国规模最大、最具影响力的科技类展会之一。爱普生作为始终坚持“科技本地化”战略的技术创新前沿企业参与此次展会&#xff0c;为中国用户带来爱普生电子元器件三款创新技术与四大成熟传感器解…

人大金仓与中科红旗达成战略合作

近日&#xff0c;人大金仓与中科红旗&#xff08;北京&#xff09;信息科技有限公司签订战略合作协议。双方将发挥各自优势&#xff0c;充分整合资源&#xff0c;在党政、金融、运营商、能源、交通等领域深化合作&#xff0c;实现协同发展。 中科红旗&#xff08;北京&#xff…

Linux 在线yum安装: PostgreSQL 15.6数据库

Linux 在线yum安装&#xff1a; PostgreSQL 15.6数据库 1、PostgreSQL数据库简介2、在线安装PostgreSQL15.63、配置 PostgreSQL的环境变量4、使用默认用户登录PostgreSQL5、配置 PostgreSQL 允许远程登录6、修改 PostgreSQL 默认端口7、创建数据库和表、远程用户zyl8、pgAdmin远…

Day69:WEB攻防-Java安全JWT攻防Swagger自动化算法签名密匙Druid泄漏

目录 Java安全-Druid监控-未授权访问&信息泄漏 黑盒发现 白盒发现 攻击点 Java安全-Swagger接口-导入&联动批量测试 黑盒发现 白盒发现 自动化发包测试 自动化漏洞测试 Java安全-JWT令牌-空算法&未签名&密匙提取 识别 JWT 方式一&#xff1a;人工识…

#Linux(环境变量)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;查看环境变量 &#xff08;2&#xff09;修改环境变量 第一种方法&#xff1a;直接使用命令设置&#xff08;立即生效&#xff0c;只会作用…

基于MATLAB的灰色神经网络预测订单需求

%% 清空环境变量 clc clear %% 36个样本&#xff0c;每个样本是6个月的销售量 load data%% 数据累加作为网络输入 [n,m]size(X); for i1:ny(i,1)sum(X(1:i,1));y(i,2)sum(X(1:i,2));y(i,3)sum(X(1:i,3));y(i,4)sum(X(1:i,4));y(i,5)sum(X(1:i,5));y(i,6)sum(X(1:i,6)); end%% …

儿童饰品上亚马逊需什么认证

注意了&#xff01;近期&#xff0c;亚马逊在抽查儿童首饰&#xff0c;被抽查到没有相关认证的产品将面临产品被下架等处罚&#xff01; 违反政策 如果您未在适用的截止日期之前提供所需信息&#xff0c;亚马逊可能会&#xff1a; 移除相关商品信息 暂停您添加新商品和/或商…

打造稳定高效的会员系统:技术架构解析与优化策略

随着互联网时代的发展和用户需求的变化&#xff0c;会员系统成为了各行各业企业实现用户粘性和增长的重要手段。一个稳定高效的会员系统架构能够帮助企业更好地管理会员数据、提供个性化服务和增加用户价值。本文将深入探讨会员系统的技术架构&#xff0c;分析其重要性和挑战&a…

(一)基于IDEA的JAVA基础1

Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向对象理论&#xff0…

【效率提升】IDEA中书签功能的妙用

这里写目录标题 1.概述2.书签功能介绍2.1.书签创建和删除2.2.书签列表2.3.自定义书签名2.4.带标签的书签创建2.5.标签快速跳转&#xff08;1到9&#xff09;2.6.其他标签快捷键2.7.其他补充 3.写到最后 1.概述 在多年的代码开发工作中&#xff0c;有一些问题困扰我很长的时间&…

【使用redisson完成延迟队列的功能】使用redisson配合线程池完成异步执行功能,延迟队列和不需要延迟的队列

1. 使用redisson完成延迟队列的功能 引入依赖 spring-boot-starter-actuator是Spring Boot提供的一个用于监控和管理应用程序的模块 用于查看应用程序的健康状况、审计信息、指标和其他有用的信息。这些端点可以帮助你监控应用程序的运行状态、性能指标和健康状况。 已经有了…

电子科技大学链时代工作室招新题C语言部分---题号H

1. 题目 最有操作的一道题&#xff0c;有利于对贪心算法有个初步了解。 这道题的开篇向我们介绍了一个叫汉明距离的概念。 汉明距离指的就是两个相同长度的字符串的不同字符的个数。 例如&#xff0c;abc和acd&#xff0c;b与c不同&#xff0c;c与d不同&#xff0c;所以这两个…

【Linux C | 多线程编程】线程的创建、线程ID、线程属性

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-03-22 0…

LiDAR 点云数据综合指南

LiDAR 是光探测和测距的缩写,它彻底改变了各个领域的数据采集。它生成密集 3D 点云的能力为我们的世界提供了无与伦比的洞察力。 但如此丰富的信息也带来了复杂性,特别是在理解不同类型的激光雷达点云数据时。本指南旨在成为您的一站式资源,阐明其中的细微差别,并使您能够…

python基础——对序列的通用操作【+和*、in、切片操作、separator.join(iterable)】

&#x1f4dd;前言&#xff1a; 我们已经学习了python数据容器中的列表&#xff0c;元组以及字符串。而他们都属于序列 &#xff08;序列是指&#xff1a;内容连续&#xff0c;有序&#xff0c;可以用下标索引访问的数据容器&#xff09; 在之前已经介绍了不少操作方法&#xf…

工作需求,Vue实现登录

加油&#xff0c;新时代打工人&#xff01; vue 2.x Element UI <template><div class"body" :style"{background-image: url(${require(/assets/images/login.png)})}"><el-form :rules"rules" ref"loginForm" :mode…

线性表:关于链表(主要以单链表为例)的相关理解和应用

多清澈这天空 晴雨相拥 同心逐梦&#xff01; 坚守我信心 一路出众&#xff01;&#xff01; 首先&#xff0c;按照惯例&#xff0c;欢迎大家边听歌边观看本博客 ▶ 紫荆花盛开 (163.com)&#xff08;建议复制链接&#xff0c;浏览器打开&#xff0c;csdn打开太慢了&#x…

mysql数据类型和常用函数

目录 1.整型 1.1参数signed和unsigned 1.2参数zerofill 1.3参数auto_increment 2.数字类型 2.1floor()向下取整 2.2随机函数rand() 2.3重复函数repeat() 3.字符串类型 3.1length()查看字节长度&#xff0c;char_length()查看字符长度 3.2字符集 3.2.1查看默认字符…

工程信号的去噪和(分类、回归和时序)预测

&#x1f680;【信号去噪及预测论文代码指导】&#x1f680; 还为小论文没有思路烦恼么&#xff1f;本人专注于最前沿的信号处理与预测技术——基于信号模态分解的去噪算法和深度学习的信号&#xff08;回归、时序和分类&#xff09;预测算法&#xff0c;致力于为您提供最精确、…