7.1作业6

uart4.h

#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"
//rcc/gpio/uart4初始化
void hal_uart4_init();
//发送一个字符
void hal_put_char(const char str);
//发送一个字符串
void hal_put_string(const char* string);
//接收一个字符
char hal_get_char();
//接收一个字符串
char* hal_get_string();
#endif

uarrt4.c

#include "uart4.h"
char buf[65]="";
//rcc/gpio/uart4初始化
void hal_uart4_init()
{/******RCC初始化*************///使能GPIOB控制器RCC->MP_AHB4ENSETR |=(0X1<<1);//使能GPIOG控制器RCC->MP_AHB4ENSETR |=(0X1<<6);//使能UART4控制器RCC->MP_APB1ENSETR |=(0X1<<16);/******GPIO初始化*************///PB2复用模式GPIOB->MODER &=(~(0X3<<4));GPIOB->MODER |=(0X2<<4);//PG11复用模式GPIOB->MODER &=(~(0X3<<22));GPIOB->MODER |=(0X2<<22);//PB2为UART_RX复用模式GPIOB->AFRL &=(~(0XF<<8));GPIOB->AFRL |=(0X8<<8);//PG11为UART_TX复用模式GPIOB->AFRL &=(~(0XF<<12));GPIOB->AFRL |=(0X6<<12);/******UART初始化*************///禁用串口 UE=0USART4->CR1 &=(~0X1);//设置8位数据位USART4->CR1 &=(~(0X1<<12));USART4->CR1 &=(~(0X1<<28)); //设置16倍采样率USART4->CR1 &=(~(0X1<<15));//设置无校验位USART4->CR1 &=(~(0X1<<10));//设置发送位使能USART4->CR1 |=(0X1<<3);//设置接收位使能USART4->CR1 |=(0X1<<2);//串口1位停止位USART4->CR2 &=(~(0X3<<12));//串口不分频USART4->PRESC &=(~0XF);//设置串口波特率115200USART4->BRR=0X22b;//串口使能 UE=1USART4->CR1 |=(0X1);
}//发送一个字符
void hal_put_char(const char str)
{//判断发送数据寄存器是否为空,不为空则阻塞等待while(!(USART4->ISR&(0X1<<7)));//当为空时将数据写入到数据发送寄存器USART4->TDR=str;//阻塞等待数据发送完毕,函数结束while(!(USART4->ISR&(0X1<<6)));
}//发送一个字符串
void hal_put_string(const char* string)
{while(*string){hal_put_char(*string);string++;}//发送完字符串让光标显示在下一行最开头hal_put_char('\n');hal_put_char('\r');
}//接收一个字符
char hal_get_char()
{//判断接收数据寄存器中有没有有效数据。如果没有就阻塞等待,如果有直接读取while(!(USART4->ISR&(0X1<<5)));//将读取的数据返回return USART4->RDR;
}//接收一个字符串
char* hal_get_string()
{unsigned int a;for(a=0;a<64;a++){buf[a]=hal_get_char();hal_put_char(buf[a]);if(buf[a]=='\r'){break;}}buf[a]='\0';hal_put_char('\n');hal_put_char('\r');return buf;
}

main.c

#include "uart4.h"
// 手动封装一个延时函数
void delay_ms(int ms)
{int i, j;for (i = 0; i < ms; i++){for (j = 0; j < 2000; j++){}}
}
int main()
{void hal_uart4_init();//char a;// char buf[32];while(1){/*a=hal_get_char();//读取一个字符hal_put_char(a+1);//将读取到的字符+1返回   win下换行符是'\n',回车键对应的字符是'\r'hal_put_char('\n');hal_put_char('\r');*///读取字符串hal_put_string(hal_get_string());}return 0;
}

结果

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

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

相关文章

在C++中暂停程序的几种方法

在开发C应用程序时&#xff0c;有时需要让程序暂停一段时间。例如&#xff0c;你可能需要等待某个操作完成&#xff0c;或是为用户提供某种延迟。在C中&#xff0c;有多种方法可以实现这一需求。 1. 使用 std::this_thread::sleep_for (C11及以上版本) std::this_thread::sle…

【JavaScript脚本宇宙】XML和HTML解析库大揭秘:快速选出最适合你的工具

解析XML和HTML文档&#xff1a;六大常用库功能对比 前言 在现代的Web开发中&#xff0c;处理XML和HTML文档是一个常见的任务。为了更加高效地解析和操作这些文档&#xff0c;开发人员通常会使用各种库和工具。本文将介绍几个流行的XML和HTML解析库&#xff0c;分别对其功能、…

wzoi.cc基数排序AC代码(含链接)

题目描述: 基数排序是一种并不基于关键字间比较和移动操作的排序算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。 通过对每一个关键字分别依次进行排序&#xff0c;可以令整个关键字序列得到完整的排序。 在本题中&#xff0c;读入一串16位&…

react native中依赖@react-native-clipboard/clipboard库实现文本复制以及在app中获取复制的文本内容

react native中依赖react-native-clipboard/clipboard库实现文本复制以及在app中获取复制的文本内容 第三方库 第三方库 react-native-clipboard 我的项目react native0.72 我使用react-native-clipboard/clipboard1.13.2 npm install --save react-native-clipboard/clipboa…

留学Essay写作能够顺利拿“A”吗?

对于留学生来说Essay难度不可谓不大&#xff0c;很多同学刚到国外留学的时候都会被Essay难倒一大片&#xff0c;可见Essay写作的难度&#xff0c;当然了&#xff0c;不乏有留学生会选择Essay写作&#xff0c;这其实也是无可厚非的。那么Essay写作想拿高分需要注意哪些呢&#x…

