STM32 四线驱动1602A 填坑!解决重启乱码

2023-05-16

最近学STM32,用来丰富一下生活,一个四线1602搞得一星期,对自己的智商也是醉了。填坑开始!

用的是HAL库编写的,仅仅在ODR寄存器使用了一点寄存器操作,其余全是HAL函数。

硬件接口如下:

RS    PA0         

R/W PA1

EN   PA4

 数据口D4-D7       PB4-PB7

PB11和PB14使用了两个指示灯,用来在while函数里显示系统正在运行;

V0口接一个10K的电位器,连接到板子的GND,用来调节对比度。其实之前自己也在这里跳坑了,明明显示屏已经显示出字符串了,可对比度太高了,一片白,没看出来,所以对着源码调试了好久,做了太多无用功,偶然的一次,钛合金狗眼发作,隐隐约约看出来了文字,心中出了一口长气。

然而好景不长,接着就出现了乱码的问题,只能显示部分,也就是下面的解决方法了。

现在说说里面另外需要填坑的地方,之前乱码出现的问题主要是在LCD初始化的过程中。

在LCD1602_INIT()函数中,用四线时,1602的初始化只需要高四位数据就可以完成,在初始化完成之后必须再传入四位数据,执行完“write_com(0x28);”之后液晶已经初始化,其实在执行了一半的时候就已经初始化完成,此时又传入了四位数据(一个写语句会传入8位数据),这时候如果直接写数据的话,就会形成乱码,所以需要两次功能性初始化。

源代码贴在下面了,

主函数如下:

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_hal.h"
#include "gpio.h"
#include "1602.h"
void SystemClock_Config(void);
int main(void)
{  
unsigned char dat[]={"thank you for your waiting!"};  
  HAL_Init(); 
  SystemClock_Config(); 
  MX_GPIO_Init();
  LCD1602_INIT();  
  lcd1602_show_string(0,0,dat);
 
  while (1)
  {  
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
HAL_Delay(1000);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_14);
HAL_Delay(1000);
 
  }

}


/** System Clock Configuration
*/
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
    /**Configure the Systick interrupt time 
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
    /**Configure the Systick 
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
void _Error_Handler(char * file, int line)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  while(1) 
  {
  }
  /* USER CODE END Error_Handler_Debug */ 
}


#ifdef USE_FULL_ASSERT
/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif
/**
  * @}
  */ 
/**
  * @}
*/ 


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

GPIO设置子程序如下,

#include "gpio.h"

void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;


  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();


  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, R_W_Pin|RS_Pin|EN_Pin, GPIO_PIN_RESET);


  /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_0|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11|GPIO_PIN_14, GPIO_PIN_RESET);
  /*Configure GPIO pins : PAPin PAPin PAPin */
  GPIO_InitStruct.Pin = R_W_Pin|RS_Pin|EN_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


  /*Configure GPIO pins : PB4 PB5 PB6 PB7 PB11 PB14*/
  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_11|GPIO_PIN_14;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


}


LCD显示模块函数如下,

#include "stm32f1xx_hal.h"
#include "1602.h"
#include "stm32f103xb.h"
//实际测试可用任意IO读写LCD1602//系统时钟72MHz
///4线LCD1602
//函数名:  LCD1602_INIT
//函数功能:LCD1602初始化
//说明:用四线时,1602的初始化只需要高四位数据就可以完成,在初始化完成之后必须再传入四位数据,需注意。
//      执行完write_com(0x28);之后液晶已经初始化,其实在执行了一半的时候就已经初始化完成,此时又传入了
//      四位数据(一个写语句会传入8位数据),这时候如果直接写数据的话,就会形成乱码
//注释:    DATA可以是指令或者数据
void LCD1602_INIT(void)
{
HAL_Delay(200); //等待液晶供电稳定200ms   
write_com(0x28);//4位数据总线模式,显示2行数据,5*10点阵每字符 0X38为8位数据模式, 显示2行数据,5*10点阵每字符
HAL_Delay(5);
E_H();
E_L();
write_com(0x28);//4位数据总线模式,显示2行数据,5*10点阵每字符 0X38为8位数据模式, 显示2行数据,5*10点阵每字符
HAL_Delay(5);
write_com(0x0c); //开显示,有光标,光标闪烁
HAL_Delay(5);
write_com(0x06); //写入数据光标右移,写入新数据显示屏不移动
HAL_Delay(5);
write_com(0x01); //清屏
HAL_Delay(5);
}
//函数名:LCD_1602_READY
//函数功能:检测PB7是否为高电平,忙碌状态;
//注释:
void LCD_1602_READY(void)
{
uint8_t sta;
RS_L();
RW_H();
do
{
E_H();
HAL_Delay(5);
sta = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7);
HAL_Delay(5);
E_L();
HAL_Delay(5);
} while ( sta & 0x80);

}
//函数名:  LCD1602_Clear_Screen
//函数功能:LCD1602清屏
//注释:   
void LCD1602_Clear_Screen(void)
{
LCD1602_DATA_write(Write_order,0x01); //清屏
}


