ARMday6作业

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);//GPIOBRCC->MP_AHB4ENSETR |= (0x1<<6);//GPIOGRCC->MP_APB1ENSETR |= (0X1<<16);//UART4//设置PB2和PG11管脚复用//PB2GPIOB->MODER &= (~(0x3<<4));GPIOB->MODER |=(0x2<<4); GPIOB->AFRL &= (~(0XF<<8));GPIOB->AFRL |= (0x8<<8);//PG11GPIOG->MODER &= (~(0x3<<22));GPIOG->MODER |=(0x2<<22); GPIOB->AFRH &= (~(0XF<<12));GPIOB->AFRH |= (0x6<<12);//设置串口不使能 UE=0USART4->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));//设置波特率为115200USART4->BRR=0X22B;//使能发送器USART4->CR1 |= (0x1<<3);//使能接收器USART4->CR1 |= (0x1<<2);//使能uart4USART4->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.mzph.cn/news/762362.shtml

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

相关文章

C# 主窗体中显示子窗体(MDI)

1.示例代码&#xff0c;假如主窗体为MainForm,有三个子窗体分别是&#xff1a;Form1&#xff0c;Form2&#xff0c;Form3 public partial class MainForm : Form {public MainForm(){InitializeComponent();}Form1 form1 new Form1(); //子窗体1Form2 form2 new Form2(); //…

【地图】腾讯地图 - InfoWindow 自定义信息窗口内容时,内容 html 嵌套混乱问题

目录 需求描述问题问题代码页面展示 解决原因解决办法解决代码页面展示 代码汇总注 需求描述 腾讯地图上画点位&#xff0c;点击点位展示弹框信息 问题 问题代码 // 打开弹框 openInfoWindow(position, content) {this.infoWindow new TMap.InfoWindow({map: this.map,posit…

windowsVMware虚拟机中扩展linux磁盘空间

1.虚拟磁盘扩容 VM中&#xff0c;关闭linux虚拟机&#xff0c;直接编辑虚拟机-硬盘-扩展磁盘容量 2.通过Gparted工具进行LINUX系统磁盘分区 未分区挂载前可以看到/挂载点下空间为20G&#xff1a; 通过虚拟机-快照-拍摄快照&#xff0c;操作前可拍摄快照&#xff08;便于恢复之前…

FPGA高速接口的学习途径,全套课程

​FPGA高速接口有哪些学习途径&#xff0c;这里不得不提下我们宸极教育FPGA课程&#xff0c; FPGA课程5.0 版&#xff1a;Xilinx体系高速接口项目实操&#xff0c;全新升级&#xff0c;课程完全根据企业招聘要求&#xff0c;项目实操设置&#xff0c;适应目前市场的求职招聘要…

FastJson序列化隐藏特性

针对训练模型控制台的web后端维护&#xff0c;新增了一个int类型的maxTokenLimit字段&#xff0c;表示调用GPT模型请求允许的TokenSize上限值。后端添加好之后&#xff0c;数据库里面这个字段项没有填充数值&#xff0c;默认是空&#xff0c;所以理论上当maxTokenLimit字段为空…

半加器___

1.原理 2.代码 2.1 half_adder.v module half_adder (input wire in_1 ,input wire in_2 ,output wire sum ,output wire count );assign {count,sum}in_1in_2;endmodule 2.2 tb_half_adder.v timescale 1ns/1nsmodule tb_half_adder();reg in_1; reg in_2;wire su…

ThreaTrace复现记录

1. 环境配置 服务器环境 需要10.2的cuda版本 conda环境 包的版本&#xff1a; python 3.6.13 pytorch 1.9.1 torch-cluster 1.5.9 torch-scatter 2.0.9 torch-sparse 0.6.12 torch-spline-conv 1.2.1 torch-geometric 1.4.3 环境bug 这里环境搭建好以后&#xff0c;就可以正…

MySql实战--深入浅出索引(下)

在开始这篇文章之前&#xff0c;我们先来看一下这个问题&#xff1a; 在下面这个表T中&#xff0c;如果我执行 select * from T where k between 3 and 5&#xff0c;需要执行几次树的搜索操作&#xff0c;会扫描多少行&#xff1f; 下面是这个表的初始化语句。 图1 InnoDB的索…

【IEEE】Multimodal Machine Learning: A Survey and Taxonomy

