STM32 HAL库函数学习 UART篇

2023-05-16

从今天开始定时更新一下有关STM32 HAL库学习的过程,主要是对HAL库函数的所有讲解。本章是关于uart串口的函数。

1、HAL_UART_Init(UART_HandleTypeDef * husart)

初始化串口的的函数:

用法为
UART_HandleTypeDef huart1;

huart1.xxx = ssss;

...

HAL_USART_Init(&huart1); //需要注意点的是函数的输入参数是指针类型 

UART_HandleTypeDef huart4;
  huart4.Instance = UART4;
  huart4.Init.BaudRate = 115200;
  huart4.Init.WordLength = UART_WORDLENGTH_8B;
  huart4.Init.StopBits = UART_STOPBITS_1;
  huart4.Init.Parity = UART_PARITY_NONE;
  huart4.Init.Mode = UART_MODE_TX_RX;
  huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart4) != HAL_OK)

2、void HAL_UART_MspInit (UART_HandleTypeDef * husart)
串口回调函数,主要进行硬件部分的初始化

例如开启串口的时钟和管脚的配置,本函数被上一个函数自动调用。

void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(uartHandle->Instance==UART4)
  {
  /* USER CODE BEGIN UART4_MspInit 0 */

  /* USER CODE END UART4_MspInit 0 */
    /* UART4 clock enable */
    __HAL_RCC_UART4_CLK_ENABLE();

    __HAL_RCC_GPIOI_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**UART4 GPIO Configuration
    PI9     ------> UART4_RX
    PA0     ------> UART4_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
    HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* UART4 interrupt Init */
    HAL_NVIC_SetPriority(UART4_IRQn, 1, 2);
    HAL_NVIC_EnableIRQ(UART4_IRQn);
  /* USER CODE BEGIN UART4_MspInit 1 */
  /* USER CODE END UART4_MspInit 1 */
  }

3.HAL_StatusTypeDef HAL_UART_Transmit (UART_HandleTypeDef * husart, uint8_t * pTxData, uint16_t Size, uint32_t Timeout);

串口发送数据的函数,最重要的函数之一。单工以阻塞模式发送大量数据。

huart :要发送数据的串口指针,ptxData:要发送的数据,注意此处的指针形式,Size:发送数据的长度(字节数) Timeout:发送数据超时时间

发送数据的大小要注意是u8类型的(0-255)
 

		HAL_UART_Transmit(&huart4,"222",3,2);
//发送一个字符串 


u8 num = 10;
HAL_UART_Transmit(&huart4,&num,1,2);
//发送一个数字

u16 num = 0xffde;
u8 temp;
temp = num>>8;
HAL_UART_Transmit(&huart4,&temp,1,1);
temp = num;
HAL_UART_Transmit(&huart4,&temp,1,1);
//发送一个十六位的数据

注意:使用本函数发送十六位或者二十四位数据的时候下面的方法是错误的:

u16 num = 0x1234;

HAL_UART_Transmit(&huart4,&num,2,2);

此方法打印出的数据为 34 12 。不是想要输出的1234需要注意。

4、HAL_StatusTypeDef HAL_UART_Receive (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size,uint32_t Timeout)
串口接收数据的库函数,阻塞的方式接收数据。

huart :要发送数据的串口指针,pData:接收数据缓存地址,注意此处的指针形式,Size:接收数据的长度(字节数) Timeout:数据接收等待时间,CPU等待这个时间用来接收数据。

注意本函数不会因为设置接收接收字符数和实际接收到的数据量不一致而发生冲突,接收到的数据小于设定接收量时少的那部分补零,多于设定量时直截取需要的数据量。

uint16_t numd[3];
HAL_UART_Receive(&huart4,numd,3,1000);
HAL_UART_Transmit(&huart4,numd,3,1);
//等一秒时间接收三位数据


5、HAL_StatusTypeDef  HAL_UART_Transmit_IT (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)