//函数名:  write_com
//函数功能:LCD1602写指令
//注释:    
void write_com(unsigned char dat)
{
  unsigned char j;
LCD_1602_READY();
  RS_L();//指令
RW_L();//写操作模式
E_L();
  for(j=0;j<2;j++)
  {
GPIOB->ODR =(dat&0x00F0);
E_H();
HAL_Delay(5);
E_L();//允许     
  dat<<=4;
HAL_Delay(5);
  }

}
//函数名:  write_data
//函数功能:LCD1602写数据
//注释:   
void write_data(unsigned char dat)
{
  unsigned char j;
LCD_1602_READY();
  RS_H();//数据
RW_L();//写操作模式
E_L();
  for(j=0;j<2;j++)
  {
GPIOB->ODR =(dat&0x00F0);
E_H();
HAL_Delay(5);
  E_L();   
  dat<<=4;
HAL_Delay(5);
  }

}

//函数名:lcd1602_write
//作用:将数据或者指令写入LCD1602
//注释:
void LCD1602_DATA_write(LCD1602_Write_TypeDef order,unsigned char dat)
{
if(order==Write_data)
write_data(dat);
else
  write_com(dat);
}


//函数名:lcd1602_show_character
//作用:  在制定坐标,显示单个字符
void lcd1602_show_character(unsigned char x,unsigned char y,unsigned char dat)
{
unsigned char address;
x=x%16;
y=y%2;
if(y==1)
address=0xc0+x;
else
address=0x80+x;  
LCD1602_DATA_write(Write_order,address);
LCD1602_DATA_write(Write_data,dat);
}


//函数名:lcd1602_show_number
//作用:
//     以(X,Y)坐标为起始,显示一个数字(此数字值不能大于4294967295(0xffffffff))
//注释:
//     返回数字的显示长度,若改行显示不下,函数自动换行, 显示其余部分
unsigned char lcd1602_show_number(unsigned char x,unsigned char y,unsigned short dat)
{
unsigned short pow=1,instead;
unsigned char increase=0,lengh=0;
instead=dat;
while(instead!=0)
{
instead=instead/10;
increase++;
}
lengh=increase;
if(increase==0)
{
lcd1602_show_character(x,y,0x30);
return 1;
}
else
{
for(;increase>1;increase--)
pow=pow*10;
while(pow!=0)
{
instead=dat/pow;
lcd1602_show_character(x,y,(0x30+instead));
x++;
if(((x%16)==0)&&(x!=0))
{
y++;
y=y%2;
x=x%16;
}
dat=dat%pow;
pow=pow/10;  
  }
}
return lengh;
}
//函数名:lcd1602_show_string
//作用:
//     以(X,Y)坐标为起始,显示一个字符串
//注释:
//     返回数字的显示长度,若改行显示不下,函数自动换行, 显示其余部分,字符长度小于256
unsigned char lcd1602_show_string(unsigned char x,unsigned char y,unsigned char *dat)
{
unsigned char lengh=0;
while(dat[lengh]!='\0')
{
if(((x%16)==0)&&(x!=0))
{
    y++;
y=y%2;
    x=x%16;
}
    lcd1602_show_character(x,y,dat[lengh]);
x++;
lengh++; 
}
return (lengh);
}
//函数名:lcd1602_show_number
//作用:
//     以(X,Y)坐标为起始,显示一个数字(此数字值不能大于4294967295(0xffffffff))
//注释:
//     返回数字的显示长度,若改行显示不下,函数自动换行, 显示其余部分
unsigned char lcd1602_show_s32(unsigned char x,unsigned char y,short dat)
{
short pow=1,instead;
unsigned char increase=0,lengh=0;
if(((dat&0x80000000)==0x80000000)&&(dat!=0xffffffff))//负数
{
  instead=-dat;
  y=y%2;
  lcd1602_show_character(x,y,0x2D);//"-"
  x++;
}
else if((dat&0x80000000)!=0x80000000)//正数
{
  instead=dat;
  y=y%2;
  lcd1602_show_character(x,y,0X2B);//"+"
  x++;     
}
else//0
{
  instead=0;   
}
dat=instead; 
while(instead!=0)
{
instead=instead/10;
increase++;
}
lengh=increase;
if(increase==0)
{
lcd1602_show_character(x,y,0x30);
return 1;
}
else
{
for(;increase>1;increase--)
pow=pow*10;
while(pow!=0)
{
instead=dat/pow;
lcd1602_show_character(x,y,(0x30+instead));
x++;
if(((x%16)==0)&&(x!=0))
{
y++;
y=y%2;
//x=x%16;
}
dat=dat%pow;
pow=pow/10;  
  }
}
return lengh+1;
}

