ARM 串口实验 字符 字符串输入输出

实验串口实现发送字符/字符串 实验串口实现发送字符_字符串 阅读详情

题目:

.完成串口收发一个字符,上传优快云,实验现象截图 

.完成串口收发一个字符串,上传优快云,实验现象截图

头文件

#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
//初始化函数
void hal_uart_init();
//发送一个字符
void put_char(const char str);
//接收一个字符
char get_char();
//发送一个字符串
void put_string(const char *str);
//接收一个字符串
char *get_string();
 
 
 
 
#endif

源文件

#include "uart4.h"

void hal_uart_init()
{
    RCC->MP_AHB4ENSETR |= (0x1 << 1); // RCC->MP_AHB4ENSETR[1]=1
    RCC->MP_AHB4ENSETR |= (0x1 << 6); // RCC->MP_AHB4ENSETR[6]=1
    RCC->MP_APB1ENSETR |= (0x1 << 16); // RCC->MP_APB1ENSETR[16]=1
    
    //GPIO 相关寄存器初始化
    GPIOB->MODER &= (~(0x3 << 4));
    GPIOB->MODER |= (0x2 << 4);

    GPIOG->MODER &=(~(0x3 << 22));
    GPIOG->MODER |=(0x2 << 22);

    GPIOB->AFRL &= (~(0xf << 8));
    GPIOB->AFRL |= (0x8 << 8);

    GPIOB->AFRH &= (~(0xf << 12));
    GPIOB->AFRH |= (0x6 << 12);


    if (USART4->CR1 & (0x1 << 0))
    {
        USART4->CR1 &= (~(0x1 << 0));
    }

    USART4->CR1 &= (~(0x1 << 28));//
    USART4->CR1 &= (~(0x1 << 12));//

    USART4->CR1 &= (~(0x1 << 15));//
    USART4->CR1 &= (~(0x1 << 10));//
    USART4->CR1 |= (0x1 << 3);//
    USART4->CR1 |=(0x1 << 2);//
    USART4->CR1 |=(0x1 << 0);//

    USART4->CR2 &=(~(0x3 << 12));//

    USART4->BRR &=(~(0xffff));//
    USART4->BRR |=(0x22b);//

    USART4->PRESC &= (~(0xf << 0));//


}

void put_char(const char str)
{
    //1.判断发送数据寄存器是否有数据ISR[7]
    //读0说明发送数据寄存器满,需要等待
    //读1发送数据寄存器为空,才可以发送下一个字节数据

    while(!(USART4->ISR & (0x1<<7)));

    //2.将要发送的字符,写入到发送数据寄存器中
    USART4->TDR &=(~(0xff));
    USART4->TDR=str;
    //3.判断数据是否发送完成
    //读0发送数据没有完成
    //读1发送数据完成,可以发送下一帧数据
    while(!(USART4->ISR & (0x1<<6)));
}

//3.接收一个字符
char get_char()
{
    char ch;
    //1.判断接收寄存器是否有数据可读
    //读0:没有数据可读
    //读1:有数据可读
    while(!(USART4->ISR & (0x1<<5)));
    //2.将接收数据寄存器中的内容读出来
    ch=USART4->RDR;

    return ch;
}
//4.发送一个字符串
void put_string(const char* str)
{
    put_char('\n');
    put_char('\r');
    while(*str != '\0')
    {
        put_char(*str);
        str++;
    }
    put_char('\n');
    put_char('\r');
}
char buf[50]={0};

//5.接收一个字符串
char* get_string()
{
    //1.循环进行接收
    //2.循环实现,接受一个字符之后,发送一个字符
    //当键盘的回车键按下之后,代表字符串接收结束'\r'
    while(!(USART4->ISR & (0x1<<5)));
    int i=0;
    while ((buf[i]=get_char())!='\r')
    {
        put_char(buf[i]);
        i++;
    }
    //3.字符串补'\0';
    buf[i]='\0';
    //put_char('\n');
    return buf;
}

