7.1作业6

news2024/11/25 19:38:51

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=0
    USART4->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);
    //设置串口波特率115200
    USART4->BRR=0X22b;
    //串口使能 UE=1
    USART4->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.coloradmin.cn/o/1897989.html

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

相关文章

探索Sui的面向对象模型和Move编程语言

Sui区块链作为一种新兴的一层协议&#xff08;L1&#xff09;&#xff0c;采用先进技术来解决常见的一层协议权衡问题。Cointelegraph Research详细剖析了这一区块链新秀。 Sui使用Move编程语言&#xff0c;该语言专注于资产表示和访问控制。本文探讨了Sui的对象中心数据存储模…

滑动窗口(C++)

文章目录 1、长度最小的子数组2、无重复字符的最长子串3、最大连续1的个数 Ⅲ4、将x减到0的最小操作数5、水果成篮6、找到字符串中所有字母异位词7、串联所有单词的子串8、最小覆盖子串 通常&#xff0c;算法的主体说明会放在第一道题中。但实际上&#xff0c;不通常。 算法在代…

Solr安装IK中文分词器

Solr安装IK中文分词器 如何安装Solr与导入数据&#xff1f;为什么要安装中文分词器下载与安装IK分词器1.1、下载IK分词器1.2、安装IK  第一步&#xff1a;非常简单&#xff0c;我们直接将在下的Ik分词器的jar包移动到以下文件夹中  第二步&#xff1a;修改Core文件夹名下\c…

代理设计模式和装饰器设计模式的区别

代理设计模式: 作用:为目标(原始对象)增加功能(额外功能,拓展功能) 三种经典应用场景: 1&#xff1a;给原始对象增加额外功能(spring添加事务,Mybatis通过代理实现缓存功能等等) 2&#xff1a;远程代理&#xff08;网络通信&#xff0c;输出传输&#xff08;RPC&#xff0c;D…

Motion Guidance: 扩散模型实现图像精确编辑的创新方法

在深度学习领域&#xff0c;扩散模型&#xff08;diffusion models&#xff09;因其能够根据文本描述生成高质量图像而备受关注。然而&#xff0c;这些模型在精确编辑图像中对象的布局、位置、姿态和形状方面仍存在挑战。本文提出了一种名为“运动引导”&#xff08;motion gui…

图书馆数据仓库

目录 1.数据仓库的数据来源为业务数据库&#xff08;mysql&#xff09; 初始化脚本 init_book_result.sql 2.通过sqoop将mysql中的业务数据导入到大数据平台&#xff08;hive&#xff09; 导入mysql数据到hive中 3.通过hive进行数据计算和数据分析 形成数据报表 4.再通过sq…

如何取消闪迪Micro SD卡的写保护?这个技巧很有效!

由于受写保护影响&#xff0c;无法格式化闪迪Micro SD卡&#xff1f;别担心&#xff01;通过本文你可以学习如何解除闪迪Micro SD卡的写保护。 我的闪迪SD卡有写保护怎么办&#xff1f; “我打算格式化我的闪迪SD卡。但当我进行格式化时&#xff0c;提示我磁盘被写保护。我想用…

Linux配置固定ip地址

虚拟机的Linux操作系统&#xff0c;其IP地址是通过DHCP服务获取的 DHCP&#xff1a;动态获取IP地址&#xff0c;即每次重启设备后都会获取一次&#xff0c;可能导致IP地址频繁变更。 一般系统默认的ip地址设置都是自动获取&#xff0c;故每次系统重启后ip地址都可能会不一样&a…

数字化产科管理平台全套源码,java产科电子病历系统源码

数字化产科管理平台全套成品源码&#xff0c;产科电子病历系统源码&#xff0c;多家大型妇幼专科医院应用案例。源码完全授权交付。 数字化产科管理平台&#xff08;智慧产科系统&#xff09;是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天以内的一…

欢乐钓鱼大师攻略:西沙群岛攻略,内置自动辅助云手机!

