ARM cortex-A7核UART实验 收发数据

news/2024/4/26 15:51:44/文章来源:https://blog.csdn.net/weixin_60354809/article/details/128105224

头文件:

 1 #ifndef __UART4_H__                               2 #define __UART4_H__                               3                                                   4 #include "../common/include/stm32mp1xx_rcc.h"     5 #include "../common/include/stm32mp1xx_gpio.h"    6 #include "../common/include/stm32mp1xx_uart.h"    7                                                   8 //UART4串口初始化                                 9 void hal_uart_init(void);                         
10                                                   
11 //发送一个字符                                    
12 void hal_put(const char str);                     
13                                                   
14 //发送一个字符串                                  
15 void hal_put_string(const char* string);          
16                                                   
17 //接收一个字符                                    
18 char get_char(void);                              
19                                                   
20 //接收一个字符串                                  
21 char* get_string(void);                           
22                                                   
23 #endif                                            

源文件:

  1 #include "uart4.h"2 3 //UART4串口初始化4 void hal_uart_init(void)5 {6     /********** RCC 相关寄存器初始化***********/7     RCC->MP_AHB4ENSETR |= (0x1<<1); //使能GPIOB组控制器8     RCC->MP_AHB4ENSETR |= (0x1<<6); //使能GPIOG组控制器9     RCC->MP_APB1ENSETR |= (0x1<<16); //使能UART4组控制器10 11     /********** GPIO 相关寄存器初始化***********/12     GPIOB->MODER &= (~(0x3<<4)); //设置PB2引脚为复用功能13     GPIOB->MODER |= (0x2<<4);14     GPIOG->MODER &= (~(0x3<<22)); //设置PG11引脚为复用功能15     GPIOG->MODER |= (0x2<<22);16 17     GPIOB->AFRL &= (~(0xf<<8)); //设置PB2引脚复用功能为 URAT4_RX18     GPIOB->AFRL |= (0x1<<11);19     GPIOG->AFRH &= (~(0xf<<12)); //设置PG11引脚复用功能为 URAT4_TX20     GPIOG->AFRH |= (0x6<<12);21 22     /********** UART4 相关寄存器初始化***********/23     //1.USART_CR1:设置数据位宽度,以及对应的控制器使能(UART控制器使能,发送寄存器使能,接收寄存器使能)24     USART4->CR1 &= (~(0x1<<28));25     USART4->CR1 &= (~(0x1<<12));26     USART4->CR1 &= (~(0x1<<15));27     USART4->CR1 &= (~(0x1<<10));28     USART4->CR1 |= (0x1<<3);29     USART4->CR1 |= (0x1<<2);30     USART4->CR1 |= 0x1;31 32     //2.USART_CR2:设置串口停止位33     USART4->CR2 &= (~(0x3<<12));34 35     //3.USART_BRR:设置串口波特率36     USART4->BRR = 0x22b;37 38     //7.USART_PRESC:设置串口分频器39     USART4->PRESC &= (~0xf);40 41 }42 43 //发送一个字符44 void hal_put(const char str)45 {46     //判断发送数据寄存器是否有数据47     while(!(USART4->ISR & (0x1<<7))); //位7为1时,可以发送数据,跳出循环48 49 //  USART4->TDR &= (~(0xff));50     USART4->TDR = str;51 52     //判断发送数据寄存器是否发送完成53     while(!(USART4->ISR & (0x1<<6)));//位6为1时,发送数据完成,跳出循环54 }55 56 //发送一个字符串57 void hal_put_string(const char* string)                                                                                                58 {59     //判断字符串结束标志60     while('\0' != *string)61     {62         hal_put(*string);63         string++;64     }65 }66 67 //接收一个字符68 char get_char(void)69 {70     //判断接收数据寄存器是否接收到数据71     while(!(USART4->ISR & (0x1<<5))); //位5为1时,可以读取数据,跳出循环72     return (char)USART4->RDR;73 }74 75 char buf[128] = "";76 //接收一个字符串77 char* get_string(void)78 {79     //键盘的回车键按下,对应的字符'\r'80     int i;81     for(i=0; i<(sizeof(buf)-1); i++)82     {83         buf[i] = get_char();84         hal_put(buf[i]);85 86         if('\r' == buf[i])87         {88             break;89         }90     }91     buf[i] = '\0';92     hal_put('\n');93 94     return buf;95 96 }97 

