10.3国庆作业(UART实验)
文章目录
- 作业内容
- 思路分析
- 1. 电路分析
- RCC章节分析
- GPIO章节分析
- UART章节
- 代码实现
- uart4.h
- uart4.c
- main.c
- 测试结果
作业内容
完成UART实验:实现串口工具输入一个字符串,按下回车键,会显示输入的字符串
思路分析
1. 电路分析
通过分析电路图可知:
UART4_RX对应的引脚为:PB2
UART4_TX对应的引脚为:PG11
RCC章节分析
- 设置GPIOB控制器使能:RCC_MP_AHB4ENSETR[1] = 1
设置GPIOG控制器使能:RCC_MP_AHB4ENSETR[6] = 1 - 设置UART4控制器使能:RCC_MP_APB1ENSETR[16] = 1
GPIO章节分析
- 设置PB2引脚为复用功能:GPIOB_MODER[5:4] = 10
设置PG11引脚为复用功能:GPIOG_MODER[23:22] = 10 - 设置PB2引脚复用功能为UART4_Rx:GPIOB_AFRL[11:8] = 1000
设置PG11引脚复用功能为UART4_Tx:GPIOG_AFRH[15:12] = 0110
UART章节
- 设置串口8位数据位:USART_CR1[28][12] = 00
设置串口16倍采样率,会影响波特率的计算:USART_CR1[15] = 0
设置串口无奇偶校验位:USART_CR1[10] = 0
设置串口发送寄存器使能:USART_CR1[3] = 1
设置串口接收寄存器使能:USART_CR1[2] = 1
设置串口接收使能:USART_CR1[0] = 1 - 设置串口1位停止位:USART_CR2[13:12] = 00
- 设置串口波特率为115200:USART4_BRR = 0x22b
- 设置串口不分频:USART_PRESC[3:0] = 0000
代码实现
uart4.h
#ifndef __UART4_H__
#define __UART4_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"//1.初始化函数
void uart4_init();
//2.发送一个字符
void put_char(const char str);
//3.发送一个字符串
void put_string(const char* str);
//4.接收一个字符
char get_char();
//5.接收一个字符串
char* get_string();#endif
uart4.c
#include "uart4.h"//1.初始化函数
void uart4_init()
{/********RCC章节初始化**********///1.使能GPIOB控制器RCC->MP_AHB4ENSETR |= (0x1 << 1);//2.使能GPIOG控制器RCC->MP_AHB4ENSETR |= (0x1 << 6);//3.使能UART4控制器RCC->MP_APB1ENSETR |= (0x1 << 16);/********GPIO章节初始化**********///PB2---->UART4_Rx//PG11---->UART4_Tx//1.设置PB2引脚为复用功能//2.设置PB2引脚复用功能为UART_Rx//3.设置PG11引脚为复用功能//4.设置PG11引脚复用功能为UART_TxGPIOB->MODER |= (0x1 << 5);GPIOB->MODER &= (~(0x1 << 4));GPIOG->MODER |= (0x1 << 23);GPIOG->MODER &= (~(0x1 << 22));GPIOB->AFRL &= (~(0xf << 8));GPIOB->AFRL |= (0x1 << 11);GPIOG->AFRH &= (~(0xf << 12));GPIOG->AFRH |= (0x3 << 13);/********UART章节初始化**********/if(USART4->CR1 & (0x1 << 0)){//将UE位禁止USART4->CR1 &= (~(0x1 << 0));}//1.串口初始化,8位数据位,无奇偶校验位USART4->CR1 &= (~(0x1 << 12));USART4->CR1 &= (~(0x1 << 28));USART4->CR1 &= (~(0x1 << 10));//2.设置串口移位停止位USART4->CR2 &= (~(0x3 << 12));//3.设置串口的16倍采样率USART4->CR1 &= (~(0x1 << 15));//4.设置串口不分频USART4->PRESC &= (~(0xf << 0));//5.设置串口波特率为115200USART4->BRR = 0x22b;//6.设置串口发送器使能USART4->CR1 |= (0x1 << 3);//7.设置串口接收器使能USART4->CR1 |= (0x1 << 2);//8.设置串口使能USART4->CR1 |= (0x1 << 0);
}//2.发送一个字符
void put_char(const char str)
{//1.判断发送数据寄存器是否有数据//读0:发送数据寄存器满,需要等待//读1:发送数据寄存器为空,才可以发送下一个字节数据while(!(USART4->ISR & (0x1 << 7)));//2.将要发送的字符,写入到发送数据寄存器中USART4->TDR = str;//3.判断发送数据是否发送完成//读0:发送数据没有完成,需要等待//读1:发送数据完成,可以发送下一帧数据while(!(USART4->ISR & (0x1 << 6)));
}//3.发送一个字符串
void put_string(const char* str)
{//判断是否为'\0'while(0 != *str){//一个一个字符发送put_char(*str);str++;}put_char('\n');put_char('\r');
}//4.接收一个字符
char get_char()
{char ch;//1.判断接收寄存器是否有数据可读//读0:没有数据可读,需要等待//读1:有数据可读while(!(USART4->ISR & (0x1 << 5)));//2.将接收数据寄存器中的内容读出来ch = USART4->RDR;return ch;
}char buffer[50] = {0};
//5.接收一个字符串
char* get_string()
{//1.循环进行接收char *p = buffer;while((*p = get_char()) != '\r'){put_char(*p);p++;}//2.循环实现:接收一个字符之后,发送一个字符//当键盘回车键按下之后,代表字符串接收结束'\r'//3.字符串补'\0'*p = 0;return buffer;
}
main.c
#include "uart4.h"
extern void printf(const char *fmt, ...);int main()
{//1.调用初始化函数uart4_init();//2.发送字符(串)while(1){//put_char(get_char()+1);put_string(get_string());}return 0;
}
测试结果
10.3国庆作业(UART实验)相关推荐
- 10.2国庆作业(PWM实验)
文章目录 作业内容 思路分析 1. 电路分析 2. RCC章节分析 3. GPIO章节分析 4. TIM4章节分析(以蜂鸣器为例) 代码实现 pwm.h pwm.c main.c 作业内容 完成PWM ...
- 10.6国庆作业(SPI实验)
文章目录 作业内容 思路分析 电路图分析 通信协议 RCC章节分析 GPIO章节分析 代码实现 spi.h spi.c main.c 实验结果 作业内容 完成SPI实验:实现数码晶体管显示相应数字 思 ...
- 10.5国庆作业(IIC实验)
文章目录 作业内容 思路分析 IIC硬件电路图 IIC时序 IIC协议 代码实现 iic.c main.c 测试结果 作业内容 完成IIC实验:实现扩展板上空气温湿度传感器对空气温度与湿度的测量 思路 ...
- c语言吴振国课后题答案,Exam10_C作业与实验10期中自测卷参考答案(最新整理)
<Exam10_C作业与实验10&期中自测卷参考答案(最新整理)>由会员分享,可在线阅读,更多相关<Exam10_C作业与实验10&期中自测卷参考答案(最新整理)(4 ...
- 淮海工学院linux实验报告三,作业三 实验报告
作业三 实验报告 网络通信 文件传输 实验一 1-1 实验题目 服务器端和客户端各传递1次字符串.考虑到使用TCP协议,所以传递字符串前先以4字节整数型方式传递字符串长度.连接时服务器端和客户端数据传 ...
- 数值分析matlab实验报告,数值分析第一次作业matlab实验报告.doc
数值分析第一次作业matlab实验报告.doc 几种线性方程组迭代算法的MATLAB实现和性能比较用有限差分方法(五点差分格式)求解正方形域上的Poisson方程边值问题用MATLAB语言编写算法程序 ...
- JavaFx/Java 大作业 五子棋 实验报告
Java大作业五子棋实验报告 实验目的 通过此次实验,对这一学期学习的内容尤其是界面开发部分做了一个很好的回顾,看似简单的五子棋程序,设计好也确实费了我一点功夫 功能模块简介和系统结构图 ChessG ...
- 国庆作业 刷题0929
国庆作业 刷题0929 使进度在90-95%截图上传 详情 第二本书 第一本书
- 趣味物理中的计算机科学,【趣味物理】10个有趣的科学实验,揭示物理原理。...
原标题:[趣味物理]10个有趣的科学实验,揭示物理原理. 1.穿透土豆的吸管. 这个实验借助了空气的力量,通过空气的作用力将土豆扎穿.我们将吸管的一端用手指堵住,吸管内空气的唯一出口就是扎入土豆的那一 ...
最新文章
- linux系统 长久记录所有用户所有操作记录
- EXPDP 时ORA-27054 问题处置
- poj1730Pollard分解
- matlab 摄像头操作
- php调用root权限,PHP执行root权限程序
- NUMA架构的CPU -- 你真的用好了么?
- ABAP SET UPDATE TASK LOCAL的测试
- 企业应用超级App来啦!
- C# ObjectCache、OutputCache缓存
- zgc,JDK8有类似的shenandoah,华为移植到JDK11
- Url 助手类(Url Helper)
- 机器人影视对接_机器学习对接会
- 2022年投影仪推荐 家用投影仪推荐一下哪款比较好2022
- spss中有关独立样本T检验的详细介绍(包含操作过程和结果分析)
- MySQL Error 1048 奇遇记
- C++编译与链接(2)-浅谈内部链接与外部链接
- MySQL函数 NOW()
- TEB算法1-teb原理详解
- import和export
- 企业邮箱和普通邮箱有什么区别
热门文章
- 【基于Leaflet和Canvas绘图的前端大量栅格数据渲染】
- mysql备份数据库某表格_MySQL备份:使用自动轮换表格备份,轻松恢复部分/完整数据库...
- chcp Command的妙用
- 南都娱乐周刊官网突然崩溃 疑遭黑客攻击
- 经济的1000+篇文章总结
- 安卓029老年人监护系统APP
- 计算机组成原理(4)IO
- Opensips搭建
- 一个为程序员定制的、WPF开发的小巧、美观桌面快捷工具
- python3中 os.path.realpath(__file__) 的使用