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章节初始化**********************////使能GPIOBRCC->MP_AHB4ENSETR |= (0x1 << 1);//使能GPIOGRCC->MP_AHB4ENSETR |=(0x1 << 6);//使能UART4RCC->MP_APB1ENSETR |=(0x1 << 16);//*************GPIO章节初始化**************************////1.设置PB2引脚为复用功能模式 MODER[5:4] 设为 10GPIOB->MODER &= (~(0x3 << 4));GPIOB->MODER |= (0x1 << 5);//2.设置PB2引脚复用功能为UART4_RX AFRL[11:8] 1000GPIOB->AFRL &= (~(0xf << 8));GPIOB->AFRL |= (0x1 << 11);//1.设置PG11引脚为复用功能模式 MODER[23:22] 设为 10GPIOG->MODER &= (~(0x3 << 22));GPIOG->MODER |= (0x1 << 23);//2.设置PG11引脚为复用功能为UART4_TX AFRH[15:12] 0110GPIOG->AFRH &= (~(0xf << 12));GPIOG->AFRH |= (0x3 << 13);//UART4章节初始化//1.设置1位起始位,8位数据位USART4->CR1 &= (~(0x1)); //UE=0USART4->CR1 &= (~(0x1) << 12); //M0USART4->CR1 &= (~(0x1) << 28); //M1//2.没有奇偶效验位 PCE[10] 0USART4->CR1 &= (~(0x1) << 10);//3.设置1位停止位 STOP[13:12] 00USART4->CR2 &= (~(0x3) << 12); //4.设置16倍采样率 OVER8[15] 0USART4->CR1 &= (~(0x1) << 15);//5.设置串口不分频 PRESCALER[4:0] 0000USART4->PRESC =0x0000;//6.设置串口波特率为115200USART4->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;
}

 

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

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

相关文章

监控系统Zabbix

zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 通过一个友好的界面进行浏览整个网站…

【设计模式】第十七章:状态模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

谷歌Bard入门指南

文章目录 谷歌Bard入门指南一、简介二、使用指南三、中文化3.1 中文提问3.2 中文回答 四、Hello Game五、亮点 谷歌Bard入门指南 一、简介 Bard 是一个大型语言模型&#xff0c;也称为对话式 AI 或聊天机器人&#xff0c;经过训练&#xff0c;内容丰富且全面。Bard 接受过大量…

Tkinter_使用Progressbar创建和管理进度条

前言 Progressbar是Tkinter库中的一个小部件&#xff0c;用于创建和管理进度条。它可以在图形用户界面中显示任务的进度&#xff0c;并提供了多种样式和配置选项。 使用Progressbar&#xff0c;你可以按照固定或不确定的进度展示任务的进行状态。它可以显示任务完成的百分比&am…

matplotlib设置坐标轴为象限模式

import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi, 1000) cosy np.cos(x) siny np.sin(x)plt.xlim(min(x), max(x)) plt.ylim(min(cosy), max(cosy)0.5) plt.plot(x, cosy) plt.plot(x, siny) # 设置坐标刻度 plt.xticks([-np.pi, -np.pi/2,…

微前端(拆分和细化,整合历史系统)

接入微前端 项目背景说明 假如我们完成了基于Vue2的项目&#xff0c;假设另外一个团队的小伙伴来实现前台可视化部分&#xff0c;他们使用的是最新的Vue3技术栈&#xff0c;现在有一个需求&#xff0c;他们的前台项目想直接使用我们的登录功能&#xff0c;获得token&#xff…

数据结构与算法(持续更新中..)

一. 概论 1. 数据结构 队列&#xff1a;一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项&#xff1b;队列在尾部添加新元素&#xff0c;并从头部移除元素。最新添加的元素必须排在队列的末尾。&#xff08;例如&#xff1a;去食堂排队打饭&#xff0c;排在前…

新版本vscode使用配置文件功能,解决不同项目使用不同的插件

如果你同时有vue2,vue3的项目。一定会遇到插件的问题。因为vue2项目插件是使用vetur的&#xff0c;vue3是使用volar的。 以前vscode为了在不同项目中能使用不同的配置文件&#xff0c;是使用工作区的概念去解决的&#xff0c;但是比较复杂而且不好用。 现在新版本的vscode&…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库&#xff0c;可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …

中介者模式的学习与使用

1、中介者模式的学习 中介者模式是一种行为型设计模式&#xff0c;它通过引入一个中介者对象来解耦一组对象之间的交互。中介者模式促进了对象之间的松耦合&#xff0c;使得它们可以独立地进行通信&#xff0c;而不需要直接相互引用。   在中介者模式中&#xff0c;有以下几个…

rabbitMq怎么查看队列消息-Tracing日志

Trace 是Rabbitmq用于记录每一次发送的消息&#xff0c;方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的&#xff0c;需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 rabb…

设计模式篇---建造者模式

文章目录 概念结构实例总结 概念 建造者模式的定义&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。 这么看起来有点难以理解&#xff0c;翻译一下就是 用户无需关注创建复杂对象的过程&#xff0c;只需要指定创建的对象即…