《欢乐钓鱼大师》是一款以钓鱼为主题的休闲游戏&#xff0c;玩家可以在虚拟的钓鱼世界中体验真实的钓鱼乐趣&#xff0c;并通过捕捉各种珍稀鱼类来提升自己的钓鱼技能和成就。在这篇攻略中&#xff0c;我们将重点介绍如何在西沙群岛区域有效地捕捉各种典藏鱼类&#xff0c;并提…

数据结构之顺序表专题

在学习数据结构之前我们要先了解什么是数据结构&#xff1f; 1.数据结构相关概念 1.什么是数据结构&#xff1f; 数据结构是由“数据”和“结构”两词组合而来。 什么是数据?常见的数值1、2、3、4.、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以…

Qt项目:基于Qt实现的网络聊天室---注册模块

文章目录 基本页面设计创建登录界面创建注册界面优化样式完善注册类界面 客户端逻辑完善客户端增加post逻辑客户端配置管理 邮箱注册服务认证服务读取配置邮箱验证服务联调设置验证码过期封装redis操作类封装redis连接池注册功能Server端接受注册请求封装mysql连接池封装DAO操作…

传统视觉Transformer的替代者:交叉注意力Transformer(CAT)

传统视觉Transformer的替代者:交叉注意力Transformer(CAT) 在深度学习的世界里,Transformer架构以其在自然语言处理(NLP)领域的卓越表现而闻名。然而,当它进入计算机视觉(CV)领域时,却面临着计算成本高昂和推理速度慢的双重挑战。现在,一项革命性的创新——交叉注意…

【Linux】—VMware安装Centos7步骤

文章目录 前言一、虚拟机准备二、CentOS7操作系统安装 前言 本文介绍VMware安装Centos7步骤。 软件准备 软件&#xff1a;VMware Workstation Pro&#xff0c;直接官网安装。镜像&#xff1a;CentOS7&#xff0c;镜像官网下载链接&#xff1a;https://vault.centos.org/&#x…

[SAP ABAP] 子例程

子例程 示例1 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 示例2 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 补充扩展练习 主程序(Z437_TEST_2024) INCLUDE文件(Z437_TEST_2024_F01) 输出结果如下所示 提示…

使用Rough.js库在画布上绘制一只毛毛虫

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 代码应用场景介绍 本代码使用Rough.js库在画布上绘制一只毛毛虫。 代码基本功能介绍 初始化画布&#xff1a; 使用Rough.js库创建画布&#xff0c;并设置画布尺寸。 绘制毛毛虫身体&#xff1a; 使用椭圆形和…

【C++】 解决 C++ 语言报错:未定义行为(Undefined Behavior)

文章目录 引言 未定义行为&#xff08;Undefined Behavior, UB&#xff09;是 C 编程中非常危险且难以调试的错误之一。未定义行为发生时&#xff0c;程序可能表现出不可预测的行为&#xff0c;导致程序崩溃、安全漏洞甚至硬件损坏。本文将深入探讨未定义行为的成因、检测方法…

上千套源码分享免费(师哥师姐毕设分享)

项目管理平台详解 项目管理平台是专为项目管理者设计的系统软件&#xff0c;旨在在有限的资源约束下&#xff0c;通过系统的观点、方法和理论&#xff0c;对项目涉及的全部工作进行有效管理。这种平台不仅有助于项目从投资决策到结束的全程计划、组织、指挥、协调、控制和评价…

html纯原生网页引入vue3版本的quill editor

效果图 版本 vueup/vue-quill v1.2.0vue3.3.8Element Plus v2.4.2 引入流程 找一个vue3的项目, 然后安装插件vue版本的quill: vue-quill npm install vueup/vue-quill --save官方地址&#xff1a;https://vueup.github.io/vue-quill/ 安装完成之后&#xff0c;把vue-quil插件下…

[单master节点k8s部署]18.监控系统构建(三)Grafana安装

Grafana是一个跨平台的开源的度量分析和可视化工具。支持多种数据源&#xff0c;比如OpenTSDB&#xff0c;Prometheus&#xff0c;ElasticResearch&#xff0c;Cloudwatch等。 Grafana安装 通过yaml配置grafana的pod和service&#xff0c;grafana工作在kube-system的命名空间…