主函数测试:

 1 #include "uart4.h"2 3 extern void printf(const char *fmt, ...);4 void delay_ms(int ms)5 {6     int i,j;7     for(i = 0; i < ms;i++)8         for (j = 0; j < 1800; j++);9 }
10 
11 
12 int main()
13 {
14     hal_uart_init();
15     printf("ARM,YES!!!\n");
16     while(1)
17     {
18         //hal_put(get_char()+1);              
19         hal_put_string(get_string());
20     }
21     return 0;
22 }

实验现象:

 

 

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

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

相关文章

【Android App】获取照片里的位置信息及使用全球卫星导航系统(GNSS)获取位置实战(附源码和演示 超详细)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、获取照片里的位置信息 手机拍摄的相片还保存着时间、地点、镜头参数等信息&#xff0c;这些信息由相片接口工具ExifInterface管理&#xff0c;它的常用方法说明如下&#xff1a; getLatLong&#xff1a;获取相片拍摄时候的…

【人工智能 机器学习 深度学习】基础选择题1~30题 练习

目录 一、1~10题1.1 题目1.2 答案二、11~20题2.1 题目2.2 答案三、21~30题3.1 题目3.2 答案写在前面:适用于对 人工智能&机器学习&深度学习 进行复习的同学,同时,也可以通过基础题目的练习,加深理解。 一、1~10题 均是先给出10道题目,而后给出 10道题目的答案。 …

Python用广义加性模型GAM进行时间序列分析

每当你发现一个与时间对应的趋势时&#xff0c;你就会看到一个时间序列。我们围绕广义加性模型GAM技术进行一些咨询&#xff0c;帮助客户解决独特的业务问题。研究金融市场表现和天气预报的事实上的选择&#xff0c;时间序列是最普遍的分析技术之一&#xff0c;因为它与时间有着…

关于TreeView的简单使用(Qt6.4.1)

前言 TreeView是在Qt6.3中加入的&#xff0c;弥补了Qt中无官方树图。笔者上手尝试了下&#xff0c;虽然有点麻烦&#xff0c;但官方也做了不少简化。 本次教程&#xff0c;笔者创建一个简单的示例&#xff0c;以帮助读者使用TreeView。 一、创建模型类 当前模型需要使用C定义…

婚纱预订小程序开发,商家线上展示平台

婚纱代表着纯洁与忠贞&#xff0c;也是爱情永恒的见证者&#xff0c;穿上洁白的婚纱嫁给自己心爱的人是每个女生的梦想&#xff0c;婚纱对于每一个女生来说都有着重要的意义&#xff0c;所以选择一件美丽且适合的婚纱非常重要&#xff0c;因此人们在选择婚纱时会花费很多的时间…

Web3中文|区块链游戏的成长之痛

来源 | cointelegraph 编译 | DaliiNFTnews.com 在过去十年中&#xff0c;手机游戏已成为互动娱乐产业的重要支柱&#xff0c;得益于智能手机的普及&#xff0c;来自世界各地的用户都成为了硬核游戏玩家。 现在&#xff0c;区块链技术的出现正在推动一种范式的转变&#xff…

KNN最近邻算法分析及实现(Python实现)

KNN最近邻算法分析及实现&#xff08;代码附录后文&#xff09;1 KNN算法简介2 KNN基本原理3 简单实现KNN分析代码附录(Python)&#xff1a;呆&#xff0c;站住别跑&#xff0c;留个赞&#xff0c;给个关注嘛都看到这了Author&#xff1a; Nirvana Of Phoenixl Proverbs for yo…

计算机组成原理习题课第三章-1(唐朔飞)

计算机组成原理习题课第三章-1&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

[附源码]SSM计算机毕业设计校园疫情防控管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

网络结点中心性 Centrality