/*
//1.初始化函数
void hal_uart_init()
{
    //rcc章节初始化
    RCC->MP_AHB4ENSETR |= (0x1<<1);//GPIOB ENSETR
    RCC->MP_AHB4ENSETR |= (0x1<<6);//GPIOG ENSETR
    RCC->MP_APB1ENSETR |=(0x1<<16);//UART4 ENSETR
    //gpio章节初始化
    GPIOB->MODER &= (~(0x3<<4));
    GPIOB->MODER |= (0x2<<4);
    GPIOG->MODER &= (~(0x3<<22));
    GPIOG->MODER |= (0x2<<22);
    
    GPIOB->AFRL &= (~(0xf<<8));
    GPIOB->AFRL |= (0x8<<8);
    GPIOG->AFRH &= (~(0xf<<12));
    GPIOG->AFRH |= (0x6<<12);
    //uart章节初始化
    if (USART4->CR1 & (0x1<<0))
    {
        USART4->CR1 &= (~(0x1<<0));//将UE位禁止
    }
    //1.串口初始化 8位数据位 无奇偶校验
    USART4->CR1 &= (~(0x1<<12));
    USART4->CR1 &= (~(0x1<<28));//8数据位
    USART4->CR1 &= (~(0x1<<10));//无奇偶校验
    //2.设置串口一位停止位
    USART4->CR2 &= (~(0x3<<12));
    //3.设置串口的16位采样率
    USART4->CR1 &= (~(0x1<<15));
    //4.设置串口不分频
    USART4->PRESC &=(~(0xf));
    //5.设置串口波特率为115200
    USART4->BRR &=(~(0xffff));
    USART4->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.判断发送数据寄存器是否有数据ISR[7]
    //读0说明发送数据寄存器满,需要等待
    //读1发送数据寄存器为空,才可以发送下一个字节数据
    
    while(!(USART4->ISR & (0x1<<7)));
    
    //2.将要发送的字符,写入到发送数据寄存器中
    USART4->TDR &=(~(0xff));
    USART4->TDR=str;
    //3.判断数据是否发送完成
    //读0发送数据没有完成
    //读1发送数据完成,可以发送下一帧数据
    while(!(USART4->ISR & (0x1<<6)));
}
 
//3.接收一个字符
char get_char()
{
    char ch;
    //1.判断接收寄存器是否有数据可读
    //读0:没有数据可读
    //读1:有数据可读
    while(!(USART4->ISR & (0x1<<5)));
    //2.将接收数据寄存器中的内容读出来
    ch=USART4->RDR;
 
    return ch;
}
//4.发送一个字符串
void put_string(const char* str)
{
    put_char('\n');
    put_char('\r');
    while(*str != '\0')
    {
        put_char(*str);
        str++;
    }
    put_char('\n');
    put_char('\r');
}
char buf[50]={0};
 
//5.接收一个字符串
char* get_string()
{
    //1.循环进行接收
    //2.循环实现,接受一个字符之后,发送一个字符
    //当键盘的回车键按下之后,代表字符串接收结束'\r'
    while(!(USART4->ISR & (0x1<<5)));
    int i=0;
    while ((buf[i]=get_char())!='\r')
    {
        put_char(buf[i]);
        i++;
    }
    //3.字符串补'\0';
    buf[i]='\0';
    //put_char('\n');
    return buf;
}
 */

测试文件

#include "uart4.h"
 
 
 
extern void printf(const char *fmt, ...);
 
int main()
 
{
 
    hal_uart_init();
 
    
 
    while (1)
 
    {
 
        put_char(get_char()+1);
 
        //put_string(get_string());
 
    }
 
    return 0;
 
}
 

实验现象

实验现象2:输入 abc

 

 

 

ARM UART实验 UART 主要是串口通信。本实验就是通过UART0和PC通信。PC那边主要是利用建立一个超级终端实现。 下面的代码主要是实现在PC机的超级终端显示操作菜单。选择相应的菜单,实现对应的功能。     #define GLOBAL_CLK  1 #include "def. 阅读详情

相关推荐

C语言实现ARM板间串口文件传输

本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何利用C语言在ARM微处理器开发板间通过串口传输文件,涵盖了串行通信协议、文件输入输出和ARM架构知识。内容包括串口通信基础、发送端与接收端程序设计、错误处理、以及移植性考虑。 1. 串口通信基础 在信息技术领域,串口通信是设备之间进行数据交换的一个基石,尤其是在嵌入式系统中。本章将概述串口通信的基本原...

weixin_35592186的博客 1232

基于STM32G431RBT6在USART中的应用,实现任意字符串输出输出

把这个语句拿走,放到回调函数中变成这样。

qq_66615940的博客 1499

kettle9.0+ 连接Hadoop报错

kettle bug

x²+(y-√³x²)²=1的博客 1559

《ARM》cortex-A7核UART实验小作业

