(ARM)7/5

news2024/11/27 4:18:40

1.串口发送单个字符

2.串口发送字符串

uart4.h

#ifndef __UART4_H__
#define __UART4_H__

#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"


//初始化相关操作
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(char* arr);

uart4.c

#include "uart4.h"

//初始化相关操作
void hal_uart4_init()
{
	//----------RCC章节初始化----------//
	//(GPIOB,GPIOG,UART4)
	RCC->MP_AHB4ENSETR |= (0x1 << 1);
	RCC->MP_AHB4ENSETR |= (0x1 << 6);
	RCC->MP_APB1ENSETR |= (0x1 << 16);

	//---------GPIO章节初始化----------//
	//PB2引脚设置复用功能模式
	GPIOB->MODER &= (~(0x3 << 4));
	GPIOB->MODER |= (0x2 << 4);
	//设置为RX
	GPIOB->AFRL &= (~(0xf << 8));
	GPIOB->AFRL |= (0x8 << 8);

	//PG11引脚设置复用功能模式
	GPIOG->MODER &= (~(0x3 << 22));
	GPIOG->MODER |= (0x2 << 22);
	//设置为TX
	GPIOG->AFRH &= (~(0xf << 12));
	GPIOG->AFRH |= (0x6 << 12);

	//----------UART章节初始化----------//
	//设置串口UE = 0
	USART4->CR1 &= (~(0x1));

	//数据位宽度(1个起始位,8个数据位,n个停止位)
	USART4->CR1 &= (~(0x1 << 12));
	USART4->CR1 &= (~(0x1 << 28));

	//采样率(16倍)
	USART4->CR1 &= (~(0x1 << 15));

	//无奇偶校验
	USART4->CR1 &= (~(0x1 << 10));

	//接收器使能
	USART4->CR1 |= (0x1 << 2);

	//发射器使能
	USART4->CR1 |= (0x1 << 3);

	//设置1位停止位
	USART4->CR2 &= (~(0x3 << 12));

	//设置串口不分频
	USART4->PRESC &= (~(0xf));

	//设置串口波特率为115200
	USART4->BRR = 0x22b;

	//设置串口使能
	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)
{
	hal_put_char('\n');
	while(*string != '\0')
	{
		//判断发送寄存器是否为空
		while(!(USART4->ISR & (0x1 << 7)));

		//将发送的内容赋值给发送寄存器
		USART4->TDR = *string;
		string++;

		//判断一帧数据是否发送完成
		while(!(USART4->ISR & (0x1 << 6)));
	}
	hal_put_char('\r');
	hal_put_char('\n');
}

/*
//接收一个字符
char hal_get_char()
{
	//判断接收数据寄存器中是否有数据
	while(!(USART4->ISR & (0x1 << 5)));

	//将接收数据寄存器中的数据读取出来
	char str = USART4->RDR;
	return str;
}
*/

//接收一个字符串
char* hal_get_string(char* arr)
{
	//循环进行接收
	//当键盘输入回车之后,代表字符串输出完成
	char *p = arr;
	while(1)
	{
		while(!(USART4->ISR & (0x1 << 5)));
		*p = USART4->RDR;
		hal_put_char(*p);
		while(!(USART4->ISR & (0x1 << 6)));
		if(*p == '\r')
			break;
		p++;
	}
	*p = '\0';
	return arr;
}

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()
{
	char arr[20] = "";
	hal_uart4_init();      //初始化
	while(1)
	{
		//hal_put_char(hal_get_char()+1);      //单个字符
		hal_put_string(hal_get_string(arr));   //字符串
	}
	return 0;
}

实验现象

 

 

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

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

相关文章

uniapp学习之【uniapp的返回事件 onBackPress 在微信小程序中不生效的问题】

uniapp 的返回事件 onBackPress 在微信小程序中不生效的问题 场景&#xff1a;页面中点击左上角的返回按钮,监听返回操作,页面返回前执行了一些操作, uniapp 页面生命周期中有 onBackPress ,因此将操作写在了 onBackPress () 页面生命周期钩子当中, H5 测试一切正常,但是微信开…

7、架构:模板设计

在低代码开发中&#xff0c;除了基础组件与物料之外&#xff0c;模板也是必不可少的模块&#xff0c;是基于物料之上的更高级的产物&#xff0c;除了具备业务属性之外会更偏向专属的技术领域&#xff0c;例如可视化大屏、数据分析、中台管理等。 此外模板通常是比较完整的应用…

k8s Label 2

在 k8s 中&#xff0c;我们会轻轻松松的部署几十上百个微服务&#xff0c;这些微服务的版本&#xff0c;副本数的不同进而会带出更多的 pod 这么多的 pod &#xff0c;如何才能高效的将他们组织起来的&#xff0c;如果组织不好便会让管理微服务变得混乱不堪&#xff0c;杂乱无…

作物计数方法汇总

在研究农情的方向中&#xff0c;作物计数是一个很重要的方向&#xff0c;需要用到很多方法&#xff0c;这里做一个小小的总结 (1)地理栅格数据(tif图片)裁剪并生成带地理坐标的切片 如图需要将下图所示的tif图裁剪并生成切片&#xff08;截图一部分&#xff09; 源码来自&…

微服务 02-rabbitmq在springboot中如何使用(上篇)

目录 前言: 上文传送 -> 安装rabbitmq传送门: -> rabbitmq使用出现问题解决传送门: 1. rabbitmq的六大模式: 1.1 简单模式: (一对一) -> 业务场景: 1.2 工作模式: (一对多) -> 业务场景: 1.3 发布与订阅模式: (广播) 1.4 路由模式: -> 业务场景 …

