【STM32学习笔记】(6)—— 跑马灯实验详解

2023-05-16

跑马灯实验

        在前面五篇STM32学习笔记中,我们已经初步认识了STM32芯片,并且了解STM32的常用寄存器,介绍了STM32的GPIO模式,STM32工程文件,以及最终讲解了如何为STM32添加源文件和头文件的步骤。但是前面的知识只能说是理论和基础,但是非常重要,如果STM32的理论知识不扎实,会导致后续开发项目时,总感觉自己并没有学过STM32,就好像自己是一片浮萍一直飘在水上。所以我们在开发STM32的项目过程中,遇到需要学习一些理论知识时,一定要好好补充自己的理论知识,在实践中检验自己学习的效果是最好的。

GPIO简介

        GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引 脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F103ZET6 型号的芯片有 GPIOA、GPIOB、 GPIOC、GPIOD、GPIOE、GPIOF 至 GPIOG 共 7组 GPIO,芯片一共 144 个引脚,其中 GPIO 就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能。

        最基本的输出功能是由 STM32 控制引脚输出高、低电平,实现开关控制,如把 GPIO 引脚接入 到 LED 灯,那就可以控制 LED 灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或 三极管控制外部大功率电路的通断。

        最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低区分按键是 否被按下。

        在固件库中,GPIO 端口操作对应的库函数函数以及相关定义在文件 stm32f10x_gpio.h 和 stm32f10x_gpio.c 中。

跑马灯硬件连接

 

 

        本章用到的硬件只有 LED(DS0 和 DS1)。其电路在 ALIENTEK 精英 STM32F103 开发板 上默认是已经连接好了的。DS0 接 PB5,DS1 接 PE5。所以在硬件上不需要动任何东西。因为LED发光二极管的阳极串联一个510欧姆的电阻与VCC3.3V电源相连。LED发光二极管的阴极与芯片的GPIO口相连。如果要控制发光二极管发光,则需要将GPIO输出的电平拉低,发光二极管就会由电流流过,电流流过时发光二极管就发光了。当两个GPIO输出的电平不断的拉高或者拉低就能实现了LED的闪烁或者跑马灯的效果了。 

       注意:510欧姆的电阻一共有两个作用:

  1. 起到上拉电阻的作用。
  2. 起到限流电阻的作用,防止流过发光二极管的电路过大而烧坏。

 

跑马灯程序设计

 

        跑马灯实验我们主要用到的固件库文件是:

        stm32f10x_gpio.c                             stm32f10x_gpio.h

        stm32f10x_rcc.c                                stm32f10x_rcc.h

        misc.c                                               misc.h

        stm32f10x_usart                               stm32f10x_usart.h

        其中 stm32f10x_rcc.h 头文件在每个实验中都要引入,因为系统时钟配置函数以及相关的外设时 钟使能函数都在这个其源文件 stm32f10x_rcc.c 中。stm32f10x_usart.h 和 misc.h 头文件在我们 SYSTEM 文件夹中都需要使用到,所以每个实验都会引用。

 

跑马灯所要用到的库函数

1、一个GPIO初始化函数

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
   /*作用:初始化一个或者多个IO口(同一组)的工作模式,输出类型,速度以及上下拉方式。也就是一组IO            
     口的4个配置寄存器。
   */
typedef struct
{
      uint16_t GPIO_Pin;  
    //指定要配置的 GPIO 引脚。此参数可以是 @ref GPIO_pins_define的任何值          
      GPIOSpeed_TypeDef GPIO_Speed;	
    //指定所选引脚的速度。此参数可以是ref GPIOSpeed_TypeDef成员变量中的值
      GPIOMode_TypeDef GPIO_Mode;  
    //指定选定引脚的工作模式。此参数可以是 GPIOMode_TypeDef成员变量中的值  
}GPIO_InitTypeDef;

#define GPIO_Pin_0                ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10               ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11               ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12               ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13               ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14               ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15               ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All              ((uint16_t)0xFFFF)  /*!< All pins selected */

#define IS_GPIO_PIN(PIN)         ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00))

