0701_ARM5

练习:使用usart4
main.c

#include "uart4.h"int main()
{// 初始化 UART4hal_uart4_init();while (1) {// 发送一个字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0;
}

usart4.c

#include "uart4.h"//******引脚PB2读取 PG11写入*****//rcc,gpio,uart,初始化
void hal_uart4_init(){//rcc章节初始化//1.使能GPIOB组控制器RCC->MP_AHB4ENSETR |= (0X1<<1);//2.是能GPIOG组控制器RCC->MP_AHB4ENSETR |= (0X1<<6);//3.是能UART4控制器RCC->MP_APB1ENSETR |= (0x1<<16);//GPIO章节初始化//1.GPIOB_MODE寄存器初始化  设置对应引脚模式功能 复用功能GPIOB->MODER &= ~(0x3<<4);     //MODER默认为0xffffffff 先将4,5为清零GPIOB->MODER |= (0x2<<4);//2.GPIOG_MODE寄存器初始化  设置对应引脚模式功能 复用功能GPIOG->MODER &= ~(0x3<<22);     GPIOG->MODER |= (0x2<<22);//3.GPIOB_AFRL寄存器设置对应引脚复用功能GPIOB->AFRL &= ~(0x0f<<8);GPIOB->AFRL |= (0x8<<8);       //AFRL默认为0x00000000 所以这里直接按位|//4.GPIOG_AFRH寄存器设置对应引脚复用功能GPIOG->AFRH &= ~(0x0f<<12);GPIOG->AFRH |= (0x6<<12);       //PG11在AFRH寄存器中//UART章节初始化//1.USART4串口控制寄存器初始化//USART4_CR1初始值为0x00000000//1.8位数据位USART4->CR1 &= ~(0x1<<12);USART4->CR1 &= ~(0x1<<28);//2.16倍采样率USART4->CR1 &= ~(0X1<<15);//3.无校验位USART4->CR1 &= ~(0X1<<10);//4.设置发送和接收使能USART4->CR1 |= (0x6<<1);//USART4_CR2寄存器 设置停止位//USART4_CR2 默认值 0x00000000//5.1个停止位USART4->CR2 &= ~(0X3<<12);//6.设置波特率USART4->BRR = 0X22B;//7.设置串口使能USART4->CR1 |= 0x1;//USART4_PRESC 寄存器设置串口分配//USART4_PRESC初始值位0x00000000//8.不分频USART4->PRESC &= ~(0x0f);}
//发送字符
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++);}
}
//接收字符
char hal_get_char(){//判断接收数据是否为空char c=0;while(!(USART4->ISR & (0X1<<5))){}c=USART4->RDR;return c;
}
// 接收字符串
char* hal_get_string(){static char str[128]; // 使用静态变量以保持内容int i = 0;for(i = 0; i < 127; i++){ // 确保有空间存放'\0'str[i] = hal_get_char();if(str[i] == '\n' || str[i]=='\r'){ // 也考虑回车作为结束符break;}}str[i] = '\0'; // 确保字符串以null结尾return str;
}

usart4.h

#ifndef __UART4_H__
#define  __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"
//rcc,gpio,uart,初始化
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

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

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

相关文章

【云WAF为您的Web防御保驾护航】

在这个数字时代&#xff0c;网络就像是一张没有尽头的大网&#xff0c;将整个世界都联系在了一起。但是&#xff0c;在这个网络的背后&#xff0c;却潜藏着数不清的安全隐患。恶意攻击、数据泄漏、网站瘫痪……各种隐患就像是隐藏在暗处的毒蛇&#xff0c;时刻都会对没有任何防…

金蝶云苍穹-插件开发(一)加载数据

前言 此系列博客是进行金蝶云苍穹开发时的插件开发的教程&#xff0c;一是在明年要是还要参加软件杯金蝶A6赛题的话&#xff0c;可以看此系列教程的博客来进行复习&#xff0c;同时如果要是我实验室的学弟学妹要参加的话&#xff0c;我这个系列的博客可以给他们提供学习参考&a…

破解宇宙终极奥秘,战胜昊天无上束缚

在幽邃的暗夜下&#xff0c;细品着夫子与昊天跨越千年的智勇交锋&#xff0c;我的思绪不禁飘向了更加深远的宇宙边际&#xff0c;回响起那些关于人类如何挑战天命、战胜上天的过往。 宇宙奥秘 在浩瀚无垠的宇宙深渊中&#xff0c;隐藏着一段超越凡尘的规则。昊天&#xff0c;…

2024/7/6 英语每日一段

More than half of late-teens are specifically calling for more youth work that offers “fun”, with older teenagers particularly hankering for more jollity, according to a study carried out by the National Youth Agency. One in 10 said they have zero option…

【Go】excelize库实现excel导入导出封装(四),导出时自定义某一列或多列的单元格样式

大家好&#xff0c;这里是符华~ 查看前三篇&#xff1a; 【Go】excelize库实现excel导入导出封装&#xff08;一&#xff09;&#xff0c;自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头 【Go】excelize库实现excel导入导出封装&#xff08;二&…

AI Earth应用—— 在线使用sentinel数据VV和VH波段进行水体提取分析(昆明抚仙湖、滇池为例)

AI Earth 本文的主要目的就是对水体进行提取,这里,具体的操作步骤很简单基本上是通过,首页的数据检索,选择需要研究的区域,然后选择工具箱种的水体提取分析即可,剩下的就交给阿里云去处理,结果如下: 这是我所选取的一景影像: 详情 卫星: Sentinel-1 级别: 1 …