不废话&#xff0c;先上思维导图&#xff0c;哈哈哈&#xff01; 论文题目Machine Learning: A Survey and Taxonomy作者Tadas Baltrusaitis , Chaitanya Ahuja , and Louis-Philippe Morency状态已读完会议或者期刊名称IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE IN…

【创建进程】fork函数与写时拷贝

文章目录 fork函数fork如何返回两个值&#xff08;fork的工作原理&#xff09;如何解释父子进程相互输出printf 写时拷贝 fork函数 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 fork函…

Linux - 应用层HTTPS、传输层TCP/IP模型中典型协议解析

目录 应用层&#xff1a;自定制协议实例 HTTP协议首行头部空行正文http服务器的搭建 HTTPS协议 传输层UDP协议TCP协议 应用层&#xff1a; 应用层负责应用程序之间的沟通—程序员自己定义数据的组织格式 应用层协议&#xff1a;如何将多个数据对象组织成为一个二进制数据串进行…

ES集群部署指引

文章目录 引言I 清除last_run_metadata_path数据。II 配置IP2.1 CentOS系统的IP参数2.2 shell脚本-静态网络配置III 公司工作电脑的IP多号段配置3.1 Mac电脑3.2 windows系统see alsomac Rootlees 内核保护措施引言 申请两台Linux机器,存储1年的航迹数据,需要4T的存储空间。 E…

【算法刷题 | 二叉树 03】3.22 二叉树的层序遍历02(5题:在每个树行中找最大值,填充每个节点的下一个右侧节点指针,二叉树的最大深度,最小深度)

文章目录 5.6 515_在每个树行中找最大值5.6.1问题5.6.2解法&#xff1a;层序遍历 5.7 116_填充每个节点的下一个右侧节点指针5.7.1问题5.7.2解法&#xff1a;层序遍历 5.8 116_填充每个节点的下一个右侧节点指针||5.8.1问题5.8.2解法&#xff1a;层序遍历 5.9 104_二叉树的最大…

Transformer的前世今生 day02(神经网络语言模型、词向量)

神经网络语言模型 使用神经网络的方法&#xff0c;去完成语言模型的两个问题&#xff0c;下图为两层感知机的神经网络语言模型&#xff1a; 假设词典V内有五个词&#xff1a;“判断”、“这个”、“词”、“的”、“词性”&#xff0c;且要输出P(w_next | “判断”、“这个”、…

揭秘最热门AI写作软件,看看有哪些值得推荐的AI写作神器

在快节奏的现代生活中&#xff0c;我们常常面临各种压力&#xff0c;例如工作、学习等。因此&#xff0c;一款能够提高写作效率的工具变得尤为重要。那么&#xff0c;有没有什么AI写作软件是比较好用的呢&#xff1f;下面小编给大家推荐几款热门的写作软件。 一.爱制作AI写作 …

什么是分布式

一个系统 各组件分别部署在不同服务器。彼此通过网络通信和协调的系统。 可以指多个不同组件分布在网络上互相协作&#xff0c;比如说电商网站也可以一个组件的多个副本组成集群&#xff0c;互相协作如同一个组件&#xff0c;比如数据存储服务中为了数据不丢失而采取的多个服务…

AI时代,Matter如何融入与服务中国智能家居市场,助力中国企业出海?

随着智能家居产业的飞速发展&#xff0c;丰富多样的智能家居产品为消费者带来了便利的同时&#xff0c;因为不同品牌、不同产品之间的协议与标准不统一&#xff0c;导致消费者体验产生割裂&#xff0c;本来想买个“智能”家居&#xff0c;结果买了个“智障”家居&#xff0c;这…

SQL日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…

腾讯二面:如何保证接口幂等性?高并发下的接口幂等性如何实现?

什么是接口幂等性 接口幂等性这一概念源于数学&#xff0c;原意是指一个操作如果连续执行多次所产生的结果与仅执行一次的效果相同&#xff0c;那么我们就称这个操作是幂等的。在互联网领域&#xff0c;特别是在Web服务、API设计和分布式系统中&#xff0c;接口幂等性具有非常…

嵌入式软件面试-linux-中高级问题

Linux系统启动过程&#xff1a; BIOS自检并加载引导程序。引导程序&#xff08;如GRUB&#xff09;加载Linux内核到内存。内核初始化硬件&#xff0c;加载驱动&#xff0c;建立内存管理。加载init进程&#xff08;PID为1&#xff09;&#xff0c;通常是systemd或SysVinit。init…