ARM-day6

embedded/2024/9/23 1:57:52/

 

#ifndef __UART4_H__
#define __UART4_H__

#include"stm32mp1xx_gpio.h"
#include"stm32mp1xx_rcc.h"
#include"stm32mp1xx_uart.h"

//初始化串口
void uart4_config();
void putchar(char dat);     //发送单个字符串
char getchar();                    //接收单个字符串
void puts(char *s);           //发送字符串
void gets(char *s);           //接收字符串 

#endif

,main.c 

#include "uart4.h"//手动封装延时函数void delay_ms(int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++){}}}int main(){//uart4初始化uart4_config();char str[128];while(1){puts(str); //接收一个字符串gets(str);}return 0;}

 src/usr4.c

#include "uart4.h"void uart4_config()
{//使能GPIOB\GPIOG\UART4的外设时钟RCC->MP_AHB4ENSETR |= (0x1<<1);RCC->MP_AHB4ENSETR |= (0x1<<6);RCC->MP_APB1ENSETR |= (0x1<<16);//设置PG11和PB2为管脚复用功能//PB2GPIOB->MODER &= (~(0x3<<4));GPIOB->MODER |= (0x2<<4);//PG11GPIOG->MODER &= (~(0x3<<22));GPIOG->MODER |= (0x2<<22);//设置PG11为UART4_TX功能GPIOG->AFRH &= (~(0xf<<12));GPIOG->AFRH |= (0X6<<12);//设置PB2为UART4_RX功能GPIOB->AFRL &= (~(0xf<<8));GPIOB->AFRL |= (0X8<<8);//设置串口不使能USART4->CR1 &= (~0x1);//设置8位数据位USART4->CR1 &= (~(0x1<<12));USART4->CR1 &= (~(0x1<<28));//设置没有校验位USART4->CR1 &= (~(0x1<<10));//设置时钟频率不分频USART4->PRESC &= (~0xf);//设置16倍过采样USART4->CR1 &= (~(0x1<<15));//设置1位停止位USART4->CR2 &= (~(0x3<<12));//设置波特率为115200USART4->BRR=0X22B;//使能发送器USART4->CR1 |= (0X1<<3);//使能接收器USART4->CR1 |= (0X1<<2);//使能串口USART4->CR1 |= (0X1<<0);
}//发送单个字符
void putchar(char dat)
{//当发送数据寄存器中没有数据时可以发送while (!(USART4->ISR & (0x1<<7)));//当TDR中有数据时阻塞等待没有数据USART4->TDR = dat;//向发送数据寄存器中写入数据//等大传输完成函数结束while (!(USART4->ISR & (0x1<<6)));
}//接收单个字符
char getchar()
{//当接收数据寄存器中有有效数据时读取while (!(USART4->ISR & (0x1<<5)));//将读取到的数据返回return USART4->RDR;}//发送字符串
void puts(char *s)
{while(1){if(*s=='\0')break;putchar(*s);s++;}//发送一个回车putchar('\r');putchar('\n');
}//接收字符串
void gets(char *s)
{while(1){//循环接收单个字符,当检测到回车键‘\r’被按下,结束*s=getchar();putchar(*s);if(*s=='\r')break;s++;}//在接收的字符串最后补上一个'\0'*s = '\0';//发送一个'\n'表示在串口工具下一行进行显示putchar('\n');
}


http://www.ppmy.cn/embedded/3599.html

相关文章

相机摄影入门技巧,数码摄影技巧大全

一、资料前言 本套数码相机摄影资料&#xff0c;大小1.08G&#xff0c;共有42个文件。 二、资料目录 《aking人像摄影技巧分享》.pdf 《Nikon.D90数码单反摄影技巧大全》FUN视觉.全彩版.pdf 《不可不学的摄影技巧》.pdf 《常用场景摄影》.pdf 《单反数码摄影专家技法》.…

Jenkins打包app并通过openssh上传到服务器

目录 1、下载安装openssh 2、配置openssh根目录 3、安装Jenkins Build Steps配置 Post-build Actions配置 4、运行 1、下载安装openssh 网上很多教程&#xff0c;包括开端口的&#xff0c;可以搜下 2、配置openssh根目录 进入C:\ProgramData\ssh打开文件sshd_config&am…

AIGC实战——VQ-GAN(Vector Quantized Generative Adversarial Network)

AIGC实战——VQ-GAN 0. 前言1. VQ-GAN2. ViT VQ-GAN小结系列链接 0. 前言 本节中&#xff0c;我们将介绍 VQ-GAN (Vector Quantized Generative Adversarial Network) 和 ViT VQ-GAN&#xff0c;它们融合了变分自编码器 (Variational Autoencoder, VAE)、Transformer 和生成对…

Redis面试

数组结构 String、Map、Set、ZSet、List 持久化 AOF:追加日志持久化操作&#xff0c;将写命令追加到一个文件的末尾。redis重启时&#xff0c;执行这些操作。更可靠。不会出现数据丢失的问题。写入硬盘的频率配置&#xff1a;每秒同步、每写入命令同步、禁止同步 RDB:快照持…

蓝桥杯 — — 纯质数

纯质数 题目&#xff1a; 思路&#xff1a; 一个最简单的思路就是枚举出所有的质数&#xff0c;然后再判断这个质数是否是一个纯质数。 枚举出所有的质数&#xff1a; 可以使用常规的暴力求解法&#xff0c;其时间复杂度为&#xff08; O ( N N ) O(N\sqrt{N}) O(NN ​)&…

20240419,继承,多态

土豆的老家陕西安康&#xff01;怪舒服的咯&#xff0c;广西一眼望去全是房子啦&#xff0c;小时候一眼开敞水田再也回不来啦 目录 五&#xff0c;继承 5.1 基本语法 5.2 继承方式 5.3 继承中的对象模型 5.4 构造和析构顺序 5.5 同名成员处理 5.6 同名静态成员处理 5.…

javax.net.ssl.SSLHandshakeException: No appropriate protocol

cd /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/home/jre/lib/security sudo vi java.security 删掉下面的三个配置,然后重启应用即可

YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 / RTDETR -gui界面-交互式图形化界面

往期热门博客项目回顾&#xff1a;点击前往 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 AI健身教练-引体向上…