结点中心性 node centrality 被认为是度量网络结点重要性的重要指标 常见的结点中心性有以下7种&#xff1a; &#xff08;以下各中心的概念在不同地方的定义可能不同&#xff0c;实际计算应查看使用工具的具体实现&#xff09; 1、度中心性 degree centrality 常被直接称为…

Spring Security权限管理原理

1.简介 授权是更具系统提前设置好的规则&#xff0c;给用户分配可以访问某一资源的权限&#xff0c;用户根据自己所具有的权限&#xff0c;去执行相应的操作&#xff0c;spring security提供的权限管理功能主要有两种&#xff1a; 基于过滤器的权限管理功能&#xff08;Filte…

Python学习笔记-数字类型

目录 1. 数字类型 1.1 整型 1.2 浮点数 1.3 复数 1.4 布尔类型 2. 常用内置数值计算函数库 3. 随机数函数 本文记录python中的基本数字类型信息&#xff0c;以及一些其他的相关知识点。 1. 数字类型 python中用于标识数字或者数值的数据类型&#xff0c;主要有如下分类…

盘点程序员的花式赚外快的骚操作

2022世界杯比赛难得如期开幕了&#xff0c;卡塔尔王子的表情包想必大家已经看到眼晕。 我拿2200亿和你玩&#xff0c;你踢一个0&#xff1a;2过不过分啊~ 现实中的投资可不比卡塔尔王子的表情包失落更多&#xff0c;毕竟投资有风险入行需谨慎。 然而悲惨的事实是&#xff0c;…

量表如何分析?

一、什么是量表 量表是一种测量工具&#xff0c;通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量&#xff0c;最常见到的就是李克特量表。 ‍1、定义&#xff1a;李克特量表 李克特量表是最常用的量表&#xff0c;是由美国社会心…

大数据平台功能

一 前言 计算机设备和信息数据的相互融合&#xff0c;对各个行业来说都是一次非常大的进步&#xff0c;已经渗入到工业、农业、商业、军事等领域&#xff0c;同时其大数据平台软件也得到一定发展。就目前来看&#xff0c;各类编程语言的发展、人工智能相关算法的应用、大数据时…

求树的直径算法以及证明

以下为两次dfs&#xff08;bfs&#xff09;的做法以及正确性证明。 算法步骤 &#xff08;1&#xff09;任取树上一点S&#xff0c;以S为源点BFS得S到各个顶点的d值&#xff1b; &#xff08;2&#xff09;取d值最大者之一为P&#xff0c;再以P为源点BFS得P到各个顶点的d值&am…

【计算机】可信平台模块Trusted Platform Module - TPM

简述 Brief Introduction TPM内部功能模块示意图&#xff1a; 引述 Trusted Platform Module Technology Overview (Windows) | Microsoft Learn&#xff1a; Trusted Platform Module (TPM) technology is designed to provide hardware-based, security-related functions.…

「区块链+数字身份」:DID 身份认证的新战场

美国经济学家布莱恩 • 阿瑟在其著作《技术的本质》中&#xff0c;写过这么一句话&#xff1a;「技术总是进行着这样一种循环&#xff0c;为解决老问题去采用新技术&#xff0c;新技术又引发新问题&#xff0c;新问题的解决又要诉诸更新的技术」。 区块链技术之所以能流行&…

在MacOS上实现两个网络调试助手的UDP通信测试

文章目录一、背景二、网络调试助手软件三、UDP通信过程一、背景 因为有一个项目要中会使用本机中两个应用程序之间的UDP通信。 因此本文记录一下怎么在MacOS上实现两个网络调试助手的UDP通信测试。 二、网络调试助手软件 我使用的网络调试助手软件是&#xff1a;网络调试助…

Redis实战——优惠券秒杀(超卖问题)

1 实现优惠券秒杀功能 下单时需要判断两点&#xff1a;1.秒杀是否开始或者结束2.库存是否充足 所以&#xff0c;我们的业务逻辑如下 1. 通过优惠券id获取优惠券信息 2.判断秒杀是否开始&#xff0c;如果未返回错误信息 3.判断秒杀是否结束&#xff0c;如果已经结束返回错误…