香橙派编译linux内核支持ebpf和虚拟WIFI

前言 上一篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)中说了怎么运行redroid&#xff0c;这篇补一下怎么修改参数编译内核。 补充 上篇文章有个内容需要补充一下&#xff1a;更新完内核需要用下面的命令防止内核被apt更新&#xff0c;不然后面使用apt update又回…

浅析C++引用

浅析C引用"&" ​ C中引入了一个新的语言特性——引用(&)&#xff0c;它表示某一对象的别名&#xff0c;对象与该对象的引用都是指向统一地址。那么我们就来看看关于引用的一些知识点吧&#x1f9d0; 特性 引用在定义时必须初始化一个变量可以有多个引用引…

【Tools】了解人工通用智能 (AGI):未来的智能体

什么是人工通用智能 (AGI)&#xff1f; 人工通用智能&#xff08;Artificial General Intelligence&#xff0c;AGI&#xff09;是指一种能够理解、学习和应用知识&#xff0c;具有像人类一样广泛和通用的认知能力的智能系统。与专门处理特定任务的人工智能&#xff08;AI&…

如何设计一个高可扩展的分布式架构?

如何设计一个高可扩展的分布式架构&#xff1f; 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言&#xff1a;分布式架构的重要性 随着互联网应用的发展&#xff0c;单一服务器往往难以满足…

【Python】一文向您详细介绍 np.inner()

【Python】一文向您详细介绍 np.inner() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;曾…

算法数据结构必备篇章2

文章目录 36. (必备)二叉树高频题目上37. (必备)二叉树高频题目下38. (必备)常见经典递归过程解析39. (必备)嵌套类问题的递归解题套路40. (必备)N皇后问题(含位运算求解)41. (必备)最大公约数, 同余原理42. (必备)对数器打表找规律的技巧43. (必备)根据数据量猜解法的技巧-天字…

6、Redis系统-数据结构-02-链表

二、List&#xff08;列表&#xff09; 1、List 数据结构的必要性 List 是一种有序的数据结构&#xff0c;可以按顺序存储多个字符串。它的主要特点如下&#xff1a; 有序性&#xff1a;List 中的元素是有序的&#xff0c;可以通过索引访问。双向操作&#xff1a;List 支持从…

JavaWeb系列二十二: 线程数据共享和安全(ThreadLocal)

韩顺平-线程数据共享和安全ThreadLocal 什么是ThreadLocal?ThreadLocal环境搭建ThreadLocal快速入门ThreadLocal源码阅读threadLocal.set()源码threadLocal.get()源码 什么是ThreadLocal? ThreadLocal的作用: 可以实现在同一个线程数据共享, 从而解决多线程数据安全问题.Thr…

小阿轩yx-Haproxy搭建Web群集

小阿轩yx-Haproxy搭建Web群集 Haproxy 简介 提供高可用性 能做出标准的负载均衡 支持虚拟主机 具备健康检查能力 能用于各式各样的代理 轻量级代理环境 解决方案优势 免费 快速 可靠 特性 特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或…

前端面试题24(css3)

下面是一些常见的 CSS3 面试题&#xff0c;这些问题可以帮助你评估应聘者对 CSS3 的掌握程度&#xff1a; 1. 解释 CSS3 中的动画关键帧&#xff08;keyframes&#xff09;和它们是如何工作的&#xff1f; 回答要点&#xff1a;keyframes 规则用于创建动画&#xff0c;它可以…

软件仓库及第三方软件仓库

一、本地软件仓库的搭建&#xff1a; 建立挂载目录&#xff1a; [rootlocalhost ~]# mkdir /rhel9 挂载镜像到/rhel9目录中 [rootlocalhost ~]# mount /dev/sr1 /rhel9/ mount: /rhel9: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# ls /rhel9/ A…

后端之路——文件本地上传

一、基础原理 文件上传是一个很基础的知识点&#xff0c;尤其是本地上传&#xff0c;在现实开发基本都是云上传&#xff0c;但是作为一个基础要简单了解一下 首先前端我就不多讲解了&#xff0c;网页开发里用<form>表单可以上传文件&#xff0c;只需要加上这三属性&…

pytest系列——pytest_runtest_makereport钩子函数获取测试用例执行结果

前言 pytest测试框架提供的很多钩子函数方便我们对测试框架进行二次开发&#xff0c;可以根据自己的需求进行改造。 例如&#xff1a;钩子方法&#xff1a;pytest_runtest_makereport &#xff0c;可以更清晰的了解测试用例的执行过程&#xff0c;并获取到每个测试用例的执行…

element Input 输入框 输入长度限制 maxlength=“10“默认输入长度提示颜色为红色

对于el-input&#xff0c;直接显示输入长度提示并上色并不直接支持&#xff0c;但我们可以用一些技巧来模拟这一效果。而对于el-textarea&#xff0c;虽然它没有直接的计数提示&#xff0c;但可以通过类似的技巧添加。 对于el-input <template><div class"inpu…

【AI原理解析】—线性回归原理

目录 一、定义与基本假设 二、参数估计 三、模型评估 四、假设检验 五、线性回归的变种 一、定义与基本假设 定义&#xff1a; 线性回归是一种通过建立一个或多个自变量&#xff08;解释变量&#xff09;与因变量&#xff08;响应变量&#xff09;之间的线性关系模型&…