Work20230705

这篇具有很好参考价值的文章主要介绍了Work20230705。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Work20230705,单片机,嵌入式硬件

 Work20230705,单片机,嵌入式硬件

//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()
{

	while(1)
	{
		//将获取到的字符+1发送到终端
		//hal_put_char(hal_get_char()+1);
		
		hal_put_string(	hal_set_string());
		
	}
 return 0;
}

//uart4.h
#ifndef _UART4_H_
#define _UART4_H_
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.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_set_string();

#endif

//uart4.c
#include "uart4.h"
//PB2------>UART4_RX
//PG11------>UART4_TX
//初始化相关操作
void hal_uart4_init()
{
	//******************RCC章节初始化**********************//
	//使能GPIOB
	RCC->MP_AHB4ENSETR |= (0x1 << 1);
	//使能GPIOG
	RCC->MP_AHB4ENSETR |=(0x1 << 6);
	//使能UART4
	RCC->MP_APB1ENSETR |=(0x1 << 16);

	//*************GPIO章节初始化**************************//
	//1.设置PB2引脚为复用功能模式 MODER[5:4] 设为 10
	GPIOB->MODER &= (~(0x3 << 4));
	GPIOB->MODER |= (0x1 << 5);
	//2.设置PB2引脚复用功能为UART4_RX AFRL[11:8] 1000
	GPIOB->AFRL &= (~(0xf << 8));
	GPIOB->AFRL |= (0x1 << 11);
	//1.设置PG11引脚为复用功能模式 MODER[23:22] 设为 10
	GPIOG->MODER &= (~(0x3 << 22));
	GPIOG->MODER |= (0x1 << 23);
	//2.设置PG11引脚为复用功能为UART4_TX AFRH[15:12] 0110
	GPIOG->AFRH &= (~(0xf << 12));
	GPIOG->AFRH |= (0x3 << 13);

	
	//UART4章节初始化
	//1.设置1位起始位,8位数据位
	USART4->CR1 &= (~(0x1)); //UE=0
	USART4->CR1 &= (~(0x1) << 12); //M0
	USART4->CR1 &= (~(0x1) << 28); //M1

	//2.没有奇偶效验位 PCE[10] 0
	USART4->CR1 &= (~(0x1) << 10);

	//3.设置1位停止位 STOP[13:12] 00
	USART4->CR2 &= (~(0x3) << 12); 

	//4.设置16倍采样率 OVER8[15] 0
	USART4->CR1 &= (~(0x1) << 15);
	//5.设置串口不分频 PRESCALER[4:0] 0000
	USART4->PRESC =0x0000;
	//6.设置串口波特率为115200
	USART4->BRR = 0x22b;
	//7.设置串口发送器使能
	USART4->CR1 |= (0x1 << 3); 
	//8.设置串口接收器使能
	USART4->CR1 |= (0x1 << 2);
	//9.设置串口使能
	USART4->CR1 |= 0x1;
	
}

//发送一个字符
void hal_put_char(const char str)
{
	//1.判断发送数据寄存器是否为空ISR[7]
	//特点:为空发送下一位数据 未满需要等待
	//读0: 满,需要等待 读1:发送数据
	while(!(USART4->ISR & (0x1 << 7)));
	//2.将发送的内容,赋值给发送数据寄存器
	USART4->TDR = str;
	//3.判断一帧数据是否发送完成 ISR[6]
	//读0:没有发送完成,需要等待 读1:发送完成
	while(!(USART4->ISR & (0x1 << 6)));
	
}

//发送一个字符串
void hal_put_string(const char* string)
{
	//1.判断发送数据寄存器是否为空ISR[7]
	while(!(USART4->ISR & (0x1 << 7)));

	//判断是否为'\0',为'\0'结束发送
	while(*(string))
	{
		USART4->TDR = *(string);
		string++;
		while(!(USART4->ISR & (0x1 << 6)));
	}
	hal_put_char('\n');
	hal_put_char('\r');
}

//接收一个字符
char hal_get_char()
{
	//1.判断接收数据数据寄存器中是否接收到数据 ISR[5]
	//状态为0则一直等待
	while(!(USART4->ISR & (0x1 << 5))); 
	//2.将接收数据寄存器(RDR)中的内容读取出来
	char buf = USART4->RDR;
	return buf;
}