LCD头文件就是定义了上面的函数:

#ifndef __1602_H__
#define __1602_H__

typedef enum
{
Write_data  =0X00,
Write_order =0x01/*BIT0*/ 
}LCD1602_Write_TypeDef;


#define RW_L() GPIOA->ODR &=~(0x01<<1)//RW=0,PA1
#define RW_H() GPIOA->ODR |=(0x01<<1)//RW=1


#define RS_L() GPIOA->ODR &=~(0x01)//RS=0,PA0
#define RS_H() GPIOA->ODR |=(0x01)//RS=1


#define E_L()  GPIOA->ODR &=~(0x01<<4)//E=0,PA4
#define E_H()  GPIOA->ODR |=(0x01<<4)//E=1


//函数名:  LCD1602_INIT
//函数功能:LCD1602初始化
//注释:    DATA可以是指令或者数据
void LCD1602_INIT(void);


//函数名:  LCD1602_Clear_Screen
//函数功能:LCD1602清屏
//注释:   
void LCD1602_Clear_Screen(void);

//函数名:  write_com
//函数功能:LCD1602写指令
//注释:    
void write_com(unsigned char dat);
//函数名:  write_data
//函数功能:LCD1602写数据
//注释:   
void write_data(unsigned char dat);

//函数名:lcd1602_write
//作用:将数据或者指令写入LCD1602
//注释:
void LCD1602_DATA_write(LCD1602_Write_TypeDef order,unsigned char dat);
//函数名:lcd1602_show_character
//作用:  在制定坐标,显示单个字符
void lcd1602_show_character(unsigned char x,unsigned char y,unsigned char dat);
//函数名:lcd1602_show_number
//作用:
//     以(X,Y)坐标为起始,显示一个数字(此数字值不能大于4294967295(0xffffffff))
//注释:
//     返回数字的显示长度,若改行显示不下,函数自动换行, 显示其余部分
unsigned char lcd1602_show_number(unsigned char x,unsigned char y,unsigned short dat);

//函数名:lcd1602_show_string
//作用:
//     以(X,Y)坐标为起始,显示一个字符串
//注释:
//     返回数字的显示长度,若改行显示不下,函数自动换行, 显示其余部分,字符长度小于256
unsigned char lcd1602_show_string(unsigned char x,unsigned char y,unsigned char *dat);

//显示有符号S32
unsigned char lcd1602_show_s32(unsigned char x,unsigned char y,short dat);
//为了适应任意IO驱动LCD1602做的定义
//读忙操作
void LCD_1602_READY(void);
//配置GPIO端口
void GPIO_Configuration(void);
#endif















































































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