1)在键盘上输入一个,字符,字符+1,并且打印在串口工具上 2)串口工具输入一个字符串,按下回车,会显示输入的字符串

qq_60071225的博客 451

手把手教你用VSCode+MCUXpresso搭建i.MX RT1062开发环境(附RT-Thread Nano移植)

本文详细介绍了如何使用VSCode和MCUXpresso工具链搭建i.MX RT1062开发环境,包括工具链安装、工程配置、调试技巧以及RT-Thread Nano实时操作系统的移植方法。通过实战步骤和优化建议,帮助开发者快速掌握这款高性能Cortex-M7 MCU的开发流程,提升嵌入式开发效率。

weixin_27014595的博客 392

最简解决 Unity Error Registry configuration is invalid Unable to connect https packages.unity.cn

前言 在学习其他大佬项目的时候,大佬说项目能直接运行,然后我拉下来就报如下错误 Unity报错:[Package Manager]Error Registry configuration is invalid:Unable to connect “https://packages.unity.cn” 翻了很多博发现是 unity3d 中国增强版的原因,中国增强版屏蔽了国外自定义的插件仓库。 安装 非中国增强版后可以成功打开。 然后大家给出的解决方案都比较激进,大抵就是更换Unity版本就OK了。 当然我是觉

Gipsyz的博客 6841

ARM S5PV210 串行通信编程实战

一、串行通信编程实战1 1、整个程序流程分析 (1) 整个串口通信相关程序包含 2 部分:uart_init 负责初始化串口,uart_putc 负责发送一个字节。 2、串口控制器初始化关键步骤 (1) 初始化串口的 Tx 和 Rx 引脚所对应的GPIO(查原理图可知 Rx 和 Rx 分别对应GPA0_1和GPA0_0) 可以看到,S5PV210 上面一共有 4 个 UART 外设。 可以看到,UART0 外设的RXD/TXD 对应的引脚名称如下。 因此,在我们的核心板原理图上可以找到,UART0

weixin_42109053的博客 1327

成本会计(第九版)王忠孝课后习题答案解析

在掌握了基础知识之后,我们还需要培养自己的实际操作能力。此外,在学习过程中,遇到困难时,要及时向老师、同学请教,不要害怕暴露自己的不足。三人行,必有我师,每个人都有值得学习的地方。首先,我们需要认真阅读教材,把基础知识掌握牢固。在这里,我建议大家使用《成本会计(第九版)》的配套练习册,这样可以帮助我们检查学习效果。同时,网上的一些优质课程和论坛也是不错的学习资源,例如网易云课堂、中国大学MOOC等。别担心,这里我给大家推荐一些实用的学习资料和方法,帮助你更好地掌握这门课程。出版社: 大连理工大学出版社。

weixin_58833001的博客 1888

输入输出流-Java

输入和输出流-Java

whdehcy的博客 1456

VCSA的vmware-updatemgr服务无法启动和vSAN界面报“certificate chain is not trusted and thumbprint doesn‘t match”处理

"Unable to update CM service info"和"Server certificate chain is not trusted and thumbprint doesn't match"问题处理

jetliu05的博客 1882

基于树莓派4B设计的厨房环境监测系统_368

本项目设计并实现了一种基于树莓派4B的厨房环境监测系统,提升厨房使用过程中的安全性与智能化水平。系统采用树莓派4B作为主控核心,集成DHT11温湿度传感器、MQ2烟雾传感器、火焰传感器、光敏传感器、水滴检测传感器等多种传感器,实现对厨房环境温湿度、烟雾、火焰、光照与溢水等参数的实时监测,并通过蜂鸣器进行本地报警。系统通过WIFI连接互联网,利用MQTT协议将环境数据上传至华为云物联网平台,实现远程可视化监控。

415

ARM接口实验—串口实验

UART串口实验

weixin_47348012的博客 3381

滑块逆向及流程分析

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

pyzzd的博客 8005

STM32之USART-串口通信(含串口实验详细解析)

STM32之串口通信 - USART(含串口实验详细解析) 开发环境:Window 10 开发工具:Keil uVision5 MDK 硬件:STM32F103 资料参考: 【正点原子】STM32F103开发板资料(A盘); STM32F1开发指南(精英版)-库函数版本.pdf STM32固件库使用手册的中文翻译版.pdf STM32中文参考手册.pdf 注意:本文主要介绍 USART 异步串行模式下的收发器。 文章目录STM32之串口通信 - USART(含串口实验详细解析)STM32F103Z