char buf[100];
//接收一个字符串
char* hal_set_string()
{
	//循环进行接收
	int i=0;
	while(1)
	{
		//获取一个字符
		buf[i]=hal_get_char();
		//将该字符显示到终端
		hal_put_char(buf[i]);
		if(buf[i]=='\r') break;
		i++;
	}
	buf[i]='\0';
	hal_put_char('\r');
	hal_put_char('\n');
	return buf;
}

 文章来源地址https://www.toymoban.com/news/detail-525087.html

到了这里,关于Work20230705的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机和Linux嵌入式区别

    单片机是一种集成电路,它能够在一个芯片上完成各种计算、控制和管理任务。单片机没有明确的分层,这是因为它通常被用来设计嵌入式系统,其程序结构和功能要根据具体的应用需求来设计。 在单片机的程序设计中,可以通过一些方法将程序分为不同的层次,比如可以将

    2024年01月17日
    浏览(64)
  • 【单片机/嵌入式】最完整学习路线

            关于这个问题我在网上寻找到 了 相关文章解释得很详细,不了解的同学可以参考一下这篇文章: 到底什么是嵌入式?什么是单片机? - 知乎         一个人学习是孤独的,如果你是一名学生,建议加入学校的电子社团或者实验室,有老师的帮助和同学的互助

    2024年02月03日
    浏览(54)
  • 嵌入式51单片机04-矩阵按键系列

    一、矩阵按键基础知识 矩阵按键工作原理 : 逐行扫描 :通过高四位轮流输出低电平来对矩阵键盘进行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过判断低四位数据中哪一位为零来判断哪一个按键被按下。 逐列扫描 :通过低四位轮流输出低电平来

    2024年02月07日
    浏览(65)
  • 【唠唠嵌入式】__如何学习单片机?

    目录 前言 个人定位,从事软件还是硬件? 学习内容 (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 作为一个老司机,多年来跟 单片机 、 Keil 、 C语言 、 AD 、 烙铁 、 风枪 、 示波器 、 电子元器件 纠缠不清。期间经历了不少磨练,熬过了很多夜晚,也掉了大把头

    2024年02月06日
    浏览(71)
  • 嵌入式(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位

    上一篇文章我们介绍了嵌入式系统 嵌入式系统(Embedded System)是一种特定用途的计算机系统,它通常嵌入在更大的产品或系统中,用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成,旨在满足特定的需求,如嵌入在家电、汽车、医疗设备、工业自动化、消费

    2024年02月02日
    浏览(108)
  • 嵌入式Linux知识第六章——单片机

    目录 6.1 CPU 内存 虚拟内存 磁盘/硬盘 的关系⭐⭐⭐ 6.2 CPU内部结构⭐⭐⭐⭐ 6.3 ARM结构处理器简析 ⭐⭐ 6.4波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;⭐⭐⭐⭐ 6.5arm和dsp有什么区别⭐⭐ 6.6 ROM RAM的概念浅析⭐⭐⭐ 6.7 IO口工作方式:上拉输入 下拉输入

    2024年04月10日
    浏览(77)
  • 梳理一下嵌入式和单片机之间的关系

    一定有很多人都听说过嵌入式和单片机,但在刚开始接触时,不知道大家有没有听说过嵌入式就是单片机这样的说法,其实嵌入式和单片机还是有区别的。单片机与嵌入式到底有什么关系? 下面我们就来说说嵌入式和单片机之间的联系和区别吧。 01  什么是单片机? 首先,

    2024年02月04日
    浏览(51)
  • 嵌入式软件必读10本书_单片机篇

    大家好,我是知微! 虽然现在网上的技术文章非常多,但缺点是知识点太零散。 书籍是经过精心整理和编排的,仍旧是非常优秀的学习资料。下面一起来看看本文推荐的10本书吧! 这本书物融合了生动活泼的漫画、风趣幽默的文字,以浅显易懂的方式探讨编程思维。 特别适

    2024年02月19日
    浏览(64)
  • 嵌入式项目分享 stm32智能运动计步系统 - 物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(76)
  • 嵌入式硬件与51单片机:演变、挑战与未来

    导言:         嵌入式硬件及其代表之一的51单片机在电子领域扮演着至关重要的角色。本文将深入剖析这一领域的发展历程,包括初期的崛起、面临的挑战、重大公关危机、核心业务、当前研究方向、采用的技术、实际应用场景、未来展望,并提供相关链接,为读者呈现

    2024年01月24日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包