使用中断的方式发送数据,对应上面的阻塞方式发送数据。

本函数的使用需要慎重考虑前后程序,要注意本函数发送方式为中断方式,如果本函数后面直接跟着用HAL_UART_Transmit函数,那么后面数据不会发送。可通过增加短延时解决
 

	  	uint16_t numd[3];


        HAL_UART_Receive(&huart4,numd,3,1000);
		while(HAL_UART_Transmit_IT(&huart4,numd,3)==HAL_OK);

		HAL_Delay(10);    //不加延时以下数据无法使用阻塞方式发送
		num1= num23>>8;
		HAL_UART_Transmit(&huart4,&num1,1,1);
		num1 = num23;
		HAL_UART_Transmit(&huart4,&num1,1,1);

6、HAL_StatusTypeDef HAL_UART_Receive_IT (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)

一种中断模式接收数据的函数。

huart :接收数据串口指针。pdata 接收区的指针  size 接受数据量字节长度,一般设置接收长度为1,每次接受一个字节的数据就进入中断处理。

注意如果设置接收数据不为1,而是某个固定的值,当串口接受的数据量不满足这个值的时候,串口中断不会被触发。一直等待接收数据满足设定值才会触发中断。如果出现接收出错可以使用HAL_USART_ErrorCallback函数来重置接收。

本函数必须在接受回调函数中再次调用才能经行下一次的接收。


#define num 1
uint16_t numd[num];


  void UART_Init()
{

    .....
    HAL_UART_Receive_IT(&huart4,numd,num);
}
 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);//接收完成回调函数
{

    HAL_UART_Receive_IT(&huart,numd,num);
}

7、HAL_StatusTypeDef HAL_UART_Transmit_DMA (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)

使用DMA的方式发送数据。

huart :发送数据串口指针。pdata 发送数据数组的首地址  size 发送数据量字节长度。使用这个函数之前需要做uart函数关于DMA设置的初始化。使用本函数发送完毕之后需要清除传输完成标志关闭DMA后才能够再次调用本函数。

因为DMA发送数据可以有两种形式一种是循环发送,另一种是单次发送。如果使用单次发送的情况下,本函数发送完毕之后就无法再次通过调用的方式发送数据。如果需要通过不断调用的方法发送数据可以将清除标志等函数放置在本函数之后,中间必须要隔着其他的函数(实现延时的功能)此方法适用于发送数据量不多的情况下。如果发送的数据量大的情况需要配合DMA的发送完成中断,在发送完成中断中清除标志位等操作。

#define SEND_BUF_SIZE 6
u8 SendBuff[SEND_BUF_SIZE]="123456"; //发送数据缓冲区
UART_HandleTypeDef UART1_Handler; 
HAL_UART_Transmit_DMA(&UART1_Handler,SendBuff,SEND_BUF_SIZE);//开启DMA传输
....  //用于数据量不多的情况下可以使用此方法清除完成标志
 if(__HAL_DMA_GET_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7))//等待DMA2_Steam7传输完成
  {
     __HAL_DMA_CLEAR_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7);//清除DMA2_Steam7传输完成标志
     HAL_UART_DMAStop(&UART1_Handler);      //传输完成以后关闭串口DMA
									
   }
//使用中断的方法清除发送完毕标志位
//DMA初始化中开启DMA通道所在的中断
	HAL_NVIC_SetPriority(DMA2_Stream7_IRQn,0,1);
	HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn);



void XferCpltCallback()
{
	
	 if(__HAL_DMA_GET_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7))//等待DMA2_Steam7传输完成
     {
       __HAL_DMA_CLEAR_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7);//清除DMA2_Steam7传输完成标志
       HAL_UART_DMAStop(&UART1_Handler);      //传输完成以后关闭串口DMA
							
    }

}

void DMA2_Stream7_IRQHandler()
{
	HAL_DMA_IRQHandler(&UART1TxDMA_Handler);

}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{

	XferCpltCallback();

}
 

