12月25日作业

串口发送控制命令,实现一些外设LED 风扇

uart4.c

#include "uart4.h"void uart4_config()
{//1.使能GPIOB\GPIOG\UART4外设时钟RCC->MP_AHB4ENSETR |= (0x1 << 1);RCC->MP_AHB4ENSETR |= (0x1 << 6);RCC->MP_APB1ENSETR |= (0x1 << 16);//===============================================//led时钟使能RCC->MP_AHB4ENSETR |= (0x3 << 4);//设置PE10输出GPIOE->MODER &= (~(0x3<<20));GPIOE->MODER |= (0x1<<20);//设置PE10为推晚输出GPIOE->OTYPER &= (~(0x1<<10));//PE10为低速输出 GPIOE->OSPEEDR &= (~(0x1<<10));//设置无上拉下拉GPIOE->PUPDR &= (~(0x3<<20));
//===============================================//设置PE9输出GPIOE->MODER &= (~(0x3<<18));GPIOE->MODER |= (0x1<<18);//设置PE10为推晚输出GPIOE->OTYPER &= (~(0x1<<18));//PE9为低速输出 GPIOE->OSPEEDR &= (~(0x1<<18));//设置无上拉下拉GPIOE->PUPDR &= (~(0x3<<18));
//===============================================//2.设置PB2\PG11用于UART4的管脚复用//PG11GPIOG->MODER &= (~(0x3 << 22));GPIOG->MODER |= (0x2 << 22);GPIOG->AFRH &= (~(0xf)<<12);GPIOG->AFRH |= (0x6<<12);//PB2GPIOB->MODER &= (~(0x3<<4));GPIOB->MODER |= (0x2<<4);GPIOB->AFRL &= (~(0xf)<<8);GPIOB->AFRL |= (0x1<<11);//3.0串口禁用USART4->CR1 &= (~0x1);//4.设置数据位宽为8位USART4->CR1 &= (~(0x1<<12));USART4->CR1 &= (~(0x1<<28));//5.设置无奇偶校验位USART4->CR1 &= (~(0x1<<10));//6.设置16倍过采样USART4->CR1 &= (~(0x1<<15));//7.设置1位停止位USART4->CR2 &= (~(0x3<<12));//8.设置不分频USART4->PRESC &= (~0xf);//9.设置波特率为115200USART4->BRR = 0x22B;//10.使能发送器USART4->CR1 |= (0x1<<3);//11.使能接收器USART4->CR1 |= (0x1<<2);//12.使能串口USART4->CR1 |= (0x1);
}void putchar(char a)
{//1.先判断发生器是否为空while (!(USART4->ISR & (0x1<<7)));//2.向发送寄存器写入数据USART4->TDR = a;//3.等待发送完成while(!(USART4->ISR & (0x1<<6)));
}char getchar()
{char a;//1.判断接收器是否有准备好的数据,没有就等待while (!(USART4->ISR & (0x1<<5)));//2.读取数据a = USART4->RDR;//3.返回return a;
}
//发送一个字符串
void puts(char *s)
{while(*s){putchar(*s);s++;}putchar('\r');putchar('\n');
}//接收一个字符串
void gets(char *s)
{while(1){*s=getchar();putchar(*s);//键盘输入的内容在串口上回显if(*s=='\r')break;s++;}*s='\0';putchar('\n');}int strcmp(char *src,char *dst)  //指令比较
{while(*src != '\0' && *dst != '\0'){if(*src != *dst){return *src - *dst;}src++;dst++;}if(*src == *dst){return 0;}else if(*src == '\0'){return *dst;}else if(*dst == '\0'){return *src;}}

uart4.h

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

main.c

#include"uart4.h"int main()
{//char a;char buf[128];uart4_config();while(1){/*//接收一个字符数据a = getchar();//发送 接收的字符+1putchar(a+1); putchar('\r');//回车,切换到一行开头putchar('\n');//切换到下一行   */puts("please enter order");gets(buf);if(strcmp(buf,"led_on") == 0){GPIOE->ODR |= (0x1<<10);}else if(strcmp(buf,"led_off") == 0){GPIOE->ODR &= (~(0x1<<10));}else if(strcmp(buf,"fen_on") == 0){GPIOE->ODR |= (0x1<<9);}else if(strcmp(buf,"fen_off") == 0){GPIOE->ODR &= (~(0x1<<9));}else{puts("puts error\n\r");}//puts(buf);  }
}

效果演示

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

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

相关文章

边缘计算云边端全览—边缘计算系统设计与实践【文末送书-10】

文章目录 一.边缘计算1.1边缘计算的典型应用 二.边缘计算 VS 云计算三.边缘计算系统设计与实践【文末送书-10】3.1 粉丝福利&#xff1a;文末推荐与福利免费包邮送书&#xff01; 一.边缘计算 边缘计算是指在靠近物或数据源头的一侧&#xff0c;采用网络、计算、存储、应用核心…

STM32CubeIDE在使用freertos的情况下空间占用情况

因为STM32F103C8T6芯片的存储空间太小了&#xff0c;只有64K&#xff0c;在使用STM32CubeIDE的freertos情况下空间占用情况做个简单的测试&#xff1a; 不使用程序优化&#xff1a; 空间占用情况&#xff1a; 如果使用浮点运算功能的printf&#xff1a; 这个使用空间占用更大…

Isaac Sim 仿真机器人urdf文件导入

本教程展示如何在 Omniverse Isaac Sim 中导入 urdf 一. 使用内置插件导入urdf 安装urdf 插件 方法是转到“window”->“Extensions” 搜索框中输入urdf, 并启用 通过转至Isaac Utils -> Workflows -> URDF Importer菜单来访问 urdf 扩展。 表格中的 1,2,3 对应着…

利用MATLAB设计一个(2,1,7)卷积码编译码器

1、条件&#xff1a; 输入数字信号&#xff0c;可以随机产生&#xff0c;也可手动输入 2、要求&#xff1a; &#xff08;1&#xff09;能显示编码树、网格图或状态转移图三者之一&#xff1b; &#xff08;2&#xff09;根据输入数字信号编码生成卷积码并显示&#xf…

堡垒机的演变过程

堡垒机的概念源自跳板机&#xff08;前置机&#xff09;。早在20世纪90年代末21世纪初期&#xff0c;部分中大型企业为了能对运维人员的远程登录进行集中管理&#xff0c;会在机房部署一台跳板机。跳板机其实就是一台unix/windows操作系统的服务器。并且所有运维人员都需要先远…

疯狂刷屏的“小作文”事件,看到Agent智能体成释放生产力与创新力必然

最近&#xff0c;东方甄选“连续剧”迎来了“圆满”结局。“流量密码”董宇辉新身份连跳三级&#xff0c;被任命为新东方教育科技集团董事长文化助理、兼任新东方文旅集团副总裁&#xff0c;此前&#xff0c;发布18日俞敏洪和董宇辉直播预告海报&#xff0c;董已升为东方甄选高…

Floyd(弗洛伊德)算法总结

知识概览 Floyd算法适合解决多源汇最短路问题&#xff0c;其中源点是起点&#xff0c;汇点是终点。时间复杂度是。 例题展示 题目链接 活动 - AcWing 系统讲解常用算法与数据结构&#xff0c;给出相应代码模板&#xff0c;并会布置、讲解相应的基础算法题目。https://www.acw…

Spring高手之路-Spring初了解

目录 什么是Spring Spring 框架的主要功能 Spring体系结构 核心容器&#xff08;Core Container&#xff09; 数据访问与集成&#xff08;Data Access/Integration&#xff09; Web 层&#xff08;Web Layer&#xff09; AOP 与功能扩展&#xff08;AOP and Instrumenta…

pake协议传输文件magic-wormhole

pake协议传输文件magic-wormhole 1 magic-wormhole简介其他介绍 2 安装magic-wormhole3 使用示范发送文件指定虫洞码长度 接收文件 1 magic-wormhole简介 16.7k star 强推&#xff0c;丝滑、简洁、安全的开源工具——magic-wormhole 项目地址&#xff1a;https://github.com/…

Latex正文引用公式编号,以防公式调整,正文编号对应错误

一、背景 最近在改论文时&#xff0c;需要调整某些公式顺序或添加新的公式&#xff0c;导致正文中的公式引用序号错误。 这里特记录解决方法&#xff0c;即在\begin{eqnarray}后添加lable标签&#xff0c;正文不再是手动输入序号&#xff0c;而是使用命令\eqref{}。 具体如下…

Flink 输出至 Redis

【1】引入第三方Bahir提供的Flink-redis相关依赖包 <!-- https://mvnrepository.com/artifact/org.apache.bahir/flink-connector-redis --> <dependency><groupId>org.apache.bahir</groupId><artifactId>flink-connector-redis_2.11</arti…

初中女教师退休年龄是多少岁

“时光荏苒&#xff0c;岁月如梭。作为老师的你&#xff0c;是否已经开始思考自己的退休生活&#xff1f;是悠然自得地享受晚年&#xff0c;还是继续在教育的道路上发光发热&#xff1f;而无论你的选择如何&#xff0c;了解退休年龄的规定都是你规划未来的重要一环。 女教师的退…

nginx+lua+redis实践

nginxluaredis实践 1.概述 nginx、lua访问redis的三种方式&#xff1a; HttpRedis模块。 指令少&#xff0c;功能单一&#xff0c;适合简单的缓存。只支持get 、select命令。 HttpRedis2Module模块。 功能强大&#xff0c;比较灵活。 lua-resty-redis库 OpenResty。api…

史上最详细的JAVA学生信息管理系统(MySQL实现)

一、项目介绍 为了巩固Java的学习写了一个基于MVC设计模式的学生管理系统。 简单介绍一下MVC设计模式&#xff1a; 1、M也就是Model 模型层&#xff08;也叫数据层&#xff09;主要是通过这个类来进行数据的操作。 2、V是Views 视图层&#xff0c;主要就是来显示页面信息。 3、…

开发辅助一(网关gateway+ThreadLocal封装用户信息+远程调用+读取配置文件+统一异常处理)

网关gateway模块 ①、配置文件&#xff0c;添加各个服务模块的路由路径 gateway:routes:-id: server-cart #微服务名称uri: lb://service-cart #负责均衡predicates:- Path/api/order/cart/**ThreadLocal ①、定义一个工具类 public class AuthContextUtil{private static…

Facebook自动回复脚本编写教程

在数字时代&#xff0c;社交媒体已经成为人们交流和建立联系的重要渠道&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;拥有数十亿的用户&#xff0c;为企业和个人提供了无限的社交可能性。 然而&#xff0c;对于企业和个人来说&#xff0c;在Facebook上保持…

脱壳后多dex文件合并进apk反编译

我们遇到加固后的apk&#xff0c;在脱壳后有很多dex文件&#xff0c;有时候我们只反编译有关键代码的dex会存在一些上下文代码找不到的情况&#xff0c;这时候我们需要多dex一起反编译&#xff0c;并且需要同步看看资源文件怎么办&#xff1f;&#xff1a; 我们可以把多dex塞回…

华为eNSP入门实验,Vlan配置,路由配置,用户模式,链路聚合

文章目录 一、同一交换机下的PC通信二、不交换机下的PC通信三、配置静态路由通信四、路由器rip协议配置五、路由器ospf协议配置六、单臂路由七、通过三层交换机使不同的Vlan能连通八、设备consolo密码模式九、设备consolo用户密码模式&#xff08;AAA模式&#xff09;十、Telne…

虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤

网络技术的不断发展也为网络威胁带来了安全隐患&#xff0c;近期&#xff0c;对于许多大型企业来说&#xff0c;许多企业的虚拟机服务器系统遭到了lockbit2.0/3.0勒索病毒攻击&#xff0c;导致企业所有计算机系统瘫痪&#xff0c;无法正常工作&#xff0c;严重影响了企业的正常…

Python能做大项目(6)Poetry -- 项目管理的诗和远方之一

[Poetry] 是一个依赖管理和打包工具。Poetry 的作者解释开发 Poetry 的初衷时说&#xff1a; 通过前面的案例&#xff0c;我们已经提出了一些问题。但不止于此。 当您将依赖加入到 requirements.txt 时&#xff0c;没有人帮你确定它是否与既存的依赖能够和平共处&#xff0c;这…