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); }
}
效果演示

相关文章:
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 <…...
React学习计划-React16--React基础(五)脚手架创建项目、todoList案例、配置代理、消息订阅与发布
一、使用脚手架create-react-app创建项目 react脚手架 xxx脚手架:用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置(语法检查、jsx编译、devServe…)下载好了所有相关的依赖可以直接运行一个简单的效果 react提供了一个…...
C语言中switch语句中的case后()
基本格式 switch(表达式) { case整型数值1:语句1; ...... case整型数值n:语句n; default:语句n1; } 执行过程 计算“表达式”的值,假设为m从第一个case开始,比较“整型数值1”和m,如果相等,…...
【RocketMQ笔记02】安装RocketMQ可视化工具rocketmq-dashboard
这篇文章,主要介绍如何安装RocketMQ可视化工具rocketmq-dashboard。 目录 一、RocketMQ可视化界面 1.1、下载rocketmq-dashboard 1.2、修改配置文件 1.3、打包工程 1.4、启动rocketmq-dashboard 一、RocketMQ可视化界面 1.1、下载rocketmq-dashboard rocketm…...
AutoSAR(基础入门篇)2.2-AutoSAR架构中的Ports类型与Runnables可运行实体
Ports的类型 一、接口的类型 1、S/R接口 2、C/S接口 Runnables可运行实体...
【Unity】GPU骨骼动画 渲染性能开挂 动画合批渲染 支持武器挂载
GPU骨骼动画视频介绍: GPU顶点动画和GPU骨骼动画实现原理及优缺点对比 性能优化 GPU动画是实现万人同屏的前置条件,在之前的文章中已介绍过GPU顶点动画的实现方法:【Unity】渲染性能开挂GPU Animation, 动画渲染合批GPU Instance_skinmeshren…...
打开相机失败 出现错误的原因
如何解决? Debug中缺少DLL文件 以下参考周姐文档 相机调用步骤 学习相机第三方库的安装 https://blog.csdn.net/Qingshan_z/article/details/117257136书签:QT添加库(静态库和动态库)_Qingshan_z的博客-CSDN博客_qt添加库 添加文…...
什么是阿里云负载均衡SLB?
目录 硬件或软件负载均衡的区别是什么? 什么是阿里云负载均衡SLB? 阿里云传统型负载均衡CLB 硬件或软件负载均衡的区别是什么? 通过专用硬件实现负载均衡,那么整体成本会较高,而且设备容易出现单点故障,…...
Mybatis三 | 动态SQL
目录 if where set ctrl alt l格式化SQL语句 随着用户的输入或外部条件的变化而变化的SQL称为动态SQL if <if>用来判断条件是否成立,使用test属性进行条件判断,如果true,则拼接SQL where wehre元素只会在有条件成立的情况下才插入…...
信号与槽QT4和QT5的区别
信号与槽QT4和QT5的区别 Qt4 connect(btn, SIGNAL(clicked()), this, SLOT(close()));在 Qt 4 中,信号和槽的连接使用了一种不同的语法,这是 Qt 框架特有的,利用了 Qt 的元对象系统(Meta-Object System)。Qt 4 中连接…...
K8S 搜集java应用pod重启前现场 —— 筑梦之路
JAVA技术广泛用于各行各业,而云原生的流行,越来越多的企业将java应用搬进K8S中进行部署管理,OOM是java应用比较常出现的故障问题,对于容器环境的java应用搜集OOM等现场比较有难度,为了持续对应用的优化,搜集…...
php5.6安装mongo扩展
需要依赖 可以参考 php5.6安装openssl扩展 https://pecl.php.net/package/mongo 安装mongo扩展 wget https://pecl.php.net/get/mongo-1.6.16.tgz/Users/hina/Applications/php/5.6.40/bin/phpize./configure --with-php-config/Users/hina/Applications/php/5.6.40/bin/ph…...
简析SoBit 跨链桥图文教程
从BTC网络到Solana网络桥接BRC20 1.打开SoBit平台:在您的网络浏览器中启动SoBit Bridge应用程序。 2.连接您的钱包: 选择SoBit界面右上角的比特币网络来连接您的数字钱包。 3.选择源链、目标链和您想桥接的代币: 从下拉菜单中选择’BTC’作为…...
C#与php自定义数据流传输
C#与php自定义数据流传输 介绍一、客户端与服务器数据传输流程图客户端发送数据给服务器:服务器返回数据给客户端: 二、自定义数据流C#版本数据流PHP版本数据流 三、数据传输测试1.在Unity中创建一个C#脚本NetWorkManager.cs2.服务器www目录创建StreamTe…...
redis和数据库的同步问题
今天突然想起来这个,就是那么突然,上次项目上用过redis,是一个消息已读未读的问题,由于消息挺多的,如果每次都去查数据库,那岂不是裂开,所以就存缓存了。 现在想想,还是不大行&#…...
Flink系列之:深入理解ttl和checkpoint,Flink SQL应用ttl案例
Flink系列之:深入理解ttl和checkpoint,Flink SQL应用ttl案例 一、深入理解Flink TTL二、Flink SQL设置TTL三、Flink设置TTL四、深入理解checkpoint五、Flink设置Checkpoint六、Flink SQL关联多张表七、Flink SQL使用TTL关联多表 一、深入理解Flink TTL …...
Wails中js调用go函数(1种go写法,2种js调用方法)
官方js调用go方法文档:https://wails.io/zh-Hans/docs/howdoesitwork a)在app.go文件里写一个要js调用的go函数: func (a *App) JSCallGo(data1 string) string { return “test” } b)运行 wails dev 命令,…...
【我与java的成长记】之面向对象的初步认识
系列文章目录 能看懂文字就能明白系列 C语言笔记传送门 🌟 个人主页:古德猫宁- 🌈 信念如阳光,照亮前行的每一步 文章目录 系列文章目录🌈 *信念如阳光,照亮前行的每一步* 前言一、什么是面向对象面向过程…...
面试题之二HTTP和RPC的区别?
面试题之二 HTTP和RPC的区别? Ask范围:分布式和微服务 难度指数:4星 考察频率:70-80% 开发年限:3年左右 从三个方面来回答该问题: 一.功能特性 1)HTTP是属于应用层的协议:超文本传输协议…...
初试Kafka
Kafka 是一个分布式流处理平台,通常用作消息中间件,它可以处理大规模的实时数据流。以下是从零开始使用 Kafka 作为消息中间件的基本教程: 步骤 1: 下载和安装 Kafka 访问 Apache Kafka 官方网站:Apache Kafka下载最新的 Kafka …...
智慧树自动刷课插件:3分钟安装的终极学习效率提升指南
智慧树自动刷课插件:3分钟安装的终极学习效率提升指南 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的冗长视频课程烦恼吗?智…...
链路层协议
链路层协议要解决哪些问题。有哪些二层网络,其链路层协议是什么 链路层(数据链路层,OSI模型第二层)的主要功能是在物理层提供的物理连接基础上,提供可靠的数据传输服务。它负责将原始的物理连接转化为无差错、有逻辑结…...
智慧树自动刷课插件终极指南:5分钟快速上手,告别手动刷课烦恼
智慧树自动刷课插件终极指南:5分钟快速上手,告别手动刷课烦恼 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的视频操作而…...
基于以太网转换器的工业交换机接入方案提升数据传输效率与稳定性
一、项目背景 某中型自动化生产企业现有3条生产线,核心控制设备采用10套西门子S7-200 SMART CPU SR40 PLC,负责生产线配料、输送、检测等全流程控制。随着企业数字化升级推进,需实现PLC与上位机、触摸屏的数据实时交互,接入工厂简…...
实时仿真软件SimuRTS
1)简介 SimuRTS是一款实时仿真软件,应用于硬件在环(HIL)嵌入式系统半实物仿真测试。基于SimuRTS的用户界面快速配置I/O通道、数据记录和激励生成。通过丰富的图形元素配置图形控制界面并根据需要显示相应结果,全面测试…...
Python连接Oracle报DPI-1047?别慌,手把手教你用Instant Client 11g/12c/19c搞定(附环境变量避坑指南)
Python连接Oracle报DPI-1047?手把手教你用Instant Client全版本配置指南 当你满怀期待地在Python中写下import cx_Oracle,准备连接公司数据库大展身手时,突然跳出的DPI-1047: Cannot locate a 64-bit Oracle Client library错误提示就像一盆冷…...
Prodigal基因预测工具:3天快速掌握原核生物基因发现终极指南
Prodigal基因预测工具:3天快速掌握原核生物基因发现终极指南 【免费下载链接】Prodigal Prodigal Gene Prediction Software 项目地址: https://gitcode.com/gh_mirrors/pr/Prodigal 你是否正在寻找一款快速、准确的原核生物基因预测工具?Prodiga…...
AMD GPU本地AI模型部署终极指南:ollama-for-amd让你的Radeon显卡焕发新生
AMD GPU本地AI模型部署终极指南:ollama-for-amd让你的Radeon显卡焕发新生 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/…...
我的MIPS五段流水CPU踩坑实录:从Load-Use Hazard到数据前递的完整调试过程
我的MIPS五段流水CPU踩坑实录:从Load-Use Hazard到数据前递的完整调试过程 1. 当流水线遇上数据冒险:一个FPGA初学者的崩溃瞬间 那是一个凌晨三点,我的Verilog仿真波形图上突然出现了一个诡异的数值——寄存器R9被意外写入了0。作为计算机体系…...
光纤干涉条纹投射导向的动态三维形貌测量技术【附程序】
✨ 长期致力于条纹投射轮廓术、光纤干涉条纹投射、正弦相位调制、任意步距相移相位解调、系统标定研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于…...
