当前位置: 首页 > news >正文

12.11

1.q,w,e亮led1,2,3;

    a,s,d灭led1,2,3;

main.c

#include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++);}}int main(){//1.串口的初始化uart4_init();//LED初始化all_led_init();char a;//现象是发送一个a串口工具打印一个bwhile(1){//2.从串口读取一个字符a=mygetchar();//3.将读取到的字符+1发送回去myputchar(a);switch (a){case 'q': led1_on();break;case 'w': led2_on();break;case 'e': led3_on();break;case 'a': led1_off();break;case 's': led2_off();break;case 'd': led3_off(); break;   }}return 0;}

led.h

#ifndef __LED_H__
#define __LED_H__typedef struct
{unsigned int moder;unsigned int otyper;unsigned int ospeedr;unsigned int pupdr;unsigned int idr;unsigned int odr;unsigned int bsrr;
} gpio_t1;#define GPIOE1 ((gpio_t1 *)0X50006000)
#define GPIOF1 ((gpio_t1 *)0X50007000)
#define RCC_MP_AHB4ENSETR (*(unsigned int *)0X50000a28)
void all_led_init();
void led1_on();
void led2_on();
void led3_on();
void led1_off();
void led2_off();
void led3_off();#endif

uar1.h

#ifndef __UART_H__
#define __UART_H__
#include"stm32mp1xx_gpio.h"
#include"stm32mp1xx_rcc.h"
#include"stm32mp1xx_uart.h"
void uart4_init();
void myputchar(char i);
char mygetchar();
#endif

led.c

#include "led.h"
void all_led_init()
{// 1.使能外设时钟RCC_MP_AHB4ENSETR |= (0x3 << 4);// 2.设置PF10 PE10 PE8为输出输出GPIOE1->moder &= (~(0x3 << 20));GPIOE1->moder |= (0x1 << 20);GPIOF1->moder &= (~(0x3 << 20));GPIOF1->moder |= (0x1 << 20);GPIOE1->moder &= (~(0x3 << 16));GPIOE1->moder |= (0x1 << 16);// 3.设置推挽输出GPIOE1->otyper &= (~(0x1 << 10));GPIOF1->otyper &= (~(0x1 << 10));GPIOE1->otyper &= (~(0x1 << 8));// 4.设置输出速度为低速GPIOE1->ospeedr &= (~(0x3 << 20));GPIOF1->ospeedr &= (~(0x3 << 20));GPIOE1->ospeedr &= (~(0x3 << 16));// 5.设置无上拉下拉GPIOE1->pupdr &= (~(0x3 << 20));GPIOF1->pupdr &= (~(0x3 << 20));GPIOE1->pupdr &= (~(0x3 << 16));
}void led1_on()
{GPIOE1->odr |= (0x1 << 10);
}
void led2_on()
{GPIOF1->odr |= (0x1 << 10);
}
void led3_on()
{GPIOE1->odr |= (0x1 << 8);
}void led1_off()
{GPIOE1->odr &= (~(0x1 << 10));
}
void led2_off()
{GPIOF1->odr &= (~(0x1 << 10));
}
void led3_off()
{GPIOE1->odr &= (~(0x1 << 8));
}

uar1.c