小朱.小猪的博客 18万+

pytest学习和使用19-pytest断言失败后,怎样保持后续的断言继续执行?(pytest-assume)

【代码】pytest学习和使用19-pytes断言失败后,怎样保持后续的断言继续执行?

虫无涯的博客 1390

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ARM基本接口之串口通信实验

ARM基本接口之串口通信实验实验目的:1.掌握ARM的串行口工作原理;2. 学习并编程实现ARM的UART通信;3. 掌握S3C2440寄存器配置方法。实验步骤:1. 总体步骤:先编译,打开超级终端,启动目标机,待显示2440后,进行创建链接,下载, 运行。 2. 实验过程:先连接超级终端,首次连接失败,原因是:硬件接口接触不良,换了一台电 脑后,成功连接。原来的代码是将字符接収和发送...

Cinderella___的博客 9328

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ARM实现串口收发单个字符和字符串

ARM实现串口收发单个字符和字符串。

qq_44849419的博客 314

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

cc2530串口通讯-收发字符串_单片机C语言之串口通信协议

现实生活中, 我们总是要与人打交道,互通有无。单片机也一样,需要跟各种设备交互。例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。而这个数据的获得过程就是一个通信过程。类似的例子还有控制器通常是单片机或者PLC与变频器的通信。通信的双方需要遵守一套既定的规则也称为协议,这就好比我们人之间的对话,需要在双方都遵守一套语言语法规则才有可能达...

weixin_35867127的博客 1739

ARM - UART4/串口软件实现字符串/字符的收发

ARM - UART4/串口软件实现字符串/字符的收发

欢迎来到斛XX的博客 1511

ARM 实验串口的数据收发

1、键盘输入一个字符,串口回显该字符值加1。2、键盘输入一个字符串,串口回显字符串。

m0_60082979的博客 656

ARM裸机实验 UART串口(S3C2440A) TQ2440

代码适用于TQ2440开发板。开发环境为Keil v5 MDK 串口初始化以及使用流程:(这里没有涉及中断) 1)初始化系统时钟,主要是分频器的设置; 2)初始所使用的串口,包括设置FIFO,AFC,数据传输格式,波特率 串口工作时钟源设置; 3)所用串口对应I/O引脚初始化; 4)收发数据。

程 序 猿 1698

ARM调试(1):两种在keil中实现printf重定向到串口的方法

ARM调试(1):两种在keil中实现printf重定向到串口的方法 文章目录ARM调试(1):两种在keil中实现printf重定向到串口的方法1 系统环境2 说明3 用标准c库实现printf重映射到串口3.1 c库的简介3.2 用标准c库实现printf重映射到串口4 MicroLIB库简介4.1 MicroLIB库由来4.2 MicroLIB库的特点4.3 用MicroLIB库实现printf重映射到串口 1 系统环境 系统:win10 ide:keil5 测试芯片:GD32F450 2 说明

Zhichao_Zhang的博客 1万+

linux arm printf 函数与串口,11、串口实现printf()函数--s3c440

一、概要由于以往的单片机实现printf函数成本太高,基本上不会其上实现printf功能,随着ARM芯片的发展,printf调试受到了极大的欢迎。对于嵌入式软件的开发人员而言,“printf调试(printf-debugging)”这个术语描述了将调试字符串从嵌入式目标空闲的串口压出,并在运行于宿主工作站的终端模拟器上显示结果的常见方法。出于这个目的,许多程序员更喜欢使用有名的printf()C...

weixin_42168341的博客 826

ARM9串口中断

今天学习一下ARM9串口中断部分的内容: 1、对于串口发送函数的处理部分: void Uart_SendByte(int data) { if(whichUart==0) { if(data=='\n') { while(!(rUTRSTAT0 & 0x2)); // Delay(

马道人生 1333

细说ARM MCU的串口发送数据的实现过程

前面的文章介绍了用串口的接收中断来接收数据,本文介绍通过串口从MCU向外发送数据。

wenchm的博客 923

ARM 串口传输字符串

【代码】ARM 串口传输字符串。

weixin_52238362的博客 281
上一篇: 汇编 & C 实现stm32MP157a_ LED1/LED2/LED3点亮
下一篇: stm32mp157a 系统移植 --组网 makefile uboot安全和非安全模式 制作TF启动盘
风铃响了
博客等级 码龄4年 76粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值