8、HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart,uint8_t * pData, uint16_t Size)

huart :接收数据串口指针。pdata 接收数据数组的首地址  size 接收数据量字节长度。使用DMA的方式接收数据。

#define SEND_BUF_SIZE 6
u8 SendBuff[SEND_BUF_SIZE]=""; //发送数据缓冲区
UART_HandleTypeDef UART1_Handler; 
HAL_UART_Receive_DMA(&UART1_Handler,SendBuff,SEND_BUF_SIZE);//开启DMA传输

9、HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef* huart)

huart:串口指针,暂停DMA数据传输。

HAL_UART_DMAPause(&UART1_Handler);

10、HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)

huart:串口指针,从暂停状态中恢复DMA传送。

HAL_UART_DMAResume(&UART1_Handler);

11、HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)

huart:串口指针,停止DMA的传输。

HAL_UART_DMAStop(&UART1_Handler);

使用本函数停止DMA的传输之后可以再次使用HAL_UART_Transmit_DMA打开DMA传输,无法使用HAL_UART_DMAResume打开。

12、HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)

huart:串口指针.中止uart的中断、DMA形式的发送和接收数据。使用本函数没法阻止阻塞方法发送和接受数据。本函数只能阻止本次的数据传输,如果打开了接收中断会被关闭需要重新断模式接收数据。

HAL_UART_Abort(&UART1_Handler);

13、HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)

huart:串口指针。中止串口中断方式或者DMA方式的发送数据。

用法同上

14、HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)

huart:串口指针。中止串口中断方式或者DMA方式的接收数据。

用法同上

15、HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)

huart:串口指针。中止串口中断或者DMA的中断。

用法同上

16、HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)

huart:串口指针。中止串口中断方式或者DMA方式的发送数据并且关闭发送中断和DMA中断。
用法同上
17、HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)
huart:串口指针。中止串口中断方式或者DMA方式的接收数据并且关闭发送中断和DMA中断。
用法同上
18、void HAL_UART_IRQHandler (UART_HandleTypeDef * huart) 
这个函数属于串口中断处理请求函数。它需要添加在对应串口中断处理函数中。
 void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */

  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}

19、void HAL_UART_TxCpltCallback (UART_HandleTypeDef * huart) 

本函数是串口发送 数据完毕的回调函数。需要开启发送中断,当串口使用中断模式发送完毕后才能自动调用本函数。

void HAL_UART_TxHalfCpltCallback (UART_HandleTypeDef * huart)

{

}

20、void HAL_UART_TxHalfCpltCallback (UART_HandleTypeDef * huart) 

发送数据一半回调函数,不常用。

21、void HAL_UART_ErrorCallback (UART_HandleTypeDef * husart)

串口收发数据出错时的回调函数。当使用中断方式接收数据,数据接收的数量不满足设定的值的时候,可以使用本函数重置接收流程。

void HAL_UART_ErrorCallback (UART_HandleTypeDef * husart)
{	
	
	HAL_UART_Receive_IT(&UART1_Handler,(u8 *)aRxBuffer, RXBUFFERSIZE);

}

22、HAL_StatusTypeDef HAL_LIN_SendBreak (UART_HandleTypeDef * huart)
LIN总线通信函数,发送一个断开连接的标识。

23、HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode (UART_HandleTypeDef * huart)
多核处理器开启串口静音模式。

24、HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode (UART_HandleTypeDef * huart)
多核处理器关闭串口静音模式。

25、void HAL_MultiProcessor_EnterMuteMode (UART_HandleTypeDef * huart)
多核处理器进入串口静音模式。

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