计算机系统的层次结构

计算机系统 计 算 机 系 统 { 计 算 机 软 件 { 系 统 软 件 应 用 软 件 计 算 机 硬 件 { 存 储 器 运 算 器 控 制 器 输 入 设 备 输 出 设 备 计算机系统 \begin{cases} 计算机软件\begin{cases}系统软件\\应用软件\end{cases}\\计算机硬件\begin{cases}存储器\\运算器\…

YoloV8改进---注意力机制:引入瓶颈注意力模块BAM,对标CBAM

目录 ​编辑 1.BAM介绍 2.BAM引入到yolov8 2.1 加入modules.py中&#xff1a; 2.2 加入tasks.py中&#xff1a; 2.3 yolov8_BAM.yaml 1.BAM介绍 论文&#xff1a;https://arxiv.org/pdf/1807.06514.pdf 摘要&#xff1a;提出了一种简单有效的注意力模块&#xff0c;称为瓶颈…

06、Nginx反向代理与负载均衡

反向代理&#xff1a; 这种代理方式叫做&#xff0c;隧道代理。有性能瓶颈&#xff0c;因为所有的数据都经过Nginx&#xff0c;所以Nginx服务器的性能至关重要 负载均衡&#xff1a; 把请求&#xff0c;按照一定算法规则&#xff0c;分配给多台业务服务器&#xff08;即使其中…

【论文笔记】Skill-based Meta Reinforcement Learning

【论文笔记】Skill-based Meta Reinforcement Learning 文章目录 【论文笔记】Skill-based Meta Reinforcement LearningAbstract1 INTRODUCTION2 RELATED WORKMeta-Reinforcement LearningOffline datasetsOffline Meta-RLSkill-based Learning 3 PROBLEM FORMULATION AND PRE…

CPU大小端和网络序的理解

引子 Big/Little Endian是Host CPU如何去理解在内存中的数据&#xff0c;内存中的数据是没有Big/Little Endian之分的&#xff08;内存仅仅作为存储介质&#xff09;&#xff0c;而Host CPU才有Big/Little Endian之分。 不同Endian的CPU&#xff0c;从内存读取数据的时候&#…

Linux进度条

Linux进度条 一.基本概念1.回车和换行2.缓冲区2.实现倒计时 二.进度条1.前置工作2.代码实现 一.基本概念 1.回车和换行 回车&#xff1a;指光标移到该行的起始位置&#xff08;\r&#xff09;。 换行&#xff1a;换到下一行&#xff08;\n&#xff09;。 在c语音里\n将回车和换…

spring.boot 随笔0 springFactoriesInstance入门

0. 其实也没有那么入门 明天还要上班&#xff0c;速度write&#xff0c;直接放一张多样性比较好的 spring.factories 文件(取自 spring-boot-2.3.4.RELEASE.jar) # PropertySource Loaders org.springframework.boot.env.PropertySourceLoader\ org.springframework.boot.env…

知识图谱实战应用19-基于Py2neo的英语单词关联记忆知识图谱项目

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用19-基于Py2neo的英语单词关联记忆知识图谱项目。基于Py2neo的英语单词关联记忆知识图谱项目可以帮助用户更系统地学习和记忆英语单词,通过图谱的可视化展示和智能推荐功能,提供了一种全新的、更高效的记忆方法,并促进…

AtomicInteger使用详解

AtomicInteger使用详解 1、get()&#xff1a;获取当前AtomicInteger对象的值。2、set(int newValue)&#xff1a;将AtomicInteger对象的值设置为指定的newValue。3、getAndSet(int newValue)&#xff1a;先获取当前AtomicInteger对象的值&#xff0c;然后将对象的值设置为指定的…

ROS1/2机器人课程的价值和规模

价值用价格&#xff0c;规模用销量。 免费的ROS1/2课程也很多。 2023版&#xff0c;15元&#xff0c;24人。 2022版&#xff0c;1.99元&#xff0c;21人。 价格不贵&#xff0c;人数很少&#xff0c;店家也很少。 当然&#xff0c;有朋友说&#xff0c;有免费冲击&#xff0…

宏晶微 音频处理芯片 MS7124

MS7124是一款高性能24bit数字立体声音频DAC&#xff0c;该DAC采用Sigma-Delta结构&#xff0c;支持标准的I2S数字信号输入&#xff0c;输出支持立体声和单声道。

比对Excel数据

以a个为准绳比对b表数据&#xff0c;添加比对结果列输出。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么…

大数据Doris(五十七):RECOVER数据删除恢复

文章目录 RECOVER数据删除恢复 一、Recover语法 二、数据恢复案例 RECOVER数据删除恢复 Doris为了避免误操作造成的灾难&#xff0c;支持对误删除的数据库/表/分区进行数据恢复&#xff0c;在drop table或者 drop database之后&#xff0c;Doris不会立刻对数据进行物理删除…

C语言进阶--文件操作

目录 一.何为文件 二.文件名 三.文件的打开和关闭 3.1.流 3.2.文件指针 3.3.文件的打开与关闭 打开文件&#xff1a; 模式&#xff1a; 关闭文件&#xff1a; 四.文件的顺序读写 4.1.常见的顺序读写函数 4.2.字符的输入输出fgetc/fputc 输出函数&#xff1a; 输入…

计算机存储层次及常用存储简介

计算机存储层次&#xff08;Memory hierarchy&#xff09; 存储层次是在计算机体系结构下存储系统层次结构的排列顺序。 每一层于下一层相比 都拥有 较高的速度 和 较低延迟性 &#xff0c;以及 较小的容量 &#xff08;也有少量例外&#xff0c;如AMD早期的Duron CPU&#xf…