#define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \
                              ((PIN) == GPIO_Pin_1) || \
                              ((PIN) == GPIO_Pin_2) || \
                              ((PIN) == GPIO_Pin_3) || \
                              ((PIN) == GPIO_Pin_4) || \
                              ((PIN) == GPIO_Pin_5) || \
                              ((PIN) == GPIO_Pin_6) || \
                              ((PIN) == GPIO_Pin_7) || \
                              ((PIN) == GPIO_Pin_8) || \
                              ((PIN) == GPIO_Pin_9) || \
                              ((PIN) == GPIO_Pin_10) || \
                              ((PIN) == GPIO_Pin_11) || \
                              ((PIN) == GPIO_Pin_12) || \
                              ((PIN) == GPIO_Pin_13) || \
                              ((PIN) == GPIO_Pin_14) || \
                              ((PIN) == GPIO_Pin_15))

 

        在GPIO_InitTypeDef结构体中已经初始化了成员变量,所以在调用这个初始化函数的时候,我们首先需要对GPIO_InitTypeDef成员变量进行赋值。

       但是在给GPIO_InitTypeDef的成员变量赋值时,赋值的内容需要满足对应结构体类型中的成员变量。

       例如:GPIO_Mode的结构类型为GPIOMode_TypeDef,那么给它赋值的内容需要在下面这个结构体当中的成员变量中选择

 

