12月25日作业

news2025/2/8 2:51:20

串口发送控制命令,实现一些外设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的管脚复用
  //PG11
  GPIOG->MODER &= (~(0x3 << 22));
  GPIOG->MODER |= (0x2 << 22);
  GPIOG->AFRH &= (~(0xf)<<12);
  GPIOG->AFRH |= (0x6<<12);
  //PB2
  GPIOB->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.设置波特率为115200
  USART4->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();
         //发送 接收的字符+1
         putchar(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.coloradmin.cn/o/1336223.html

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

相关文章

博易大师智星系统外盘资管系统的功能介绍!

1. 市场行情数据接收和显示&#xff1a;软件需要接收实时的市场行情数据&#xff0c;并将其以图形或数字的形式显示出来&#xff0c;包括价格、成交量、成交额等信息。 2. 交易操作界面&#xff1a;软件需要提供一个交易操作界面&#xff0c;供用户进行交易操作&#xff0c;包括…

HarmonyOS共享包HAR

共享包概述 OpenHarmony提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包。 HAR与HSP都是为了实现代码和资源的共享&#xff0c;都可以包含代码、C库、资源和配…

基于深度学习的非合作双基地雷达目标检测方法

源自&#xff1a;信号处理 作者&#xff1a;钟宁, 鲍庆龙, 陈健, 戴华骅 “人工智能技术与咨询” 发布 摘 要 非合作双基地雷达由于接收的目标信号能量不强且回波脉冲间相位同步困难&#xff0c;在目标检测时无法进行相参处理从而带来弱小目标检测困难的问题。为解决这一问…

【操作系统】探究进程奥秘:显示进程列表的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;Linux专栏&#xff1a;《探秘Linux | 操作系统解密》⏰诗赋清音&#xff1a;月悬苍穹泛清辉&#xff0c;梦随星河徜徉辉。情牵天际云千层&#xff0c;志立乘风意自飞。 ​ 目录 &a…

构建外卖系统:从技术到实战

在当今高度数字化的社会中&#xff0c;外卖系统的开发变得愈发重要。本文将从技术角度出发&#xff0c;带领读者一步步构建一个基础的外卖系统&#xff0c;并涵盖关键技术和实际代码。 1. 技术选型 1.1 后端开发 选择Node.js和Express框架进行后端开发&#xff0c;搭建一个灵…

Linuxapache安装

Apache 介绍 Apache HTTP Server&#xff08;简称Apache&#xff09;是Apache软件基金会的一个开放源码的网页服务器&#xff0c;Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0…

AIGC专栏1——Pytorch搭建DDPM实现图片生成

AIGC专栏1——Pytorch搭建DDPM实现图片生成 学习前言源码下载地址网络构建一、什么是Diffusion1、加噪过程2、去噪过程 二、DDPM网络的构建&#xff08;Unet网络的构建&#xff09;三、Diffusion的训练思路 利用DDPM生成图片一、数据集的准备二、数据集的处理三、模型训练 学习…

iOS设备信息详解

文章目录 ID 体系iOS设备信息详解IDFA介绍特点IDFA新政前世今生获取方式 IDFV介绍获取方式 UUID介绍特点获取方式 UDID介绍获取方式 OpenUDID介绍 Bundle ID介绍分类其他 IP地址介绍获取方式 MAC地址介绍获取方式正常获取MAC地址获取对应Wi-Fi的MAC地址 系统版本获取方式 设备型…

Java基于TCP网络编程的群聊功能

服务端 import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List;public class Server2 {public static List<Socket> onlineList new ArrayList<>();public static void main(String[] args) throws Except…

在做题中学习:三数之和

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09;15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 解释&#xff1a;不能重复也就是说不能和前一个三元组的元素完全相同 思路&#xff1a;通过做 两数之和那道题 可以想到&#xff1a; 1.先排序 2.双指针法 3.固定…

分布式核心技术之分布式锁

文章目录 为什么要使用分布锁&#xff1f;分布式锁的三种实现方法基于数据库实现分布式锁基于缓存实现分布式锁基于 ZooKeeper 实现分布式锁知识扩展&#xff1a;如何解决分布式锁的羊群效应问题&#xff1f; 三种实现方式对比 分布式互斥&#xff0c;领悟了其“有你没我&#…

解决 Solidworks2021 报错(-15,10032,0)错误记录

Solidworks2021 报错"-15,10032,0"错误记录 如图所示解决方案步骤1步骤2 个人问题我的没法添加白名单&#xff0c;要是有能解决的大神给个解决方式感激不尽&#xff01;&#xff01; 如图所示 解决方案 步骤1 该问题的解决方式仅对个人有效&#xff0c;不一定通用&…

非对称加密与对称加密的区别是什么?

在数据通信中&#xff0c;加密技术是防止数据被未授权的人访问的关键措施之一。而对称加密和非对称加密是两种最常见的加密技术&#xff0c;它们被广泛应用于数据安全领域&#xff0c;并且可以组合起来以达到更好的加密效果。本文将探讨这两种技术的区别&#xff0c;以及它们在…

C#示例(一):飞行棋游戏

1、先看一下实现效果 输入连个玩家的姓名 两个玩家分别用字母A和字母B表示 按下任意键开始掷骰子、根据骰子走对应的步数… 2、绘制游戏头 /// <summary>/// 画游戏头/// </summary>public static void GameShow(){Console.ForegroundColor ConsoleColor.Blu…

CEEMDAN +组合预测模型(BiLSTM-Attention + ARIMA)

目录 往期精彩内容&#xff1a; 前言 1 风速数据CEEMDAN分解与可视化 1.1 导入数据 1.2 CEEMDAN分解 2 数据集制作与预处理 2.1 划分数据集&#xff0c;按照8&#xff1a;2划分训练集和测试集&#xff0c; 然后再按照前7后4划分分量数据 2.2 设置滑动窗口大小为7&#…

SuperMap iClient3D for WebGL时序影像

文章目录 前言一、加载影像数据二、创建时间条1.这里使用Echarts来创建TimeLine&#xff0c;首先需要引入相关依赖2.初始化Echarts实例 三、设置不同年份影像交替显示四、效果 前言 时序影像可以用于对地球表面的变化进行定量分析和监测。 通过对多时相遥感影像的比较和分析&a…

【开源】基于Vue+SpringBoot的新能源电池回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

铁山靠之——HarmonyOS组件 - 2.0

HarmonyOS学习第二章 一、HarmonyOS基础组件的使用1.1 组件介绍1.2 Text1.2.1 文本样式1.2.2 设置文本对齐方式1.2.3 设置文本超长显示1.2.4 设置文本装饰线 1.3 Image1.3.1 设置缩放类型1.3.2 加载网络图片 1.4 TextInput1.4.1 设置输入提示文本1.4.2 设置输入类型1.4.3 设置光…

了解基础魔法函数学会封装和继承新建模块和函数使用异常

一、魔法函数 1.1、概念&#xff1a; 魔法函数&#xff08;magic methods&#xff09;是指以双下划线开头和结尾的特殊方法&#xff0c;用于实现对象的特定行为和操作。这些魔法函数可以让我们自定义对象的行为&#xff0c;例如实现对象的比较、算术运算、属性访问等。常见的…

WPS复选框里打对号,显示小太阳或粗黑圆圈的问题解决方法

问题描述 WPS是时下最流行的字处理软件之一&#xff0c;是目前唯一可以和微软office办公套件相抗衡的国产软件。然而&#xff0c;在使用WPS的过程中也会出现一些莫名其妙的错误&#xff0c;如利用WPS打开docx文件时&#xff0c;如果文件包含复选框&#xff0c;经常会出…