ARM学习

uart.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);//使能GPIO的外设时钟RCC-> MP_AHB4ENSETR |=(0x3<<4);//设置PE10为输出GPIOE->MODER &= (~ (0x3<<20));GPIOE->MODER |= (0x1<<20);//设置PF10为输出GPIOF->MODER &= (~ (0x3<<20));GPIOF->MODER |= (0x1<<20);//设置PE8为输出GPIOE->MODER &= (~ (0x3<<16));GPIOE->MODER |= (0x1<<16);//设置PE10为推挽输出GPIOE->OTYPER&= (~ (0x1<<10));//设置PF10为推挽输出GPIOF->OTYPER &= (~ (0x1<<10));//设置PE8为推挽输出GPIOE->OTYPER&= (~ (0x1<<8));//设置PE10为低速输出GPIOE->OSPEEDR &= (~ (0x3<<20));//设置PF10为低速输出GPIOF->OSPEEDR &= (~ (0x3<<20));//设置PE8为低速输出GPIOE->OSPEEDR &= (~ (0x3<<16));//设置PE10为无上拉下拉电阻GPIOE->PUPDR &= (~ (0x3<<20));//设置PF10为无上拉下拉电阻GPIOF->PUPDR &= (~ (0x3<<20));//设置PE8为无上拉下拉电阻GPIOE->PUPDR &= (~ (0x3<<16));//三盏灯默认是关闭GPIOE->ODR&= (~ (0x1<<10));GPIOF->ODR &= (~ (0x1<<10));GPIOE->ODR&= (~ (0x1<<8));
}//发送单个字符
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('\n');putchar('\r');
}//接收字符串
void gets(char *s)
{while(1){//循环接收单个字符,当检测到回车键‘\r’被按下,结束*s=getchar();putchar(*s);if(*s == '\r')break;s++;} //在接收的字符串最后补上一个'\0'*s='\0';putchar('\n');putchar('\r');//发送一个'\n'表示在串口工具下一行进行显示
}int strcmp(char *s,char *q)
{while(*s == *q && *s ){s++;q++;}return *s -*q;
}

uart.h

#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_rcc.h"
void uart4_config();
void putchar(char dat);
char getchar();
void puts(char *s);
void gets(char *s);
int strcmp(char *s,char *q);
#endif

main.c

#include "uart4.h"void dealy_ms(int ms)
{for(int i = 0;i<ms;i++){for(int j = 0;j<2000;j++){}}
}int main()
{//uart4初始化uart4_config();char a[40];while(1){gets(a);if( strcmp(a,"on")==0){GPIOE->ODR |=  (0x1<<10);GPIOF->ODR |=  (0x1<<10);GPIOE->ODR |= (0x1<<8);}if(strcmp(a,"off")==0){GPIOE->ODR&= (~ (0x1<<10));GPIOF->ODR &= (~ (0x1<<10));GPIOE->ODR&= (~ (0x1<<8));}puts(a);  //现象,发送a,输出b}return 0;
}

效果演示

收发消息点亮灯

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

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

相关文章

服务器负载均衡SLB/加密原理

多台服务器提供相同的服务 SLB(server load balancing) 多台服务器对应一个虚拟地址&#xff0c;该地址是防火墙虚拟出来的。 服务器负载均衡功能仅支持IPV4协议 多通道协议仅支持FTP协议

【架构-13】云原生架构

云原生架构产生背景&#xff1f; &#xff08;1&#xff09;大量资源被占用且难以分享&#xff0c;上云后&#xff0c;云厂商提供统一的IaaS能力和云服务。 &#xff08;2&#xff09;提供极致性能的云原生算力。 &#xff08;3&#xff09;集成服务&#xff0c;构建管理数据、…

Android Studio通过修改文件gradle-wrapper.properties内容下载gradle

一、问题描述 在Android Studio中新建项目后会下载你所新建的项目的activity/gradle/wrapper目录下所配置的gradle-7.3.3-bin.zip包&#xff08;笔者的是该版本包&#xff09;&#xff0c;而大多数时候会下载失败&#xff0c;如下 二、解决办法 新建工程后&#xff0c;取消下…

AI术语大全:AGI、LLM、GenAI、GPT、ChatGPT和AIGC是什么意思?

讲动人的故事,写懂人的代码 自2022年底ChatGPT在全球AI界闪亮登场以后,你是不是经常听到AGI、LLM、GenAI、GPT和AIGC这几个词,但总是分不清它们到底是什么意思? 今天,我就用简单的话来给你讲讲这些词到底是什么意思。 AI,人工智能(Artificial Intelligence),就是让机…

一比一实现ChatGPT流式接口前端显示效果(打字机效果)【对比几种不同的流式实现方案】

前端实现GPT或者其他大模型的流式推送的数据接收可以通过EventSource、Axios、或者基于EventSource实现的microsoft/fetch-event-source插件库&#xff1b; GPT官方是基于原生EventSource实现的流式数据接收&#xff0c;我们作为个人开发使用可以使用Axios或者使用microsoft/fe…

JavaWeb开发03-Mybatis入门-基础操作-XML映射文件-动态SQL

一、Mybatis-入门 Java程序控制数据库 1.入门 定义实体类&#xff1a;一定要和表中的字段一一对应 配置连接数据库数据 建立Mapper层语句&#xff0c;来获取数据库数据以及将其封装到user的list中去。 2.配置SQL提示 为了进行查询数据库中有哪些表&#xff0c;所以得连接数据…

【AngularJs】前端使用iframe预览pdf文件报错

<iframe style"width: 100%; height: 100%;" src"{{vm.previewUrl}}"></iframe> 出现报错信息&#xff1a;Cant interpolate: {{vm.previewUrl}} 在ctrl文件中信任该文件就可以了 vm.trustUrl $sce.trustAsResourceUrl(vm.previewUrl);//信任…

FPGA - 仲裁器的设计实现

一&#xff0c;为什么做仲裁 在多主单从的设计中&#xff0c;当多个源端同时发起传输请求时&#xff0c;这个时候就需要仲裁器来根据优先级来判断响应哪一个源端&#xff0c;向其传输数据。比如&#xff1a;以太网仲裁&#xff0c;DDR仲裁&#xff0c;光纤传图仲裁..... 二&a…

android wifi直连 wifip2pmanager

android wifi直连 wifip2pmanager&#xff1b;使用WiFi 直连&#xff0c;然后通过udp进行通讯。 Android WiFi 直连&#xff08;Wi-Fi Direct&#xff0c;也称为Wi-Fi P2P&#xff09;是一种让两台或多台设备通过Wi-Fi技术直接进行点对点连接的技术&#xff0c;无需借助传统的无…

iOS知识点 ---- 离屏渲染

iOS 中的离屏渲染&#xff08;Off-Screen Rendering&#xff09;是指在绘制某些复杂图形或特殊效果时&#xff0c;系统无法直接在当前屏幕缓冲区进行绘制&#xff0c;而是需要先在额外的离屏缓冲区&#xff08;Off-Screen Buffer&#xff09;中完成渲染工作&#xff0c;然后再将…

electron打包编译国产统信uos系统 arm架构 x86架构 linux mac等环境

electron v21版本以上统信UOS会提示gbm_bo_map错误&#xff0c;可使用v8~v21版本的electron 打包linux包需要再linux系统下运行编译&#xff0c;arch可以指定架构 如果要在统信uos上运行&#xff0c;需要打包成deb格式&#xff0c;在target中修改成deb 或者用第三方软件把app…

three.js捋文档的记录笔记(六):场景 几何体 材质 物体 相机 渲染器的简单理解

三维场景Scene const scene new THREE.Scene();物体形状&#xff1a;几何体 Geometry //创建一个长方体几何对象Geometry const geometry new THREE.BoxGeometry(100, 100, 100); 物体外观&#xff1a;材质Material //创建一个材质对象Material const material new THREE.M…

在Vue3中如何使用H.265视频流媒体播放器EasyPlayer.js?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#…

【AIGC调研系列】Grok-1.5v与Gpt-4v的效果对比

Grok-1.5V与GPT-4V的效果对比中&#xff0c;Grok-1.5V在多个领域和基准测试中表现优于GPT-4V。具体来说&#xff0c;Grok-1.5V在多学科推理、文档理解、科学图表处理等方面表现出色[1]。它还特别强调了其在理解物理世界的能力上的优势[4][8][12]&#xff0c;并且在RealWorldQA基…

农作物数据分析

,表中文名,表英文名,字段中文名,字段英文名,字段类型,字段描述,字段权限,字段权限描述,字段权限类型 0,cropinfo,作物信息表,作物ID,cropid,UUIDField, 1,cropinfo,作物信息表,作物名称,cropname,CharField, 2,cropinfo,作物信息表,品种,variety,CharField, 3,cropinfo,作物信息…

C语言面试题之奇偶链表

奇偶链表 实例要求 1、给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表&#xff1b;2、第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推&#x…

单链表接口函数的实现(增删查改)

一、单链表的实现形式以及接口函数的声明 #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef int DataType ;typedef struct SListNode {DataType data;struct SListNode* next; }SLTNODE; void SLTPrint(SLTNODE* phead);//打印链表 SLTNO…

Wpf 使用 Prism 实战开发Day20

备忘录功能页面完善以及优化 备忘录功能基本跟前一章节的待办事项差不多一至&#xff0c;就不再做过多的笔述了 一.备忘录功能完整页面源码 MemoView.xaml <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2006/xam…

33、链表-排序链表

思路&#xff1a; 首先排序可以使用集合将所有节点放入集合中&#xff0c;然后再根据每个节点值进行排序。这个可以很容易做到&#xff0c;不再赘述 其次就是直接在链表上排序&#xff0c;如何排序可以使用归并排序的方式&#xff0c;代码如下&#xff1a; class Solution {…

opencv | 编译缺失ippicv相关文件解决方案

1.执行cmake后&#xff0c;查看控制台输出信息 ~/VM_data/opencv-4.9.0$ cd buile_temp ~/VM_data/opencv-4.9.0/buile_temp$ cmake ..2.去浏览器打开链接&#xff0c;下载对应的压缩包&#xff0c;解压到 路径&#xff1a;/3rdparty/ippicv/