UART串口收发数据

news/2024/10/17 13:34:10/

uart4.h 

ubuntu@ubuntu:05_uart$ cat include/uart4.h 
#ifndef __UART_H__
#define __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_get_string();#endif

uart4.c

ubuntu@ubuntu:05_uart$ cat src/uart4.c
#include"uart4.h"
#include"stm32mp1xx_gpio.h"
#include"stm32mp1xx_uart.h"
#include"stm32mp1xx_rcc.h"//初始化相关操作
void hal_uart4_init()
{/******RCC章节初始化*******///1.使能GPIOB组控制器  MP_AHB4ENSETR[1] = 1RCC->MP_AHB4ENSETR |= (0x1 << 1);  //使能AHB4连接的GPIOB//2.使能GPIOG组控制器  MP_AHB4ENSETR[6] = 1RCC->MP_AHB4ENSETR |= (0x1 << 6);  //使能AHB4连接的GPIOG//3.使能UART4组控制器  MP_APB1ENSETR[16] = 1RCC->MP_APB1ENSETR |= (0x1 << 16); //使能APB1连接的UART4/******GPIO章节初始化*******///1.设置PB2引脚为复用功能模式 MODER[5:4] = 10	GPIOB->MODER &= (~(0x3 << 4));GPIOB->MODER |= (0X1 << 5);//2.设置PB2引脚为复用功能为 UART4_RX AFRL[11:8] = 1000GPIOB->AFRL &= (~(0xf << 8));GPIOB->AFRL |= (0x8 << 8);//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 |= (0x6 << 12);/******UART4章节初始化*******///0.设置串口UE=0USART4->CR1 &= (~(0x1));//1.设置1位起始位,8位数据位USART4->CR1 &= (~(0x1 << 12));USART4->CR1 &= (~(0x1 << 28));//2.没有奇偶校验位USART4->CR1 &= (~(0x1 << 10));//3.设置1位停止位USART4->CR2 &= (~(0x3 << 12));//4.设置16倍采样率,第15位置0USART4->CR1 &= (~(0x1 << 15));//5.设置串口不分频USART4->PRESC &= (~(0xf));//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)
{hal_put_char('\r');hal_put_char('\n');   //换到下一行的开头//判断是否为'\0'while(*string != '\0'){//一个字符一个字符进行发送hal_put_char(*string);string++;}hal_put_char('\r');hal_put_char('\n');
}//接收一个字符
char hal_get_char()
{//1.判断接收数据寄存器中是否接收到数据ISR[5]while(!(USART4->ISR & (0x1 << 5)));//2.将接收数据寄存器中的内容读出来char ch = USART4->RDR; return ch;
}
//接收一个字符串
char* hal_get_string()
{//循环进行接收//当键盘的回车键按键之后,代表字符串输出完成,'\r'是回车static char str[128] = "";int i;for(i=0;;i++){	//判断接收数据寄存器中是否接收到数据ISR[5]while(!(USART4->ISR & (0x1 << 5)));str[i] = USART4->RDR;if(str[i] == '\r')break;hal_put_char(str[i]);   //回显}str[i] = '\0';return str;
}

main.c

ubuntu@ubuntu:05_uart$ cat main.c
#include "uart4.h"int main()
{hal_uart4_init();while(1){//hal_put_char(hal_get_char()+1);  //实验一hal_put_string(hal_get_string());  //实验二}return 0;
}

实验一现象:

实验二现象:


http://www.ppmy.cn/news/743047.html

相关文章

Android Studio App开发实战项目之广告轮播(附源码 可用于大作业)

需要图片集和源码请点赞关注收藏后评论区留言即可~~~ 电商App的首页上方&#xff0c;都在明显位置放了一栏广告条&#xff0c;并且广告条会轮播&#xff0c;非常吸引眼球&#xff0c;这种广告轮播的功能&#xff0c;为推广热门事物出力甚大。 轮播视频已上传至我的主页&#x…

桌面只计算机图标发白,win7系统桌面图标变白怎么回事_电脑桌面图标有小白块...

说起电脑桌面图标&#xff0c;网友们会罗列出各种问题&#xff0c;其中就是电脑桌面图标有小白块的情况&#xff0c;虽然桌面图标变白可以正常影响&#xff0c;但难免影响美观。win7系统桌面图标变白是怎么回事呢&#xff1f;通常&#xff0c;是因为桌面图标有缓存&#xff0c;…

计算机桌面 文字大小,敬业签电脑桌面便签软件怎么设置字体字号大小?

敬业签是一款支持多端同步功能的云服务便签软件&#xff0c;支持Windows和Mac电脑桌面PC版使用。Mac版目前暂不支持更改便签字体大小&#xff0c;Windows该云便签支持设置便签字体的字号大小&#xff0c;那么敬业签Windows电脑版桌面便签软件怎么设置字体字号大小呢&#xff1f…

电脑桌面云便签怎么设置字体字号大小?

支持多端同步功能的云便签支持Windows和Mac电脑桌面PC版使用。Windows该云便签支持设置便签字体的字号大小&#xff0c;那么Windows电脑版桌面云便签怎么设置字体字号大小呢&#xff1f; 一、打开已登录的电脑版桌面云便签&#xff0c;点击上方用户头像&#xff0c;或者按下默…

计算机电脑桌面文字虚,电脑屏幕字体变模糊是怎么回事

电脑屏幕字体变模糊是怎么回事 一般来说&#xff0c;集成显卡的电脑使用的时间长了&#xff0c;会出现显示器屏幕字体模糊的现象&#xff0c;在液晶显示器上发生的尤为明显。那么&#xff0c;到底是什么原因造成字体模糊的?有没有什么办法可以预防这种问题?下面是小编总结的一…

联想如何在桌面显示计算机和网络图标,联想电脑桌面图标字体变小怎么办

1. 电脑桌面字体图标变小怎么办 一、这种情况的出现大多是由于不懂电脑的人乱设才造成的。 首先在桌面上右击属性——>设置——>高级——>常规——>DPI设置(D:)——>选择正常尺寸(96DPI)——>然后点确定这样应该问题就能够解决了。二、这种情况是你在没有注…

wpf中DialogResult.Yes方法报错

原因&#xff1a;在WPF里DialogResult没有Yes或No的枚举取值了 所以应该这样写 private void Button_Click(object sender, RoutedEventArgs e) {   if (MessageBox.Show ("要退出程序吗?", "退出程序",MessageBoxButton.YesNo ) MessageBoxResult.Y…

github中Mermaid的用法

这个东西是最近推出&#xff0c;首先是自己的repository中新建一个readme.md文件 需要一点前端的知识&#xff0c;就是先导入一个依赖文件&#xff0c;然后再写甘特图&#xff0c;如下&#xff1a; ### 甘特图 [<a href"https://mermaid-js.github.io/mermaid/#/gant…