STM32 HAL库函数学习 UART篇 的相关文章

  • 【STM32CubeMX】STM32H7-RTOS-SPI-W5500

    工程源码下载 xff1a 基于裸机和Freertos的W5500网络通信工程 目录 1 移植W5500步骤 2 Cobemx配置步骤 2 1 时钟配置Clock Configuration 2 2 Trace and Debug配置 2 3
  • 【PADS】PADS覆铜技巧

    目录 重要快捷键 基础设置 层设置 电源层分割处理 给自己喜欢的网络上个颜色 TOP层覆铜 验证设计是否有问题 PADS开窗 PADS为分割层模拟数字地覆网格铜 PADS 快捷键 Ctrl 43 鼠标滚轮失灵 Ctrl 43 鼠标滚轮造成P
  • 【Cadence16.6】安装教程

    初识安装包文件 我们cadence16 6的安装包是这样的 xff0c 详细请去https www fanyedu com index mulitcourse video html id 61 1008 1008观看 首先我们打开这个文件夹
  • 【硬件】芯片温度/功耗计算

    本博客参考 xff1a 一纸沙漏的博客 芯片的四个温度 内核温度 封装表面温度 空气周边温度以及PCB板温度 TJ xff08 Die Junction Temp xff09 芯片的硅核温度 xff0c 就是芯片内部核心的温度 xff0c
  • Python unicode 字符串 转 list

    unicode 字符串 转 list unicodeList 61 u 39 100 100 100 100 100 100 39 1 方法一 list 61 eval unicodeList 2 方法二 int value for val
  • 【硬件】AD623单电源供电差分放大

    1 前言 检测电机电流运用检流电阻的方法在往期已经介绍过 详情请见 xff1a 检流电阻计算电流 2 需求分析 2 1 电机流过电流 已知电机的峰值堵转电流为4 6A xff0c 连续堵转电流为3 2A xff0c 以上信息可以得知需要采样
  • 【电路】PT1000/PT100温度采集电路

    目录 原理图下载链接 xff1a https download csdn net download Roger 717 33823983https download csdn net download Roger 717 33823983h
  • 【QT】手把手制作一个QT网络调试助手(准备阶段)

    目录 1 新建一个工程 2 mainwindow ui设计 2 1 对窗口主体进行栅格化布局 2 2 添加网络通信配置GroupBox 2 2 1 填充内容 2 2 2 栅格布局GroupBox 2 3 总结 3 Pro程序配置 4 头文件
  • 【PR】PR视频剪辑实用技巧

    1 两个视频叠加 1 首先 xff0c 找到要导入的视频所在文件夹 xff0c 将视频拖动到项目面板中 按住Ctrl拖动视频再复制两个视频 2 将素材视频分别拖入到序列的 视频轨道1 2 3 3 点击选中轨道1上的视频 xff0c 在源面板
  • 【Project】项目管理软件学习笔记

    一 前言 使用Project制定项目计划步骤大致如下 xff1a 以Project2013为例 xff0c 按照上图步骤指定项目计划 二 实施 2 1 创建空白项目 点击文件 新建 空白项目 xff0c 即完成了空白项目的创建 xff0c
  • 【硬件】P沟道和N沟道MOS管开关电路设计

    场效应管做的开关电路一般分为两种 xff0c 一种是N沟道 xff0c 另一种是P沟道 xff0c 如果电路设计中要应用到高端驱动 的话 xff0c 可以采用PMOS来导通 P沟道MOS管开关电路 PMOS的特性 xff0c Vgs小于一定
  • 多线程基础之七:多线程遇上printf的“延迟写”策略

    0 运行库提供的IO读写函数采用 延迟写 策略的原因 编程时经常会用到printf 函数 xff0c 但是由于printf 函数涉及到和显示器或磁盘等外设进行交互 xff0c 所以操作涉及到从 用户态 gt 内核态 gt 返回用户态 的一系
  • VC和VS区别

    S是Visual Studio xff0c 它是微软提供的一个工具集 xff0c 由各种各样的工具组成 VS可以支持C C 43 43 VB JAVA C 编程 然了一次只能支持一种编程方式 在VS安装完成 xff0c 第一次运行的时候会让
  • 【potplayer安装及设置LAV Splitter】

    potplayer安装及设置LAV Splitter 下载及安装Lav Splitter解码器配置Lav Splitter解码器 potplayer是一款windows平台上一款轻量功能强大的播放器 xff0c 它界面简洁 xff0c 功能
  • 关于头文件的相互包含

    编程过程中 xff0c 经常会碰到头文件的相互包含 xff0c 如果处理不慎 xff0c 就会报错 比如在头文件A h中有如下代码 xff08 代码中的B Handle是在头文件B h中定义的 xff09 xff1a span class
  • Python list中去重的多种方法

    去重之后顺序会改变 set去重 列表去重会让列表改变原来的顺序 l1 61 1 4 4 2 3 4 5 6 1 l2 61 list set l1 print l2 1 2 3 4 5 6 但是 xff0c 可以通过列表中索引 xff08
  • TI学习笔记之“振动补偿算法”

    一些应用中 xff0c 负载和机械角度有关 xff0c 比如空调压缩机 典型压缩机应用的负载曲线如下图所示 xff0c 不难发现 xff0c 在一个机械周期内 xff0c 负载和机械角度存在一定的关系 xff0c 这种情况在转子式压缩机中尤
  • “compilerPath“的问题

    在c cpp properties josn文件中 xff0c complierPath的问题解决如下 如果正在编译c 43 43 文件 xff0c 先在终端输入which g 43 43 我的弹出了 usr bin g 43 43 把这个
  • Digest Authentication Response 如何计算

    Session Initiation Protocol NOTIFY Request Line NOTIFY sip 192 168 125 130 5060 SIP 2 0 Method NOTIFY Request URI sip 19
  • ROS-Melodic 编译Moveit全过程记录和错误解决方案

    ROS Melodic 编译Moveit全过程记录和错误解决方案 在Ros Melodic版本下 xff0c 直接运行sudo apt get install ros melodic moveit会出现以下错误 xff1a 下列软件包有未满

