7/1 uart

 uart4.c

#include "uart4.h"

//UART4_RX ====> PB2
//UART4_TX ====> PG11

char rebuf[51] = {0};
//rcc/gpio/uart4初始化
void hal_uart4_init()
{
	/********RCC章节初始化*******/
	//1.使能GPIOB组控制器 MP_AHB4ENSETR[1] = 1
	RCC->MP_AHB4ENSETR |= (0x1 << 1);

	//2.使能GPIOG组控制器  MP_AHB4ENSETR[6] = 1
	RCC->MP_AHB4ENSETR |= (0x6 << 1);

	//3.使能UART4组控制器  MP_AHB4ENSETR[16] = 1	
	RCC->MP_APB1ENSETR |= (0x1 << 16);

	/********GPIO章节初始化*******/
	//1.将PB2和PG11设为复用功能模式
	GPIOB->MODER &= (~(0x3 << 4));//PB2
	GPIOB->MODER |= (0x2 << 4);

	GPIOG->MODER &= (~(0x3 << 22));//PG11
	GPIOG->MODER |= (0x2 << 22);

	//2.设置PB2和PG11引脚复用的功能
	GPIOB->AFRL &= (~(0xF << 8));//PB2
	GPIOB->AFRL |= (0x8 << 8);

	GPIOB->AFRH &= (~(0xF << 12));//PG11
	GPIOB->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.mfbz.cn/a/763817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“论单元测试方法及应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 1、概要叙述你参与管理和开发的软件项目,以吸你所担的主要工作。 2、结给你参与管理和开发的软件项目&#xff0c;简要叙述单元测试中静态测试和动态测试方法的基本内容。 3、结给你惨与管理和研发的软件项目,体阐述在玩测试过程中,如何确定白盒测试的覆盖标准,及如…

YOLO在目标检测与视频轨迹追踪中的应用

YOLO在目标检测与视频轨迹追踪中的应用 引言 在计算机视觉领域&#xff0c;目标检测与视频轨迹追踪是两个至关重要的研究方向。随着深度学习技术的飞速发展&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;的广泛应用&#xff0c;目标检测与视频轨迹追踪的性能得到…

WAIC | 斯梅尔数学与计算研究院邀您莅临WAIC 2024“数学与人工智能”论坛

当我们谈论起人工智能这一变革性力量时&#xff0c;就不得不提及数学。人工智能作为当今社会的热门话题&#xff0c;从AlphaGo到ChatGPT&#xff0c;从智能制造到数字文旅&#xff0c;它的发展和应用深刻地影响着行业和人们的生活。然而&#xff0c;人工智能的发展和基础离不开…

怎么把视频字幕提取出来?一招教你提取视频字幕

想必大家一定很有同感吧&#xff0c;视频已成为我们获取知识与新闻的主要渠道。 面对如此众多的视频资源&#xff0c;如何迅速筛选出核心信息并进行有效管理&#xff0c;成为了一项迫切需要解决的问题。 视频字幕提取翻译软件的问世&#xff0c;利用尖端的语音识别技术&#…

Kimi 上下文缓存功能开启公测!降低使用费用,加快模型相应速度

7月2日&#xff0c;系统之家发布消息&#xff0c;月之暗面科技有限公司旗下的Kimi开放平台正式推出上下文缓存功能&#xff0c;并已开放公测。这项功能专为处理频繁请求和大量重复引用初始上下文的场景设计&#xff0c;能有效降低使用长文本模型的成本&#xff0c;并显著提升处…

森林防火气象站:守护森林安全的科技利器

在广袤无垠的森林中&#xff0c;火灾一直是威胁森林生态安全的重要因素。为了有效预防和控制森林火灾&#xff0c;科学家们不断研发新技术&#xff0c;而森林防火气象站正是这一领域的重要成果之一。其中&#xff0c;森林防火气象站凭借其强大的功能和独特的设计&#xff0c;在…

laravel对接百度智能云 实现智能机器人

创建API Key和 Secret Key进入网址&#xff1a;百度智能云千帆大模型平台 如下图操作&#xff1a; 填写完毕点击确认后&#xff0c;即可得到sk和ak 后端接口实现代码&#xff1a; //调用百度智能云第三方机器人接口public function run($text) {$curl curl_init();curl_setop…

【基于R语言群体遗传学】-2-模拟基因型(simulating genotypes)

书接上文&#xff0c;我们昨天讨论了遗传的哈代温伯格比例&#xff1a; 【基于R语言群体遗传学】-1-哈代温伯格基因型比例-CSDN博客 接下来&#xff0c;如果我们能够模拟一个过程并观察模拟结果与我们预期的是否相符&#xff0c;这通常有助于指导我们对这个过程的直观感觉。让…

工业读码器与商用扫码器的区别

条码二维码在数字信息化应用越来越广泛&#xff0c;扫码器成为了数据收集和处理的重要工具&#xff0c;无论是工厂生产和物流包裹朔源追踪&#xff0c;还是商场超市扫码收银和餐饮娱乐等场景&#xff0c;均能看到扫码器的辅助&#xff0c;市场上的扫码器种类繁多&#xff0c;在…

C++修饰符类型

一、存储类运算符 auto&#xff08;自动存储类&#xff0c;但在现代C中&#xff0c;它通常用于自动类型推导&#xff09; register&#xff08;建议编译器将变量存储在寄存器中&#xff0c;但现代编译器通常忽略此关键字&#xff09; static&#xff08;静态存储类&#xff…

AD20使用操作Part2

元件的放置 在原理图界面&#xff0c;在右下角&#xff0c;Panels 选择Components 在自己元件库直接拖过来&#xff0c;放到原理图。 器件的复制和对齐 双击边缘&#xff0c;更改为A3纸 画方格&#xff0c;把元件给规划&#xff1a;放置——绘图工具——线 Shift空格&am…

【linux网络(七)】数据链路层详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. 认识MAC…

Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了

新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死&#xff0c;鼠标和键盘都操作不了 大概原因就是,初始化默认Google的安卓模拟器占用的RAM内存是2048&#xff0c;如果电脑的性能和内存一般的话就可能卡死&#xff0c;解决方案是手动修改安卓模拟器的config文件&…

运营商如何通过PCDN技术提高用户服务?

着互联网的快速发展&#xff0c;用户对网络速度和质量的要求越来越高。为了满足这些需求&#xff0c;内容分发网络(CDN)成为了关键的基础设施。而在CDN技术中&#xff0c;PCDN(PersonalCDN)作为一种新兴的技术&#xff0c;为运营商和用户提供了新的解决方案。本文将重点介绍PCD…

RuoYi-Vue项目后端增加自己的模块,要注意的点,只看我这一片就够了。

若依版本&#xff1a; RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 背景&#xff1a; 后端想自己增加一个模块&#xff0c;但是包路径…

聊聊 golang 的 map

1、哈希表 哈希表是一个很常见的数据结构&#xff0c;用来存储无序的 key/value 对&#xff0c;给定的 key 可以在 O(1) 时间复杂度内查找、更新或删除对应的 value。 设计一个好的哈希表&#xff0c;需要着重关注两个关键点&#xff1a;哈希函数、冲突处理。 1.1 哈希函数 …

文件上传漏洞---Pyload

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 本文重点从靶场案例分析文件上传漏洞常见的Pylod&#xff0c;本文演示靶场upload-labs 一.文件类型---Pyload 不同的文件对应不同的文件类型&#xff0c;后端代码通过限制特定的文件类型…

【C++】C++指针在线程中调用与受保护内存空间读取方法

引言 在C的多线程编程中&#xff0c;正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时&#xff0c;对受保护内存空间的访问必须谨慎处理&#xff0c;以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…

提升入住率|智慧酒店解决方案,打造有温度的居住体验!

近年来&#xff0c;智慧酒店被越来越多的人关注&#xff0c;由生物识别、物联网技术和互联网技术融合产生的智慧酒店解决方案&#xff0c;不仅可以提升顾客在酒店的入住体验&#xff0c;还可以帮助酒店降低运营成本&#xff0c;这也让越来越的酒店选择了智慧酒店的赛道&#xf…

c++读取文件时出现中文乱码

原因&#xff1a;UTF-8格式不支持汉字编码 解决&#xff1a;改成ANSI&#xff0c;因为ANSI编码支持汉字编码