typedef enum
{ 
  GPIO_Mode_AIN = 0x0,
  GPIO_Mode_IN_FLOATING = 0x04,
  GPIO_Mode_IPD = 0x28,
  GPIO_Mode_IPU = 0x48,
  GPIO_Mode_Out_OD = 0x14,
  GPIO_Mode_Out_PP = 0x10,
  GPIO_Mode_AF_OD = 0x1C,
  GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

#define IS_GPIO_MODE(MODE) 		(((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \
                           		((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \
                            	((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \
                            	((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))

 

        GPIO_Speed的结构类型为GPIOSpeed_TypeDef,那么给它赋值的内容需要在下面这个结构体当中的成员变量中选择。

 

typedef enum
{ 
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \
                              ((SPEED) == GPIO_Speed_50MHz))

 

2、两个读取输入电平函数 

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。

参数:1、GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

           2、GPIO_Pin:指定要读取的端口位。

返回值:输入端口引脚值。

例如:

      GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。

参数:GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

返回值:GPIO输入数据端口值。

例如:

     GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平

3、两个读取输出电平函数

uint8_t GPIO_ReadOutputDataBit (GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:读取某个GPIO的输出电平。实际操作的是GPIO_ODR寄存器。

参数:1、GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

           2、GPIO_Pin:指定要读取的端口位。

返回值:输出端口引脚值。

例如:

      GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输出电平

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

作用:读取某组GPIO的输出电平。实际操作的是GPIO_ODR寄存器。

参数:GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

返回值:GPIO输入数据端口值。

例如:

             GPIO_ReadOutputData(GPIOA);//读取GPIOA组中所有io口输出电平

4、四个设置输出电平函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:设置某个IO口输出为高电平(1)。实际操作BSRRL寄存器

参数:1、GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

           2、GPIO_Pin:指定要写入的端口位。

返回值:无

例如:

        GPIO_SetBits(GPIOA, GPIO_Pin_5);//将GPIOA.5的输出电平置为高电平

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:设置某个IO口输出为低电平(0)。实际操作的BSRRH寄存器。

参数:1、GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

           2、GPIO_Pin:指定要写入的端口位

返回值:无

例如:

        GPIO_ResetBits (GPIOA, GPIO_Pin_5);//将GPIOA.5的输出电平置为低电平

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

作用:设置或清除选定的数据端口位。

参数:1、GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

           2、GPIO_Pin:指定要写入的端口位。

           3、BitVal:指定要写入选定位的值。

此参数可以是BitAction枚举值之一:

typedef enum

{

          Bit_RESET = 0,    // Bit_RESET:清除端口引脚

          Bit_SET     // Bit_SET:设置端口引脚

}BitAction;

#define IS_GPIO_BIT_ACTION(ACTION)                                                                                                                                                 (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))

返回值:无

例如:

        GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET);// 清除GPIOA.5数据端口位。

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

作用:将数据写入指定的GPIO数据端口。

参数:1、GPIOx:其中x可以是(A..G)以选择GPIO外围设备。

            2、PortVal:指定要写入端口输出数据寄存器的值。。

返回值:无

例如:

        GPIO_Write(GPIOA,1);将数据“1”写入指定的GPIOA数据端口。

        后面两个函数不常用,也是用来设置IO口输出电平。

跑马灯实验编写步骤:

      1. 使能IO口时钟。调用函数RCC_AHB1PeriphClockCmd();

           不同的外设调用的时钟使能函数可能不一样

      2. 初始化 GPIO 口模式。调用GPIO_Init();把目标引脚为推挽输出模式;

      3. 编写简单测试程序,控制 GPIO 引脚输出高、低电平。

跑马灯源文件和头文件中的代码

头文件中的代码:

#ifndef __LED_H
#define __LED_H

void LED_Init(void);//初始化
		    
#endif

 

源文件中的代码:

#include "led.h"

//初始化PB5和PE5为输出口.并使能这两个口的时钟		    
//LED IO初始化
void LED_Init(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	 //使能PB,PE端口时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	 //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);	 //根据设定参数初始化GPIOB.5
 GPIO_SetBits(GPIOB,GPIO_Pin_5);	 //PB.5 输出高
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	 //LED1-->PE.5 端口配置, 推挽输出
 GPIO_Init(GPIOE, &GPIO_InitStructure);	 //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOE,GPIO_Pin_5); 	 //PE.5 输出高 
}

 

跑马灯实验中主函数里的代码

        main.c里的代码:

#include "delay.h"
#include "led.h"	
/**
 *****************下面注视的代码是通过调用库函数来实现IO控制的方法*****************************************
int main(void)
{ 
 
delay_init();      //初始化延时函数
LED_Init();       //初始化LED端口
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);  //LED0对应引脚GPIOB.5拉低,亮  
GPIO_SetBits(GPIOE,GPIO_Pin_5);   //LED1对应引脚GPIOE.5拉高,灭 
delay_ms(300);       //延时300ms
GPIO_SetBits(GPIOB,GPIO_Pin_5);	   //LED0对应引脚GPIOB.5拉高,灭 GPIO_ResetBits(GPIOE,GPIO_Pin_5); //LED1对应引脚GPIOE.5拉低,亮 
delay_ms(300);                     //延时300ms
	}
} 

 

函数执行流程如下:

        (1) 使用 GPIO_InitTypeDef 定义 GPIO 初始化结构体变量,以便下面用于存储 GPIO 配置。

        (2) 调用库函数 RCC_APB2PeriphClockCmd 来使能 LED 灯的 GPIO 端口时钟,这个函数的调用和详细资料会在后面的一篇文章讲解。

        (3) 向 GPIO 初始化结构体赋值,把引脚初始化成推挽输出模式。

        (4) 使用以上初始化结构体的配置,调用 GPIO_Init 函数向寄存器写入参数,完成 GPIO 的初始化。

      (5)紧接着使用两个GPIO的库函数,分别为GPIO_SetBits()与GPIO_ResetBits(),在置低和置高之间延时一段时间,就实现了两个LED灯轮流转的实验目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32学习笔记】(6)—— 跑马灯实验详解 的相关文章

  • 基于OpenCv和ROS的图像灰度化处理

    直接调用opencv灰度化函数 xff0c 对于本地图像进行处理 实现C 43 43 代码如下 xff1a 图像灰度化 include lt iostream gt cv cvtColor头文件 include lt opencv2 img
  • IMU的轨迹解算和航迹显示

    基于ros操作系统 xff0c 调用IMU数据包 xff0c 利用数据解算小车运动的轨迹 xff0c 并在rviz中实现轨迹的可视化 其中IMU四元数对于位移速度和加速度的转换 轨迹解算和换机显示的代码 xff1a IMU航迹推算 incl
  • 对IMU数据进行卡尔曼滤波

    我们要使用IMU数据 xff0c 必须对数据进行预处理 xff0c 卡尔曼滤波就是很好的方式 1 卡尔曼滤波 卡尔曼滤波 xff08 Kalman filtering xff09 是一种利用线性系统状态方程 xff0c 通过系统输入输出观测
  • PHPExcel导出导入问题”continue” targeting switch is equivalent to “break”.Did you mean to use “continue 2”?

    在 php 7 3 的 switch 中使用 continue 会出现警告 1 2 3 最好的方式是把 PHPExcel Shared OLE php 文件中的 continue 改为 continue 2 或 break 亲测 xff0c
  • 强化学习highway_env代码解读

    写在前面 作为强化学习的新手 xff0c 写这个系列的博客主要是为了记录学习过程 xff0c 同时也与大家分享自己的所见所想 前段时间发布了人生第一篇博客 xff0c 是关于highway env的自定义环境 但博客主要是关于如何创建一个自
  • Highway_env(Intersection)修改离散动作空间

    前言 在十字路口环境中 xff0c 主车默认的动作空间是以5m s变化的加减速以及保持原速三个动作 有时候为了学习更优化的策略 xff0c 同时与自己设置的奖励函数吻合 xff0c 需要修改环境的动作空间 这里我们主要添加两个较小加速度的纵
  • 离散动作的修改(基于highway_env的Intersection环境)

    之前写的一篇博客将离散和连续的动作空间都修改了 xff0c 这里做一下更正 基于十字路口的环境 xff0c 为了添加舒适性评判指标 xff0c 需要增加动作空间 xff0c 主要添加两个不同加速度值的离散动作 需要修改以下几个地方 xff1
  • VM 导入.ova/.ovf,未通过 OVF 规范一致性或虚拟硬件合规性检查.

    今天在用虚拟机VM导入ubuntu riscv ova文件新建Ubuntu时报错 xff1a 未通过OVF规范一致性或虚拟硬件合规性检查 网上查了一下 xff0c 了解到这是因为VM内置的Ofvtool工具的版本较低导致的 xff0c 解决
  • 借助FileZilla实现Ubuntu和 Windows之间文件互传

    借助FileZilla实现Windows和 Ubuntu间文件互传 xff0c 需要使用 FTP服务 xff0c 设置方法如下 xff1a 1 Windows下安装FTP客户端 FileZilla xff08 该软件免费 xff0c 可以直
  • 使用Ubuntu系统中的gparted工具对Ubuntu磁盘扩充

    最近在使用Ubuntu时 xff0c 发现经常提示内存空间不足 就总结了扩充Ubuntu内存的主要流程 xff0c 操作步骤如下 xff1a 第一步 xff1a 在虚拟机操作界面 xff08 关闭要进行磁盘扩充的Ubuntu xff09 进
  • 通过挂载的方式,解决由于权限无法将rootfs直接拷贝到SD卡的EXT4分区的问题

    最近在使用SD卡制作Linux启动文件时 xff0c 要将自己制作的根文件系统 xff08 rootfs xff09 拷到SD卡的EXT4分区时 xff0c 发现由于权限问题无法直接拷贝 xff0c 现通过挂载的方式解决该问题 xff0c
  • RISC-V架构下,Busybox工具的安装

    今天在RISC V架构下安装Busybox工具箱时 xff0c 找了很多的资料 xff0c 但都是ARM架构下的安装教程 xff0c 尽管内核不同但有一定的参考价值 xff0c 安装完成后对RISC V下Busybox工具箱的安装过程做出了
  • 串行通信协议小结(Serial Protocols)(1)

    通信关键点 同步通信 xff08 例如SPI xff09 双方之间的数据传输使用公共时钟信号进行同步 xff0c 数据以稳定的流传输 不需要额外的比特来标记传输的每个数据块的开始 结束 xff0c 因此速度更快 异步通信 xff08 例如U
  • MATLAB课程笔记(二)——MATLAB基础知识

    MATLAB系统环境 MATLAB操作界面的组成 采用与office 2010相同风格的操作界面 gt gt 命令提示符表示MATLAB处于准备状态 xff1a 续行符 MATLAB的搜索路径 gt gt clear 清除工作区的全部变量
  • SVN的日常使用

    1 已经加入ignore的文件夹 xff0c 解除方法 xff1a 直接到被ignore的位置 xff0c 执行 xff1a svn add lt 你被ignore的文件名 gt no ignore no ignore是取消忽略 如果是ad
  • RM遥控器接收程序的分析

    由遥控器接收分析串口与DMA RM的遥控器在使用的过程中在大体上可以分成两个部分 xff1a 信息的接收 与 信息的解析 xff0c 在信息的接收中主要用到了串口的空闲中断和DMA双缓冲区接收在本篇的信息接收部分主要根据RM官方给出的代码来
  • robomaster麦轮运动解算

    1 资源与代码 1 1 参考文章 本文主要参考的三篇文章如下 xff1a 麦轮运动特性分析 xff1a https mp weixin qq com s biz 61 MzI3MTIyMjQwNQ 61 61 amp mid 61 2247
  • FreeRTOS内核——任务与任务切换

    2 任务 相关函数 1 xTaskCreateStatic 2 prvInitialiseNewTask 3 prvInitialiseTaskLists 4 vTaskStartScheduler 5 xPortStartSchedule
  • FreeRTOS应用——任务

    12 任务 12 1 相关函数 12 1 1 任务创建函数与启动调度 12 1 1 1 xTaskCreateStatic 静态创建任务 if configSUPPORT STATIC ALLOCATION 61 61 1 TaskHand
  • FreeRTOS应用——消息队列

    13 消息队列 消息队列是一种常用于任务键通信的数据结构 xff0c 队列可以在任务与任务间 中断与任务间传递信息 xff0c 实现了任务接收来自其他任务或者中断的不定长数据 任务能从队列中读取信息 xff0c 当队列中的消息为空时 xff

随机推荐

  • RoboMaster电机驱动

    1 硬件 1 1 电机 RM有很多不同型号的电机 xff0c 不同型号的电机有它不同的用途 xff0c 但是以用途分类的话主要是分成两种电机 xff1a 用来精准控制位置的电机 xff0c 在RM中的主要是云台电机 RM官网上的云台电机只有
  • 数据结构——校园导游系统

    校园导游系统 1 要求 大二下学期修了数据结构这门课 xff0c 课设的要求是做一个校园导航系统 详细的要求如下 问题描述 xff1a 当我们参观校园时 xff0c 会遇到如下问题 xff1a 从当前所处位置去校园另外一个位置 xff0c
  • 平衡小车实现

    平衡小车 1 前期准备 1 1 I2C通讯协议 在与MPU6050进行数据的读取时需要用到I2C通讯协议来进行通信 物理层 IIC一共有只有两个总线 xff1a 一条是双向的串行数据线SDA xff0c 一条是串行时钟线SCL SDA Se
  • 关于STM32CubeMX生成不了Keil代码的解决办法

    关于STM32CubeMX生成Keil代码时弹出but MDK ARM project generation have a problem的问题 有两种可能 xff1a 1 输出路径或文件名包含中文 2 Java环境版本不匹配 下载 xff
  • 2020电赛D题绕组飞行器

    在准备电赛的过程中 xff0c 做了一下去年的题 xff0c 本文将介绍我的方案及部分代码 xff0c 希望可以帮助到大家 一 我的装备 由于初学飞控所以主控用的是匿名的拓空者 xff0c 还有匿名的光流传感器 xff0c 北醒的激光雷达
  • nuxtjs常见问题

    1 在服务器端部署 xff0c 需要再服务器端安装node modules 2 本地忽略 nuxt文件夹 xff0c 这个需要在服务器端上执行npm run build生成 xff0c 然后执行 pm2 start npm name 34
  • Ubuntu学习笔记:sudo:vim:command not found

    Ubuntu学习笔记 xff1a sudo xff1a vim xff1a command not found 完成 xff01
  • Ubuntu学习笔记:查看所有用户

    Ubuntu学习笔记 xff1a 查看所有用户 输入 cat etc passwd cut f 1 d 注意 xff01 结尾有一个 xff1a 效果如下 xff1a
  • Ubuntu学习笔记:cd命令

    Ubuntu学习笔记 xff1a cd命令 命令顺序 xff1a 创建一个名为aaa的文件夹 进入指定文件夹 返回上一级文件夹 进入指定文件夹 返回上一级文件夹 退回上一次操作的文件夹 显示上一次操作的文件夹所在的路径 退回多级文件夹 退回
  • Ubuntu学习笔记:swapon 失败:设备或资源忙

    swapon 失败 xff1a 设备或资源忙 用命令swapoff xff0f 交换分区 将交换分区停止 然后再用swapon命令重新加载即可
  • Ubuntu学习笔记:使用命令查看当前登录系统的用户信息

    Ubuntu学习笔记 xff1a 使用命令查看当前登录系统的用户信息 1 查看当前登录的用户名 2 查看当前登录的用户名 终端类型 时间 IP地址 3 服务器连接的所有用户及正在使用的进程 4 显示系统中有哪些使用者正在上面 xff0c 显
  • Ubuntu学习笔记:使用命令查看系统资源,内存使用情况

    Ubuntu学习笔记 xff1a 使用命令查看系统资源 xff0c 内存使用情况 方法1 打开资源管理器 资源 gnome system monitor 方法2 top命令 方法3 下载htop apt get install htop h
  • Ubuntu学习笔记:使用命令修改 root 用户的密码

    Ubuntu学习笔记 xff1a 使用命令修改 root 用户的密码 Ubuntu 每次开机都有一个随机的新的 root 密码 在不知道密码的情况下 xff0c 要重新修改root密码 方法 xff1a sudo passwd 输入用户登录
  • C语言的特点

    1 语言简洁 紧凑 xff0c 使用方便 灵活 xff1b 2 运算符丰富 xff1b 3 数据类型丰富 xff1b 4 具有结构化的控制语句 xff08 例如if else语句 while语句 do while语句 switch语句和fo
  • Win11 更新绕过TPM2.0 方法 最新最简单 亲测有效 Win11系统更新 DEV方式

    最新的win11内测把不符合硬件规定的人都排除出去了 xff0c 虽然有注册表导入可以挤到DEV通道 xff0c 不过在更新到8 会弹出显示设备不支持提示 xff0c 关闭窗口后升级被取消 因此特在实践后教大家如何绕过TPM2 0 更新的方
  • iview常见问题

    1 radio组 label如果为字符串可以默认选中 xff0c 如果为数字 xff0c 却没有反应 答 xff1a label为数字时 xff0c 需要在label前加 xff1a 来绑定 xff0c 这样就可以实现默认选中了
  • 【通信协议】IIC通信协议详解

    IIC的基本介绍 IIC总线的发展 xff1a 芯片间总线 xff08 Inter Interface Circuit xff0c IIC xff09 xff0c 是应用广泛的芯片间串行扩展总线 目前世界上采用的IIC总线一共有两个规范 x
  • 【通信协议】单总线协议详解——以DHT11为例

    单总线概述 1 单总线的介绍 xff08 1 xff09 单总线也称为1 Wire bus xff0c 它是由美国DALLAS xff08 达尔斯 xff09 公司推出的外围串行扩展总线 单总线系统中配置的各种器件 xff0c 由DALLA
  • 【STM32学习笔记】(4)—— STM32工程文件详解

    STM32工程文件构成 从下图可以看出我们的工程目录是由CORE OBJ STM32F10x FWLib USER SYSTEM以及HARDWARE文件夹组成的 此外还有一个文本文档README TXT 以及一个Windows 批处理文件
  • 【STM32学习笔记】(6)—— 跑马灯实验详解

    跑马灯实验 在前面五篇STM32学习笔记中 xff0c 我们已经初步认识了STM32芯片 xff0c 并且了解STM32的常用寄存器 xff0c 介绍了STM32的GPIO模式 xff0c STM32工程文件 xff0c 以及最终讲解了如何