随机推荐

  • Jetson TX2在ROS下使用Realsense D435i跑rtabmap、octomap、VINS-Mono和ORB-SLAM2

    使用环境 xff1a Ubuntu 16 04 JetPack 3 3 xff0c ROS Kinetic硬件设备 xff1a 英伟达Jetson TX2 xff0c 英特尔Realsense D435i 安装Realsense相关的相机驱
  • C++实现流式socket聊天程序

    目录 协议设计 消息的类型 消息的语法 消息的语义 消息的处理 发送消息 接收消息 程序设计 模块的划分和功能 Client客户端 Server服务器 模块流程图 程序实现 辅助代码 client cpp server cpp 程序测试 本
  • STM32 串口 FIFO

    使用FIFO实现串口数据的收发功能 FIFO的相关实现参照链接 xff1a CSDN https mp csdn net mp blog creation editor 120448361 1 Cubemx串口配置 使用Cubmx对串口进行
  • C Primer Plus

    C Primer Plus作为一本被人推崇备至的c入门经典 xff0c C primer plus绝非浪得虚名 应该算得上C教材里最好的入门书了 在知识广度上 xff0c 很少有书能匹及 它能为你系统学习c提供一个良好的平台 作者对c的见解
  • Python 如何处理大文件

    Python作为一门程序设计语言 xff0c 在易读 易维护方面有独特优势 xff0c 越来越多的人使用 Python 进行数据分析和处理 xff0c 而 Pandas 正是为了解决数据分析任务而创建的 xff0c 其包含大量能便捷处理数据
  • C++构造DHCP Discovery报文并使用socket发送

    DHCP由BOOTP协议发展而来 xff0c 而后者基于UDP IP协议 xff0c 这使得使用socket发送DHCP报文成为可能 本文示例构造了DHCP Discovery报文并调用socket接口发送 xff0c 值得注意的是 xff
  • pycharm 常用快捷键整理

    pycharm常用快捷键 1 编辑 xff08 Editing xff09 Ctrl 43 Space 基本的代码完成 xff08 类 方法 属性 xff09 Ctrl 43 Alt 43 Space 快速导入任意类 Ctrl 43 Shi
  • RTT串口V1版本的使用分析及问题排查指南(一)

    本文由RT Thread论坛用户123原创发布 xff1a https club rt thread org ask article 2894 html RTT串口V1版本的使用分析及问题排查指南 一 简述 无论是刚接触 RT Thread
  • 总结基于寄存器与基于固件库stm32编程的差异

    基于寄存器与基于固件库stm32编程方式有什么差异 总的来说是专业层面或者说是应用层面的区别 总的来说是专业层面或者说是应用层面的区别 从应用角度讲 xff0c 寄存器相对来说是属于更底层的 xff0c 类似于驱动层 xff0c 而固件库则
  • Python 3中HTTPparse 的使用

    在python中能够进行html和xhtml的库有很多 xff0c 如HTMLParser sgmllib htmllib BeautifulSoup mxTidy uTidylib等 xff0c 这里介绍一下HTMLParser Beau
  • STorM32三轴云台控制器PID参数调节(1)

    本文是一篇利用STorM32板子控制三轴云台的经验贴 xff0c 内容包括从所有的硬件到位开始到pid参数调节完成中的一些经验 xff0c 完成这一步后 xff0c 就可以拥有一个稳定的云台了 本文是基于 STorM32 BGC32Bit
  • Centos libevent install

    1 下载安装包 xff1a 官网 http libevent org libevent 2 1 8 stable tar gz 2 解压 tar zxvf libevent 2 1 8 stable tar gz 3 进入目录 cd lib
  • windows waveIn 录音

    windows waveIn 录音 编写背景1查找设备2 根据设备名称找到设备3 打开设备4 开始录音5 结束录音 编写背景 windows xp 系统不支持 WASAPI xff0c 选择 waveIn API 1查找设备 获取音频设备数
  • waveIn 录音遇到的问题与解决方案

    问题点 1 录音过程中拔出设备 xff0c 程序死锁 添加缓存的之前需要检查设备是否存在 case WIM DATA if xff08 is device exsit xff09 设备是否存在 xff0c 可以通过获取设备信息来判断 预处理
  • vs2013编译32位的libcurl

    编译 libcurl 下载 CURL源码打开 VS2013 x86 本机工具命令提示cd 进入 curl 源码 winbuild 目录执行命令 xff1a nmake f Makefile vc mode 61 static VC 61 1
  • python两个列表获取交集,并集,差集

    list1 61 1 2 3 4 5 6 list2 61 2 3 4 交集 方法一 xff1a list3 61 new for new in list1 if new in list2 方法二 xff1a list3 61 list s
  • FFMPEG 指令

    ffplay 拉取流 ffplay exe i rtmp address fflags nobuffer ffmpeg commend lines 只推屏幕 dshow 模式 ffmpeg ffmpeg exe f dshow i vide
  • 电子罗盘

    电子罗 种重要的导航工具 xff0c 能实时提供移动物体的航向和姿态 随着半导体工艺的进步和手机操作系统的发展 xff0c 集成了越来越多传感器的智能手机变得功能强大 xff0c 很多手机上都实现了电子罗盘的功能 而基于电子罗盘的应用 xf
  • C++中的.和::和:和->的区别

    在学习C 43 43 的过程中我们经常会用到 和 和 xff1a 和 gt xff0c 在此整理一下这些常用符号的区别 1 A B则A为对象或者结构体 xff1b 2 A gt B则A为指针 xff0c gt 是成员提取 xff0c A g
  • STM32 HAL库函数学习 UART篇

    从今天开始定时更新一下有关STM32 HAL库学习的过程 xff0c 主要是对HAL库函数的所有讲解 本章是关于uart串口的函数 1 HAL UART Init xff08 UART HandleTypeDef husart xff09