(ARM)7/5

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);//设置为RXGPIOB->AFRL &= (~(0xf << 8));GPIOB->AFRL |= (0x8 << 8);//PG11引脚设置复用功能模式GPIOG->MODER &= (~(0x3 << 22));GPIOG->MODER |= (0x2 << 22);//设置为TXGPIOG->AFRH &= (~(0xf << 12));GPIOG->AFRH |= (0x6 << 12);//----------UART章节初始化----------////设置串口UE = 0USART4->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));//设置串口波特率为115200USART4->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.hqwc.cn/news/15106.html

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

相关文章

云计算——虚拟化层架构

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解云计算的虚拟化层架构&#xff0c;了解云计算虚拟化层都有哪些架构模式…

Java POI excel单元格背景色(填充)、字体颜色(对齐)、边框(颜色)、行高、列宽设置

文章目录 1、Excel Cell单元格背景色颜色名称对照关系2、Excel Cell单元格背景填充样式颜色填充对照关系3、Excel Cell字体样式设置对照图4、Excel 行高、列宽设置5、Excel单元格边框设置边框类型图片对比附一&#xff1a;一些问题1、关于列宽使用磅*20的计算方式2、关于行高使…

开发抖音短视频账号矩阵系统技术实现能解决一机一号实名认证问题?

一、短视频账号矩阵系统解决一机一号实名认证问题&#xff1f; 目前站在开发者角度来看问的比较多&#xff0c;做开发技术类矩阵saas工具&#xff0c;需要的多账号怎么解决&#xff0c;这需要从两个方面来做开发解决。 第一、从开发角度来看技术开发首先解决代理ip分发问题&a…

DAY38:贪心算法(五)K次取反后最大数组和+加油站

文章目录 1005.K次取反后最大化的数组和思路直接升序排序的写法最开始的写法&#xff1a;逻辑错误修改版时间复杂度 自定义sort对绝对值排序的写法sort的自定义比较函数cmp必须声明为static的原因std::sort升降序的问题&#xff08;默认升序&#xff09;时间复杂度 总结 134.加…

N天爆肝数据库——MySQL(1)

数据库概念理解 数据库 DB 存储数据的仓库 数据库管理系统 DBMS 操纵和管理数据库的大型软件 SQL 操作关系型数据库的编程语言&#xff0c;定义了用一套操作关系型数据库同意标准 学习 SQL 的作用 SQL 是一门 ANSI 的标准计算机语言&#xff0c;用来访问和操作数据库系统。S…

前端优化的一些方向

对于浏览器来说&#xff0c;加载网页的过程可以分为两部分&#xff0c;下载文档并响应&#xff08;5%左右&#xff09;&#xff0c;下载各种组件&#xff08;95%左右&#xff09;。 而对比大部分优秀网页来说下载文档&#xff08;10%~ 20%&#xff09;&#xff0c;下载组件&…

Mac OS装Windows系统开启虚拟化

目录 引言前提macOS开启虚拟化mac下的Windows开启虚拟化双系统开启虚拟化修改启动管理程序开启虚拟化 注意事项 引言 在开发工作中&#xff0c;很多软件需要用到virtual box&#xff0c;但是使用virtual box需要开启虚拟化&#xff0c;而有些苹果笔记本虚拟化是关闭的&#xf…

Day_61-62 决策树

目录 Day_61-62决策树(准备工作) 一. 算法的基本概念 1. 决策树的定义 2. 如何构建决策树&#xff1f; 2.1 熵 2.2 信息增益原则 2.3 计算步骤 二. 示例演示 1. 第一次节点决策分类&#xff1a; 2. 后续节点的决策分类 3. 决策分类的结束条件 三. 代码实现 1. 主函数 2. 两个构…

Presto之内存池管理

一. 前言 在Presto 之GENERAL POOL & RESERVED POOL_王飞活的博客-CSDN博客 的文章中&#xff0c;我们介绍了在Presto中&#xff0c;内存分成了保留区和通用区两个内存池区进行管理。本文则主要介绍Presto是是如何实现内存池管理的。 二. Presto内存池大小控制管理 Presto的…

异地远程访问本地SQL Server数据库【无公网IP内网穿透】

文章目录 1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转发自CSDN远程穿透的文章&#xff1a;无需公网…

将迷你世界的蓝图导出成表格

将迷你世界的蓝图导出成表格 使用方法为编译此代码&#xff0c;然后将游戏存档的vbp文件拖入编译出的exe上即可导出csv文件 #include<iostream> #include<Windows.h> #include<direct.h> #include<io.h> using namespace std; #define N_L 4 //这个改…

GLM: General Language Model Pretrainingwith Autoregressive Blank Infilling翻译理解

GPT&#xff08;autoregressive&#xff09;模型是一个自回归模型&#xff0c;利用left-to-right语言模型&#xff0c;由于不是双向attention 机制&#xff0c;因此不能再NLU任务中&#xff0c;获取充分的上下文信息&#xff0c;BERT类似自编码&#xff08;autoencoding&#x…