7/1 uart

 uart4.c

#include "uart4.h"//UART4_RX ====> PB2
//UART4_TX ====> PG11char rebuf[51] = {0};
//rcc/gpio/uart4初始化
void hal_uart4_init()
{/********RCC章节初始化*******///1.使能GPIOB组控制器 MP_AHB4ENSETR[1] = 1RCC->MP_AHB4ENSETR |= (0x1 << 1);//2.使能GPIOG组控制器  MP_AHB4ENSETR[6] = 1RCC->MP_AHB4ENSETR |= (0x6 << 1);//3.使能UART4组控制器  MP_AHB4ENSETR[16] = 1	RCC->MP_AHB4ENSETR |= (0x1 << 16);/********GPIO章节初始化*******///1.将PB2和PG11设为复用功能模式GPIOB->MODER &= (~(0x3 << 4));//PB2GPIOB->MODER |= (0x2 << 4);GPIOG->MODER &= (~(0x3 << 22));//PG11GPIOG->MODER |= (0x2 << 22);//2.设置PB2和PG11引脚复用的功能GPIOB->AFRL &= (~(0xF << 8));//PB2GPIOB->AFRL |= (0x8 << 8);GPIOB->AFRH &= (~(0xF << 12));//PG11GPIOB->AFRH |= (0x6 << 12);/********UART章节初始化*******///1.设置初始化相关操作USART4->CR1 &= (~(0x1 << 12));USART4->CR1 &= (~(0x1 << 28));//设置8位数据位USART4->CR1 &= (~(0x1 << 15));//设置16倍采样率USART4->CR1 &= (~(0x1 << 10));//设置无校验位USART4->CR1 |= (0x1 << 3);//设置无发送位使能USART4->CR1 |= (0x1 << 2);//设置接收位使能USART4->CR1 |= 0x1;//设置串口使能//2.设置停止位USART4->CR2 &= (~(0x3 << 12));//设置串口位停止位//3.设置串口分频USART4->PRESC &= (~(0xF));//4.设置串口波特率USART4->BRR |= 0x22B;}//发送一个字符
void hal_put_char(const char str)
{//判断发送寄存器是否为空while(!(USART4->ISR) & (0x1 << 7)){USART4->TDR = str;}//判断是否发送完毕while(!(USART4->ISR) & (0x1 << 6)){return;	}}//发送一个字符串
void hal_put_string(const char* string)
{while(*string){hal_put_char(*string++);}hal_put_char('\n');hal_put_char('\r');
}//接收一个字符
char hal_get_char()
{char str = 0;//判断是否接收到数据while(!(USART4->ISR) &(0x1 << 5)){str = USART4->RDR;}return str;
}//接收一个字符串
char* hal_get_string()
{int i;for(i = 0;i < 50;i++){rebuf[i] = hal_get_char();hal_put_char(rebuf[i]);//判断是否接收完毕if(rebuf[i] == '\r'){break;}}rebuf[i] = '\0';hal_put_char('\n');hal_put_char('\r');return rebuf;}

uart4.h

#ifndef __UART4_H__
#define __UART4_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.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

main.c

#include "uart4.h"int main(){//串口初始化hal_uart4_init();//char str;char *string;while(1){//串口读取字符//str = hal_get_char();//将字符+1并发回去//hal_put_char(str+1);//串口读取字符串string = hal_get_string();//将字符串发回去hal_put_string(string);}return 0;}

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

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

相关文章

【C++11:右值引用,列表初始化】

统一列表初始化&#xff1a; 构造函数的函数名与函数体之间增加一个列表&#xff0c;用于对成员初始化 在实例化对象时&#xff0c;支持单/多参数的隐式转化&#xff0c;同时也可以省略符号&#xff0c;让代码更简洁 右值的引用 左值&#xff1a; 左值与右值的重要区别就是能…

全国产化飞腾模块BIOS下修复系统启动文件

1、背景介绍 全国产飞腾模块采用麒麟信安操作系统&#xff0c;当系统下面的grub.cfg文件被用户误操作导致无法启动时&#xff0c;可以在BIOS下通过U盘中备份的grub.cfg替换硬盘上原来的grub.cfg文件&#xff0c;从而实现启动。 2、操作步骤 首先进入BIOS命令行模式&#xff…

Meta低头,库克认错,XR回归第一性原理

图片&#xff5c;Photo by Maxim Hopman on Unsplash ©自象限原创 作者丨罗辑 2024年&#xff0c;XR的故事应该怎么讲&#xff1f; 如果从数据上看&#xff0c;这应该是个沉重的话题。 根据 IDC 报告&#xff0c;2023 年全球 VR 市场出货量下滑了 10.7%。2024 年第一…

【必看】卖惨营销

经常卖惨的人到底是什么心理&#xff1f; Berry Ni同学说&#xff1a; 吸引别人的注意力。想要得到关注。 让你降低对他的期待。 让你能够在他做好一件小事的情况下就表扬他。 控制你对他的想法认知。 ​ 浪矢心理同学说&#xff1a; 1&#xff0c;求关注。他觉得买惨有好处&…

【Excel、RStudio计算T检测的具体操作步骤】

目录 一、基础知识1.1 显著性检验1.2 等方差T检验、异方差T检验1.3 单尾p、双尾p1.3.1 检验目的不同1.3.2 用法不同1.3.3 如何选择 二、Excel2.1 统计分析工具2.1.1 添加统计分析工具2.1.2 数据分析 2.2 公式 -> 插入函数 -> T.TEST 三、RStudio 一、基础知识 参考: 1.…

Gradle学习-4 创建二进制插件工程

二进制插件工程创建有两种方式&#xff1a; 创建独立的工程&#xff0c;调试的时候&#xff0c;需要手动发布成一个二进制插件jar包&#xff0c;给其他工程里面引用&#xff0c;进行功能测试。这种方式是比较麻烦的。创建buildSrc子工程&#xff0c;它是一个大工程中的子工程&…

开源网安荣获第一新声“2024中国最佳信创安全厂商”,信创实力获认可

近日&#xff0c;由权威机构【第一新声】与【天眼查】联合发起的“2024中国最佳信创厂商系列榜单”评选中&#xff0c;开源网安以其技术创新能力和在信创领域持续投入&#xff0c;成功入选“中国最佳信创安全厂商”。 开源网安&#xff0c;作为软件安全领域创领者&#xff0c;自…

数据结构 - C/C++ - 栈

目录 结构特性 结构实现 结构容器 结构设计 顺序栈 链式栈 结构特性 栈(stack)是线性表的一种形式&#xff0c;限定仅在表的一端进行插入或者删除的操作。 栈顶 - 表中允许插入、删除的一端称为栈顶(top)&#xff0c;栈顶位置是可以发生变化的。 插入 - 进栈、入栈、压栈…

数据结构预科

在堆区申请两个长度为32的空间&#xff0c;实现两个字符串的比较【非库函数实现】 要求&#xff1a; 1> 定义函数&#xff0c;在对区申请空间&#xff0c;两个申请&#xff0c;主函数需要调用2次 2> 定义函数&#xff0c;实现字符串的输入&#xff0c;void input(char …

31 C++11

本节目标 c11简介列表初始化变量类型推导范围for循环新增加容器右值新的类功能可变参数模板 1. c11简介 在2003年标准委员会提交了一份计数勘误表&#xff08;简称TC1&#xff09;&#xff0c;使得c03这个名字已经取代了c98称为c11之前的最新的c标准名称。不过由于c03&#x…

JAVA学习笔记DAY12——MySQL基础

文章目录 数据库概述为什么要使用数据库相关概念关系型和非关系型RDBMS非RDBMS - NoSQL MySQL图形化管理工具Navicat SQL前后端环境nginx 反向代理MD5加密 数据库概述 为什么要使用数据库 持久化&#xff1a;指把数据保存到可掉电存储设备中&#xff0c;一般指将内存中的数据…

详解归一化、标准化、正则化以及batch normalization

文章目录 what(是什么)where&#xff08;用在哪&#xff09;How&#xff08;如何用&&原理&#xff09;归一化实现方式原理示例说明 标准化实现方式原理示例说明 正则化实现方式原理作用 Batch Normalizationpytorch中的batch normalization原理BN的作用 归一化、标准化…

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

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

【TB作品】智能台灯,ATMEGA16单片机,Proteus仿真

智能台灯 1 adc检测光强光敏电阻 显示电压 2 光强太高 也就是高于临界值 就关闭小灯 3 光强太低 也就是低于临界值 就打开小灯 3 按键修改临界值 显示 实验报告&#xff1a;基于ATMEGA16单片机的智能台灯设计与Proteus仿真 1. 实验背景 智能台灯是一种能够根据环境光强自动调…

代码随想录第40天|动态规划

完全背包 完全背包物品可以无限使用 01背包核心代码 01背包中的二维dp数组的两个for遍历可颠倒, 而一维dp数组的一定先遍历物品再遍历背包容量状态转移方程(背包容量一定为递减) 完全背包核心代码 (只在完全背包中一维dp数组嵌套顺序可颠倒, 实际题目需要确定遍历顺序) 状…

【高考志愿】建筑学

目录 一、专业介绍 1.1 专业定义 1.2 专业培养目标 1.3 核心课程 二、就业方向和前景 2.1 就业方向 2.2 专业前景 三、报考注意 四、行业趋势与未来展望 五、建筑学专业排名 一、专业介绍 1.1 专业定义 建筑学&#xff0c;这一充满艺术与科技魅力的学科&#xff0c;…

天线 有源 无源 参数

无源测试驻波比VSWR/回波损耗(Return Loss)≤2效率≥50%输入阻抗50R10%增益天线方向图3D场强图方向性 有源测试 OTA 传导测试&#xff1a;发射功率传导测试&#xff1a;接收灵敏度总辐射功率TRP(Total Radiated Power)≥发射功率减3dB总接收灵敏度TIS&#xff08;Total Isotrop…

JDBC1(JDBC相关类与接口 ​连接mysql数据库​ 测试 不同数据库厂商实现-MySQL和Oracle)

目录 一、JDBC 1. JDBC相关类与接口 1.1 DriverManager 1.2 Connection 1.3 Statement 4.ResultSet 2. JDBC工作原理 二、连接mysql数据库 1. 导入jar包 2. 使用DriverManager加载驱动类 3. Connection接口 4. Statement接口 5. ResultSet接口 ​编辑 6. 关闭并…

显卡简介

显卡是计算机系统中一个重要的组成部分&#xff0c;它负责处理图形和视频输出。显卡的性能直接影响到计算机的图形处理能力&#xff0c;因此在游戏、视频编辑、3D渲染等需要高性能图形处理的应用中&#xff0c;显卡的选择至关重要。本文将从显卡的基本概念、性能指标、市场现状…

【Node.JS】入门

文章目录 Node.js的入门涉及对其基本概念、特点、安装、以及基本使用方法的了解。以下是对Node.js入门的详细介绍&#xff1a; 一、Node.js基本概念和特点 定义&#xff1a;Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使得JavaScript能够运行在服务器…