#include"uar1.h"//串口数据初始化
void uart4_init()
{//设置UART4的RCc时钟使能//RCC_MP_APB1ENSETR[16]->1RCC->MP_APB1ENSETR |= (0x1<<16);//设置GPIOB和GPIOG的时钟使能//RCC_MP_AHB4ENSETR[6]->1//RCC_MP_AHB4ENSETR[1]->1RCC->MP_AHB4ENSETR |= (0x1<<1);RCC->MP_AHB4ENSETR |= (0X1<<6);//设置PG11和PB2功能复用为UART4功能//PG11//GPIOG_MODER[23:22]->10GPIOG->MODER &= (~(0X3<<22));GPIOG->MODER |= (0X2<<22);//GPIOG_AFRH[15:12]->0110    GPIOG->AFRH &= (~(0xf<<12));GPIOG->AFRH |= (0x6<<12);//PB2//GPIOB_MODER[5:4]->10//GPIOB_AFRL[11:8]->1000GPIOB->MODER &= (~(0x3<<4));GPIOB->MODER |= (0X2<<4);GPIOB->AFRL &= (~(0xF<<8));GPIOB->AFRL |= (0x8<<8);//禁用串口USART4->CR1 &=(~0x1);//设置数据8个数据位 CR1[28]->0  CR1[12]-》0USART4->CR1 &= (~(0X1<<28));USART4->CR1 &= (~(0X1<<12));//设置没有校验位CR1[10]->0USART4->CR1 &= (~(0X1<<10));//设置1个停止位CR2[13:12]->00USART4->CR2 &= (~(0x3<<12));//设置16倍采样 CR1[15]->0USART4->CR1 &= (~(0X1<<15));//设置波特率为115200 BRR=0X22BUSART4->BRR |= 0X22B;//设置1分频 PRESC[3:0]->0000USART4->PRESC &= (~(0XF));//使能发送器 CR1[3]->1USART4->CR1 |= (0X1<<3);//使能接收器 CR1[2]->1USART4->CR1 |= (0X1<<2);//使能串口 CR1[0]->1USART4->CR1 |= (0X1);
}
//封装函数发送一个字符数据
void myputchar(char c)
{//判断发送数据寄存器有没有数据,没有数据时可以发送while(!(USART4->ISR&(0X1<<7)));USART4->TDR=c;//将要发送的数据保存在发送寄存器中while(!(USART4->ISR&(0X1<<6)));//数据传输完成,函数结束
}
char mygetchar()
{char c;//判断是否有数据准备好while(!(USART4->ISR&(0X1<<5)));//数据传输完成,函数结束c=USART4->RDR;return c;}

2.字符串点亮

uar1.c

#include"uar1.h"
#include"led.h"
char buf[51]={0};
//串口数据初始化
void uart4_init()
{//设置UART4的RCc时钟使能//RCC_MP_APB1ENSETR[16]->1RCC->MP_APB1ENSETR |= (0x1<<16);//设置GPIOB和GPIOG的时钟使能//RCC_MP_AHB4ENSETR[6]->1//RCC_MP_AHB4ENSETR[1]->1RCC->MP_AHB4ENSETR |= (0x1<<1);RCC->MP_AHB4ENSETR |= (0X1<<6);//设置PG11和PB2功能复用为UART4功能//PG11//GPIOG_MODER[23:22]->10GPIOG->MODER &= (~(0X3<<22));GPIOG->MODER |= (0X2<<22);//GPIOG_AFRH[15:12]->0110    GPIOG->AFRH &= (~(0xf<<12));GPIOG->AFRH |= (0x6<<12);//PB2//GPIOB_MODER[5:4]->10//GPIOB_AFRL[11:8]->1000GPIOB->MODER &= (~(0x3<<4));GPIOB->MODER |= (0X2<<4);GPIOB->AFRL &= (~(0xF<<8));GPIOB->AFRL |= (0x8<<8);//禁用串口USART4->CR1 &=(~0x1);//设置数据8个数据位 CR1[28]->0  CR1[12]-》0USART4->CR1 &= (~(0X1<<28));USART4->CR1 &= (~(0X1<<12));//设置没有校验位CR1[10]->0USART4->CR1 &= (~(0X1<<10));//设置1个停止位CR2[13:12]->00USART4->CR2 &= (~(0x3<<12));//设置16倍采样 CR1[15]->0USART4->CR1 &= (~(0X1<<15));//设置波特率为115200 BRR=0X22BUSART4->BRR |= 0X22B;//设置1分频 PRESC[3:0]->0000USART4->PRESC &= (~(0XF));//使能发送器 CR1[3]->1USART4->CR1 |= (0X1<<3);//使能接收器 CR1[2]->1USART4->CR1 |= (0X1<<2);//使能串口 CR1[0]->1USART4->CR1 |= (0X1);
}
//封装函数发送一个字符数据
void myputchar(char c)
{//判断发送数据寄存器有没有数据,没有数据时可以发送while(!(USART4->ISR&(0X1<<7)));USART4->TDR=c;//将要发送的数据保存在发送寄存器中while(!(USART4->ISR&(0X1<<6)));//数据传输完成,函数结束
}
char mygetchar()
{char c;//判断是否有数据准备好while(!(USART4->ISR&(0X1<<5)));//数据传输完成,函数结束c=USART4->RDR;return c;}//输出一个字符串
void puts(char *s)
{while(*s){myputchar(*s);s++;}myputchar('\n');//切换到下一行myputchar('\r');//切换到一行的开头
}//读取一个字符串
char *gets()
{unsigned int i;for(i=0;i<50;i++){buf[i]=mygetchar();//接受字符串myputchar(buf[i]);//回显if(buf[i]=='\r')break;}buf[i]='\0';myputchar('\n');//换行return buf;
}
//字符串比较
int strcmp(char *str,char *dst)
{while(*str){if(*str != *dst){return 1;}   str++;dst++;          }return 0;
}
void deal(char*str)
{if(strcmp(str,"led1_on")==0){led1_on();}else if(strcmp(str,"led1_off")==0){led1_off();}else if(strcmp(str,"led2_on")==0){led2_on();}else if(strcmp(str,"led2_off")==0){led2_off();}else if(strcmp(str,"led3_on")==0){led3_on();}else if(strcmp(str,"led3_off")==0){led3_off();}
}

 main.c

#include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++);}}int main(){all_led_init();//1.串口的初始化uart4_init();char a;char *str;//现象是发送一个a串口工具打印一个bwhile(1){myputchar('\n');//切换到下一行myputchar('\r');//切换到一行的开头//2.从串口读取一个字符//a=mygetchar();//3.将读取到的字符+1发送回去//myputchar(a+1);str=gets();// puts(str);deal(str);}return 0;}

 

相关文章:

12.11

1.q&#xff0c;w&#xff0c;e亮led1&#xff0c;2&#xff0c;3&#xff1b; a&#xff0c;s&#xff0c;d灭led1&#xff0c;2&#xff0c;3&#xff1b; main.c #include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for…...

Spring JdbcTemplate

一、简介 Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作。它是 spring 框架中提供的一个对象&#xff0c;是对原始 Jdbc API 对象的简单封装。spring 框架为我们提供了很多的操作模板类。 针对操作关系型数据&#xff1a; jdbcTemplateHibe…...

力扣编程题算法初阶之双指针算法+代码分析

目录 第一题&#xff1a;复写零 第二题&#xff1a;快乐数&#xff1a; 第三题&#xff1a;盛水最多的容器 第四题&#xff1a;有效三角形的个数 第一题&#xff1a;复写零 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路&#xff1a; 上期…...

实现安装“自由化”!在Windows 11中如何绕过“您尝试安装的应用程序未通过微软验证”

这篇文章描述了如果你不能安装应用程序,而是当你在Windows 11中看到消息“您尝试安装的应用程序未通过微软验证”时该怎么办。完成这些步骤将取消你安装的应用程序必须经过Microsoft验证的要求。 使用设置应用程序 “设置”应用程序提供了绕过此警告消息的最简单方法,以便你…...

【mysql】下一行减去上一行数据、自增序列场景应用

背景 想获取if_yc为1连续账期数据 思路 获取所有if_yc为1的账期数据下一行减去上一行账期&#xff0c;如果为1则为连续&#xff0c;不等于1就为断档获取不等于1的最小账期&#xff0c;就是离当前账期最近连续账期 代码 以下为mysql语法&#xff1a; select acct_month f…...

CLIP在Github上的使用教程

CLIP的github链接&#xff1a;https://github.com/openai/CLIP CLIP Blog&#xff0c;Paper&#xff0c;Model Card&#xff0c;Colab CLIP&#xff08;对比语言-图像预训练&#xff09;是一个在各种&#xff08;图像、文本&#xff09;对上进行训练的神经网络。可以用自然语…...

入职字节外包一个月,我离职了。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…...

SpringBoot的web开发

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 web开发1 web场景1.1 自动配置1.2 默认效果 &#x1f48e;总结 web开发 SpringBoot的web开发能力是由SpringMVC提供的 1 web场景 1.1 自动配置 整合web场景 <dependency><groupId>org.springframewo…...

传染病传播速度

题干 R0值是基本传染数的简称&#xff0c;指的是在没有采取任何干预措施的情况下&#xff0c;平均每位感染者在传染期内使易感者个体致病的数量。数字越大说明传播能力越强&#xff0c;控制难度越大。一个人传染的人的数量可以用幂运算来计算。假设奥密克戎的R0为10&#xff0…...

前端打包环境配置步骤

获取node安装包并解压 获取node安装包 wget https://npmmirror.com/mirrors/node/v16.14.0/node-v16.14.0-linux-x64.tar.xz 解压 tar -xvf node-v16.14.0-linux-x64.tar.xz 创建软链接 sudo ln -s 此文件夹的绝对路径/bin/node /usr/local/bin/node&#xff0c;具体执行如下…...

css的4种引入方式--内联样式(标签内style)、内部样式表(<style>)、外部样式表(<link>、@import)

1.内联样式&#xff08;Inline Styles&#xff09;&#xff1a;可以直接在HTML元素的style属性中定义CSS样式。 例如&#xff1a; <p style"color: red; font-size: 16px;">这是一段红色的文本</p>内联样式适用于对单个元素应用特定的样式&#xff0c;…...

GPT-4 变懒了?官方回复

你是否注意到&#xff0c;最近使用 ChatGPT 的时候&#xff0c;当你向它提出一些问题&#xff0c;却得到的回应似乎变得简短而敷衍了&#xff1f;对于这一现象&#xff0c;ChatGPT 官方给出了回应。 译文&#xff1a;我们听到了你们所有关于 GPT4 变得更懒的反馈&#xff01;我…...

编译器和 IR:LLVM IR、SPIR-V 和 MLIR

编译器通常是各种开发工具链中的关键组件&#xff0c;可提高开发人员的工作效率。编译器通常用作独立的黑匣子&#xff0c;它使用高级源程序并生成语义上等效的低级源程序。不过&#xff0c;它仍然是内部结构倾向的;内部之间流动的内容就称为中间表示 &#xff08;IR&#xff0…...

蓝牙物联网对接技术难点有哪些?

#物联网# 蓝牙物联网对接技术难点主要包括以下几个方面&#xff1a; 1、设备兼容性&#xff1a;蓝牙技术有多种版本和规格&#xff0c;如蓝牙4.0、蓝牙5.0等&#xff0c;不同版本之间的兼容性可能存在问题。同时&#xff0c;不同厂商生产的蓝牙设备也可能存在兼容性问题。 2、…...

漫谈Uniapp App热更新包-Jenkins CI/CD打包工具链的搭建

零、写在前面 HBuilderX是DCloud旗下的IDE产品&#xff0c;目前只提供了Windows和Mac版本使用。本项目组在开发阶段经常需要向测试环境提交热更新包&#xff0c;使用Jenkins进行CD是非常有必要的一步。尽管HBuilderX提供了CLI&#xff0c;但Jenkins服务通常都是搭建在Linux环境…...

Axure简单安装与入门

目录 一.Axure简介 二.应用场景 三.安装与汉化 3.1.安装 3.2.汉化 四. 入门 4.1.复制、剪切及粘贴区域 4.2.选择模式 4.3. 插入形状 4.4.预览、共享 感谢大家观看&#xff01;希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.Axure简介 Axure RP是一款专业的原型…...

前端知识笔记(四十五)———前端开发与后端开发有什么区别

前端开发和后端开发是Web开发中的两个关键领域&#xff0c;它们负责不同的任务和功能。下面是前端开发和后端开发之间的主要区别&#xff1a; 前端开发&#xff1a; 用户界面&#xff1a;前端开发主要关注用户界面的开发&#xff0c;包括网页的布局、样式、交互等方面。前端技…...

Jol-分析Java对象的内存布局

Jol-分析Java对象的内存布局 Open JDK提供的JOL(Java Object Layout)工具为我们方便分析、了解一个Java对象在内存当中的具体布局情况。本文实验环境为64位HotSpot虚拟机。 Java对象的内存布局 Java的实例对象、数组对象在内存中的组成包括&#xff1a;对象头、实例数据和内存…...

基于sfunction builder的c-sfunction编写及案例测试分析

目录 前言 1.前期准备工作及文件说明 1.1前期准备工作 1.2 文件说明 1.3 编译方式...

【Java期末复习资料】(1)知识点总结

本文章主要是知识点&#xff0c;后续会出模拟卷 以下是选择、填空可能考的知识点&#xff0c;多看几遍&#xff0c;混个眼熟 面向对象程序设计的基本特征是&#xff1a;抽象、封装、继承、多态&#xff08;后三个是三大特性&#xff09;Java源文件的扩缀名是.java编译Java App…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...