新产品或敏捷项目过程 SOP,附带流程图及流程规范

一、项目启动 项目背景和目标明确 市场调研结果分析&#xff0c;确定新产品的需求和市场机会。制定明确的项目目标&#xff0c;包括产品特性、上市时间、预期收益等。 组建项目团队 确定项目经理、产品经理、开发人员、测试人员、市场人员等角色。明确各成员的职责和权限。 项目…

Java语言程序设计基础篇(第10版)编程练习题13.18(使用 Rational 类)

第十三章第十八题(使用 Rational 类) 题目要求&#xff1a; 编写程序&#xff0c;使用 Rational 类计算下面的求和数列: 你将会发现输出是不正确的 &#xff0c;因为整数溢出(太大了)。为了解决这个问题 &#xff0c;参见编程练习題13.15。代码参考&#xff1a; package cha…

蜂窝物联农业气象站,守护丰收每一步

现代农业的革新者——农业自动气象站&#xff0c;正以其多功能的传感器、高效的数据采集传输系统、智能的数据云平台以及可靠的供电供网系统&#xff0c;成为农业生产中的得力助手。这些传感器能够实时监测温度、湿度、风速、风向、气压、土壤温度、土壤湿度、土壤PH值、土壤盐…

CorelDRAW2024新版本来咯!你的设计神助手

&#x1f389; 设计界的朋友们&#xff0c;注意啦&#xff01;你们的新宠——CorelDRAW 2024 来咯&#xff01; &#x1f31f; 一、设计神器再进化 亲爱的设计小伙伴们&#xff0c;有没有感觉每天与那些不配合的软件战斗&#xff0c;像是在打怪升级&#xff1f;&#x1f409; …

Selenium的这些自动化测试技巧你知道几个?

Selenium自动化测试技巧 与以前瀑布式开发模式不同&#xff0c;现在软件测试人员具有使用自动化工具执行测试用例套件的优势&#xff0c;而以前&#xff0c;测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试&#xff0c;而是最大程度地减少…

js的作用域链

function test(){} 运行期上下文&#xff1a;当函数执行时&#xff0c;会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境&#xff0c;函数每次执行时对应的执行上下文都是 独一无二的&#xff0c;所以多次调用一个函数对导致创建多个执行上下…

leetcode力扣_排序问题

215.数组中的第K个最大元素 鉴于已经将之前学的排序算法忘得差不多了&#xff0c;只会一个冒泡排序法了&#xff0c;就写了一个冒牌排序法&#xff0c;将给的数组按照降序排列&#xff0c;然后取nums[k-1]就是题目要求的&#xff0c;但是提交之后对于有的示例显示”超出时间限制…

谷粒商城学习笔记-12-开发工具环境安装配置

文章目录 一&#xff0c;JDK的安装1.进入官网下载2&#xff0c;jdk安装3&#xff0c;Java环境验证 二&#xff0c;Idea安装插件1&#xff0c;lombok2&#xff0c;MybatisX 三&#xff0c;Maven的下载与配置1&#xff0c;下载Maven2&#xff0c;Idea配置Maven3&#xff0c;maven…

ESP32CAM物联网教学05

ESP32CAM物联网教学05 超级监控摄像头 点灯科技APP还能查看摄像头的视频呢&#xff01;这样&#xff0c;小智的物联网小车就变身成为超级监控摄像头啦。 测试摄像头视频图像 我们把前面的物联网小车的程序稍作修改&#xff0c;增加了摄像头的程序&#xff0c;去掉了按键组件程…

RocketMQ-订阅一致及解决方案

背景 这里借用Rocketmq官方的一句话来描述订阅关系一致: 订阅关系一致指的是同一个消费者分组Group ID下&#xff0c;所有Consumer实例所订阅的Topic和Tag必须完全一致。如果订阅关系不一致&#xff0c;可能导致消息消费逻辑混乱&#xff0c;消息被重复消费或遗漏。 具体的问题…

关于GIS的概念方面在前端编程中的理解

关于GIS的概念方面在前端编程中的理解 一. 什么是gis二. 关于地球的建模(了解)三. GIS坐标系表现形式四.GIS的数据4.1 矢量数据4.2 栅格数据4.3 矢量数据和栅格数据的不同 一. 什么是gis 地理坐标系统&#xff0c;其目的就是通过地理坐标系可以确定地球上任何一点的位置。 二. …

jenkins配置gitee源码地址连接不上

报错信息如下&#xff1a; 网上找了好多都没说具体原因&#xff0c;最后还是看jenkins控制台输出日志发现&#xff1a; ssh命令执行失败&#xff08;git环境有问题&#xff0c;可能插件没安装成功等其他问题&#xff09; 后面发现是jenkins配置git的地方git安装路径错了。新手…

215. 数组中的第K个最大元素(中等)

215. 数组中的第K个最大元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;215. 数组中的第K个最大元素 2.详细题解 快速排序算法在每一轮排序中&#xff0c;随机选择一个数字 x x x&#xff0c;根据与 x x x的大小关系将要排序的数…

设计小能手必备!CorelDRAW2024新功能大揭秘

&#x1f389; 设计小能手必备&#xff01;CorelDRAW 2024新功能大揭秘 嗨&#xff0c;亲爱的小红书的朋友们&#xff5e;&#x1f44b; 今天我要和大家安利一款让设计师们疯狂打call的设计软件——CorelDRAW 2024&#xff01;&#x1f31f; 作为一名资深的设计师&#xff0c;我…