STM32 四线驱动1602A 填坑!解决重启乱码 的相关文章

  • Hadoop中查看HDFS中的一个文件的位置信息

    指令 hadoop fsck user hadoop filename files blocks locations racks files 文件分块信息 xff0c blocks 在带 files参数后才显示block信息 locatio
  • ROS 安装与测试& RVIZ 运行仿真机械臂

    本文用于学习记录 文章目录 前言一 ROS 安装1 1 设置安装源1 2 设置 key1 3 更新 apt1 4 安装 ros 二 ROS 环境配置2 1 配置环境变量2 2 安装构建依赖相关工具2 3 初始化 rosdep2 4 替换 2
  • 自抗扰控制器-1.跟踪微分器 TD

    传统控制方法大都基于设定值与系统输出的残差的生成控制量 xff0c 这就是让有惯性输出信号跟踪存在跳变的设定值信号 xff0c 最初阶段残差过大 xff0c 容易导致超调 为了克服这个缺陷 xff0c 研究人员采用微分器来获得信号的微分信号
  • 自抗扰控制器-3.状态观测器(一)

    状态观测器 ESO 状态观测器 Extended State Observer ESO 定义 xff1a 根据外部变量的观测来确定系统内部状态变量的装置叫做状态观测器 xff0c 即根据测量到的系统输入 xff08 控制量 xff09 和系
  • 自抗扰控制器-6线性自抗扰控制器LADRC

    二阶线性自抗扰控制器结构图如下图所示 xff1a xff08 1 xff09 线性扩张状态观测器 LESO 依然属于 LADRC 的中枢核心环节 xff0c 而且 LESO 和 ESO 的功能基本 一致 xff0c 都是针对系统 总扰动 进
  • 无人机学习Pix4

    pix4学习 IMU xff08 惯性测量单元 xff09 IMU用来检测当前飞机的姿态 xff0c 飞控根据当前姿态做出调整 xff0c 保证飞机飞行稳定 俯仰角 pitch xff08 前后翻滚 xff09 横滚角 roll xff08
  • 修改Mysql root密码

    最近新装好的mysql在进入mysql工具时 xff0c 总是有错误提示 mysql uroot p Enter password ERROR 1045 28000 Access denied for user 39 root 39 64
  • 示例:PX4——添加msg、uORB

    git clone https github com PX4 Firmware cd Firmware git submodule update init recursive git checkout v1 11 0 beta1 make
  • PX4飞控读取UART串口信息通过Mavlink传给QGC地面站显示

    详细代码地址 xff1a https github com XXXUUUXXX PX4 2 QGC 目的 xff1a 通过UART串口给PX4飞控发送信息 xff0c 通过Mavlink协议在QGC界面上显示出来 显示信息包括 xff1a
  • QGC地面站连接多机飞控PX4

    环境 xff1a QGC4 1飞控1飞控2 首先 xff0c 连接飞控1 xff0c 修改参数MAV SYS ID 61 1 然后 xff0c 断开飞控1 xff0c 连接飞控2 xff0c 修改参数MAV SYS ID 61 2 关闭自动
  • PX4 mavros可以切换的模式

    catkin ws src mavros mavros src lib uas stringify cpp PX4 custom mode gt string static const cmode map px4 cmode map px4
  • Jetson的mavros使用offboard模式,终端按键控制无人机飞行

    基于Promethues根据wiki配置好之后可以实现使用终端控制 xff0c 起飞 xff1b 降落 xff1b 前后左右飞行 xff1b 上升下降左转右转 xff1b 开始我基于仿真测试实机不成功 xff0c 是因为某个运行节点没有打开
  • 安装Mavros——二进制方法

    sudo apt get install ros melodic mavros ros melodic mavros extras wget https raw githubusercontent com mavlink mavros ma
  • 【LADRC】线性自抗扰控制

    目录 LADRC算法 LADRC算法推导二阶线性系统为例 LADRC算法n阶 LADRC离散化 零阶保持法 一阶系统 二阶系统 LADRC参数整定方法 参考文献 LADRC算法 自抗扰控制 xff08 ADRC xff0c Active D
  • 控制笔记(自控+现控)

    目录 主流控制方法优缺点 干扰观测器 水床效应 PID 积分分离 饱和区 积分饱和 微分使用条件 死区 中性区 不作用区 动态性能指标 主流控制方法优缺点 PID 优点 xff1a 实现简单 不依赖模型缺点 xff1a 在系统平衡点附近设计
  • MapReduce系列-eclipse运行MapReduce

    1 eclipse安装hadoop的插件 下载 hadoop eclipse plugin 2 6 0 jar xff0c 将其放入 eclipse 的 plugins 目录 xff0c 并重启 eclipse xff0c 项目视图 xff
  • python爬取淘宝网

    from selenium import webdriver import re from bs4 import BeautifulSoup import time def url open driver content 爬取源代码 ele
  • SUMO仿真数据输出的配置方法

    1 概述 1 1 目的 说明SUMO仿真结束后可以输出的数据及其设置方法 1 2 参考文档 http sumo dlr de wiki Simulation Output 2 SUMO的输出数据概述 SUMO可以输出的数据概述如下表 xff
  • LQR 控制学习-LQR控制 MATLAB官方教程-LQR 控制器_状态空间系统Matlab/Simulink建模分析

    LQR 控制 本blog主要记录LQR 线性二次调制系统的 xff0c 学习教程为两个B站的教学视频 状态空间4 LQR控制 MATLAB官方教程 视频链接 xff1a 原创翻译 状态空间4 LQR控制 MATLAB官方教程 原创翻译 状态
  • 多传感器融合定位 第一章 概述

    多传感器融合定位 第一章 概述 本记录深蓝学院多传感器定位融合第四期学习笔记 xff0c 官方推荐使用docker进行开发 xff0c 为了方便之后移植部署 xff0c 故本次在次在本地环境进行开发 代码下载 xff1a https git

