作业:1.实验串口收发一个字符2.实验串口收发一个字符串

news/2024/5/11 3:54:13/文章来源:https://blog.csdn.net/weixin_46323325/article/details/129151291

main.c代码如下

#include "uart4.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()
{//串口初始化uart_init();//实现串口数据收发while(1){//put_char(get_char()+1);put_string(get_string());}return 0;
}

uart4.c代码如下

#include "uart4.h"//串口初始化
void uart_init()
{/**************************RCC章节初始化********************///使能GPIOB组控制器    RCC->MP_APB4ENSETR &=(~(0x1<<1));RCC->MP_APB4ENSETR |=(0x1<<1);//使能GPIOG组控制器RCC->MP_AHB4ENSETR &=(~(0x1<<6));RCC->MP_AHB4ENSETR |=(0x1<<6);//使能UART4组控制器RCC->MP_APB1ENSETR &=(~(0x1<<16));RCC->MP_APB1ENSETR |=(0x1<<16);/*********************GPIO章节初始化***********************///设置GPIOB——MODER寄存器为复用功能模式GPIOB->MODER &=(~(0x3<<4));GPIOB->MODER |=(0x1<<5);//设置GPIOG_MODER寄存器为复用功能模式GPIOG->MODER &=(~(0x3<<22));GPIOG->MODER |=(0x1<<23);//设置GPIOB_AFRL寄存器复用功能模式UART4_RXGPIOB->AFRL &=(~(0xf<<8));GPIOB->AFRL |=(0x1<<11);//设置GPIOG_AFRH寄存器复用功能模式UART4_TXGPIOG->AFRH &=(~(0xf<<12));GPIOG->AFRH |=(0x3<<13);/******************UART4章节初始化******************************///写00 ----->设置数据位宽度为8位USART4->CR1 &=(~(0x1<<0));USART4->CR1 &=(~(0x1<<28));USART4->CR1 &=(~(0x1<<12));//写0 ----->设置串口无奇偶校验位USART4->CR1 &=(~(0x1<<10));//设置串口1位停止位USART4->CR2 &=(~(0x3<<12));//写0 ----->设置串口采样率,会影响波特率的计算USART4->CR1 &=(~(0x1<<15));USART4->PRESC &=(~(0xf<<0));//[200~设置串口接收器使能USART4->BRR |= 0x22B;USART4->CR1 |=(0x1<<3);//设置串口发送器使能USART4->CR1 |=(0x1<<2);//设置串口使能USART4->CR1 |=(0x1<<0);}//发送一个字符
void put_char(const char str)
{//1.判断发送数据寄存器是否为空,为空才可以发送下一个字节//ISR[7]//读0:发送数据寄存器满,需要等待//读1:发送数据寄存器空,才可以发送下一个字节数据while(!(USART4->ISR &(0x1<<7)));if(str=='\n')put_char('\r');//2.将要发送的字符,写到发送数据寄存器中USART4->TDR = str;//3.判断发送数据寄存器是否完成//ISR[6]while(!(USART4->ISR &(0x1<<6)));
}//发送一个字符串
void put_string(const char *str)
{//判断是否为'\0',一个字符一个字符发送int i = 0;while( str[i]!='\0'){put_char(str[i]);i++;}
}//接受一个字符
char get_char()
{char ch;//1.判断接收数据寄存器是否有数据可读 ISR[5]while(!(USART4->ISR & (0x1<<5)));//2.将接收到的数据读出来ch = USART4->RDR;return ch;
}char buffer[50] = {0};
//接受一个字符串
char *get_string()
{//for循环//当键盘的回车键'\r'按下之后,字符串输入完成int i;for(i = 0;i<50;i++){buffer[i] = get_char();if(buffer[i]=='\r'){break;}}//字符串补'\0'buffer[i+1]='\n';buffer[i+2] = '\0';return buffer;
}

uart4.h代码如下

#ifndef __UART4__H__
#define __UART4__H__#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"//串口初始化
void uart_init();//发送一个字符
void put_char(const char str);//发送一个字符串
void put_string(const char *str);//接受一个字符
char get_char();//接受一个字符串
char *get_string();#endif

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

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

相关文章

前端必须知道的http知识

HTTP协议也叫超文本传输协议&#xff0c;是一种基于TCP/IP的应用层通信协议&#xff0c;这个协议详细规定了浏览器和万维网服务器之间互相通信的规则&#xff08;报文&#xff0c;请求报文、响应报文&#xff09; 请求方式 HTTP设定了八种发送请求方式&#xff0c;这八种方法没…

APP测试中ios和androis的区别,有哪些注意点

目录 一、运行机制不同 二、对app内存消耗处理方式不同 三、后台制度不同 四、最高权限指令不同 五、推送机制不同 六、抓取方式不同 七、灰度发版机制不同 八、审核机制不同 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;…

独立搭建 handle server

本节主要介绍,如何搭建一个与 GHR隔离的 handle sever,不与外界有任何连通。 下载文件 访问地址下载最新版:http://www.handle.net/download_hnr.html 这里以 9.3.0 版本作为讲解 解压服务端,解压客户端 # 解压 tar -xzvf handle-9.3.0-distribution.tar.gz# 到目录下 …

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 镜像输出&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,…

性能测试的二八原则

性能测试二八原则&#xff0c;响应时间2/5/8原则 所谓响应时间的“2-5-8原则”&#xff0c;简单说&#xff0c;就是 当用户能够在2秒以内得到响应时&#xff0c;会感觉系统的响应很快; 当用户在2-5秒之间得到响应时&#xff0c;会感觉系统的响应速度还可以; 当用户在5-8秒以内得…

智能小车PWM调速原理

电机驱动电路智能小车电机的驱动芯片采用L293D。L293D是一款单片集成的高电压、高电流、4通道电机驱动&#xff0c;设计用于连接标准DTL或TTL逻辑电平&#xff0c;驱动电感负载&#xff08;诸如继电线圈、DC和步进电机&#xff09;和开关功率晶体管等等。L293D有4个通道&#x…

SpringBoot2核心技术-核心功能【05、Web开发】

目录 1、SpringMVC自动配置概览 2、简单功能分析 2.1、静态资源访问 1、静态资源目录 2、静态资源访问前缀 2.2、欢迎页支持 2.3、自定义 Favicon 2.4、静态资源配置原理 3、请求参数处理 0、请求映射 1、rest使用与原理 2、请求映射原理 1、普通参数与基本注解 …

Vulnhub靶场----1、DC-1

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 靶场下载地址&#xff1a;https://download.vulnhub.com/dc/DC-1.zip Kali地址&#xff1a;192.168.144.148 DC-1靶机地址&#xff1a;192.168.144.149 二、渗透流程 端口扫描&#xff1a;nmap -A -T4 192.168.144.1…

基于 U-Net 网络的遥感图像语义分割 完整代码+论文

一、研究目的U-Net 是一种由全卷积神经网络启发的对称结构网络&#xff0c;在医疗影像分割领域取得了很好的效果。 此次研究尝试使用 U-Net 网络在对多光谱遥感影像数据集上进行训练&#xff0c;尝试使用卷积神经网络自动分割出建筑&#xff0c;希望能够得到一种自动分割遥感影…

基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及…

数字经济讨论题

自2001年以来&#xff0c;Alphabet&#xff08;Google&#xff09;已进行了200多次并购。下面列出了并购年份。选择Alphabet进行的三笔并购讨论这些并购是如何使Alphabet拥有新的或增强的现有业务领域重要的是考虑何时进行所选择的收购。谷歌已经从一家提供互联网搜索引擎的公司…

【VUE3.0_CSS功能】

CSS功能组件css作用域深度选择器&#xff08;标签名空格:deep(标签名)&#xff09;插槽选择器&#xff08;:soltted(标签名)&#xff09;全局选择器&#xff08;:global(类名)&#xff09;动态CSS&#xff08;v-bind&#xff09;useCSSModule拓展知识&#xff1a;deep的写法组件…

拒绝背锅:测试项目中的风险管理一定要知道

测试经理除了要管理产品线的质量保障和日常部门事务工作外&#xff0c;另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展&#xff0c;而是想聊一聊在同行中比较高频出现的一个字眼&#xff1a;风险管理。 什么是风险管理 引用百度上的解释&a…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

ES6的迭代器与迭代协议Symbol.iterator

前言ES6新增了两个协议&#xff1a;可迭代协议&#xff1a;对象必须具有Symbol.Iterator属性&#xff0c;属性值为一个函数&#xff0c;当这个对象被迭代时&#xff0c;就会调用该函数&#xff0c;返回一个迭代器。迭代器协议&#xff1a;描述了迭代器对象的具体规则。迭代器迭…

数据分析-深度学习 NLP Day2关键词提取案例

训练一个关键词提取算法需要以下几个步骤&#xff1a;1&#xff09;加载已有的文档数据集&#xff1b;2&#xff09;加载停用词表&#xff1b;3&#xff09;对数据集中的文档进行分词&#xff1b;4&#xff09;根据停用词表&#xff0c;过滤干扰词&#xff1b;5&#xff09;根据…

推荐5款免费且无广告的软件,助你提升效率

有时候一些小工具&#xff0c;能给你带来一些意想不到的效果&#xff0c;我们来看看下面这5款工具&#xff0c;你又用过其中几款呢&#xff1f; 1.文件大小查看——Folder Size Folder Size是一个可以查看文件大小的软件&#xff0c;使用它可以一键查看文件夹里的文件大小。你…

容器技术概述

容器化应用程序 软件应用程序通常依赖于运行时环境提供的其他库、配置文件或服务。软件应用程序的传统运行环境是物理主机或虚拟机&#xff0c;应用程序依赖项作为主机的一部分安装。 例如&#xff0c;考虑一个 Python 应用程序&#xff0c;它需要访问实现 TLS 协议的公共共享…

Leaf说明

什么是Leafleaf是叶子的意思我们使用的Leaf是美团公司开源的一个分布式序列号(id)生成系统我们可以在Github网站上下载项目直接使用为什么需要Leaf上面的图片中是一个实际开发中常见的读写分离的数据库部署格式专门进行数据更新(写)的有两个数据库节点它们同时新增数据可能产生…

性能测试学习和性能瓶颈分析路线

很多企业招聘都只写性能测试&#xff0c;会使用LR&#xff0c;jmeter工具。其实会使用jmeter和LR进行性能测试还只是性能测试的第一步&#xff0c;离真正的性能测试工程师还很远&#xff0c;笔者也还在路上 .。 性能测试&#xff0c;都是要求测试系统性能&#xff0c;系统自然…