随机推荐

  • 记一次CSDN的资源加载失败的问题的解决方法

    前段时间 xff0c 某天突然发现CSDN加载不了 xff0c 我还以为网站出现故障了 xff0c 但是没想到第二天还是访问不了 xff0c 问了下同事 xff0c 他的好像没有什么问题 xff08 大概长这样 xff09 找到加载失败的u
  • github release 功能的使用及问题解决

    对很多初学者来说 xff0c 要自己架设一个服务器来提供app更新 xff0c 别说是配置服务器了 xff0c 光是买个主机都很棘手 所幸的是github提供了release功能 xff0c 并有相关api支持 下面就来说说如何使用gith
  • Ubuntu 下如何测试 USB 摄像头支持的分辨率、压缩格式,并使用 OpenCV 按正确的格式读取出来?

    介绍 本篇博客介绍了如何使用v4l utils工具来查看所购买的USB摄像头支持的分辨率等信息 xff0c 并使用一个短小的 opencv 脚本将图像读取出来 测试 USB 摄像头支持的分辨率和压缩格式 需要的工具 xff1a apt in
  • 程序上下文切换,什么是上下文?

    1 什么是上下文 xff1f Linux是一个多任务的操作系统 xff0c 它支持远大于CPU数量的任务同时运行 xff0c 当然 xff0c 这些任务实际上并不是真正的在同时运行 xff0c 而是系统在很短的时间内 xff0c 将CPU轮
  • PHP计算今天、昨天、本周、本月、上月开始时间和结束时间

    start 61 date 39 Y m d H i s 39 mktime 0 0 0 date 39 m 39 date 39 d 39 date 39 Y 39 end time 61 date 39 Y m d H i s 39 m
  • nms和softnms的代码

    文章目录 前言预测框筛选的方法1 nms2 softnms 总结 前言 nms和softnms的原理及相关简单代码总结 预测框筛选的方法 预测框的筛选 xff0c 是检测模块后处理阶段的一个十分重要的过程 因为我们预测输出的预测框 xff0
  • day5·全局与局部变量

    命名空间 命名空间是一个名称到对象之间的映射 xff0c 字典格式 相同的命名空间是不能有重复名称 xff08 字典的特性key不重复 xff09 不同的命名空间是可以有重复名称 局部命名空间 xff1a 函数中定义的名称 包含函数的参数
  • Ubuntu16.04下opencv获取realsense sr300的图像数据

    看到网上很多的文章都是用的库是librealsense xff0c 现在用的库是librealsense2 感觉差别较大 include lt librealsense2 rs hpp gt include lt opencv2 openc
  • P4基础知识

    为了解决 OpenFlow 编程能力不足的问题 Nick 教授等人提出了 P4 高级编程语言 P4 的优点主要有以下三点 可灵活定义转发设备数据处理流程 且可以做到转发无中断的重配置 P4 语言具有对交换机协议解析流程和数据处理流程进行编程
  • 飞控与ROS通信之路之环境搭建(ubuntu18环境下)

    文章目录 一 ROS的安装 二 Mavros的安装 三 QGC地面站的安装 一 ROS的安装 请参考的我的另一个博客 xff1a 点这 二 Mavros的安装 2 1 Mavros的简介 MAVROS相当于PX4飞控中的MAVLINK模块
  • 飞控与ROS通信之路之准备工作

    请先进行环境的搭建 xff1a 参考我的另一篇 博客 目录 xff1a 一 使用QGC为飞控下载固件 二 测试串口端口 三 测试信息 一 QGC下载飞控固件 使用USB链接电脑与飞控 xff0c 并打开QGC 重新插拔USB xff0c 在
  • ROS-新建工作空间、功能包、利用c++、python语言编写发布和订阅通信

    文章目录 1 创建工作空间与功能包1 1工作空间1 1 1工作空间的介绍1 1 2创建工作空间1 1 3编译工作空间 1 2功能包1 2 1功能包的介绍1 2 1功能包的创建1 2 2功能包的编译1 2 3功能包中文件的意义1 2 4设置环
  • 移动端苹果IOS中select的option值不显示问题解决

    移动端苹果IOS中select的option值不显示问题解决 遇到一个问题就是最原始的select标签在安卓手机上显示正常 xff0c 但是在IOS苹果高版本上点击select xff0c 在页面上有占位 xff0c 随便点击也可以将值选在
  • Maven入门 常用知识

    目录 maven目录 Maven常用命令说明 设置http代理 Maven插件安装 xff0c 基于IDEA Maven使用 依赖的配置 依赖范围 传递性依赖 依赖范围 排除依赖 归类依赖 仓库 仓库的由来 仓库的布局 仓库的分类 本地仓库
  • 2020-10-28 元学习(Meta Learning)与迁移学习(Transfer Learning)的区别联系是什么?

    本文转自 xff1a https www zhihu com question 299020462 answer 653199202 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业转载请注明出处 迁
  • 软件安装系列:Boost 的安装与初试

    这期开始会不断更新一些软件安装使用过程中的一些问题 xff0c 帮着各位老师快速的实现软件的使用 xff0c 在安装过程中总是出现这样那样的问题 xff0c 我们就将基于此类问题 xff0c 总结一些解决办法 xff0c 帮助大家快速成长
  • PHP 出现 ‘continue’ not in the ‘loop’ or ‘switch’ context错误

    把 continue 删除 改为 return 即可
  • Java随机数-获取0到9内的随机数

    本文参考 嗨客网 Java 实战 Java随机数 描述 运用 Java 的 Random 得到随机数 题目 获取 0 到 9 内的随机数 xff08 包括 0 和 9 xff09 题目解决思路 创建一个生产随机数的对象 通过对象方法获取随机
  • Java基础练习题及详细答案

    本文参考 嗨客网 Java 实战 前言 本篇文章给大家安利一些关于 Java 基础的练习题 xff0c 每道题都附有答案链接 xff0c 答案解题的每个步骤到运行结果都十分详细 xff0c 十分适合小白拿来练习 xff0c 也十分适合准备面
  • STM32 四线驱动1602A 填坑!解决重启乱码

    最近学STM32 xff0c 用来丰富一下生活 xff0c 一个四线1602搞得一星期 xff0c 对自己的智商也是醉了 填坑开始 xff01 用的是HAL库编写的 xff0c 仅仅在ODR寄存器使用了一点寄存器操作 xff0c 其余全是H