【联盛德W806上手笔记】六、7816/UART 控制器

目录

  • 7816/UART 控制器
    • 串口功能
    • 7816 接口功能
  • 下载口
  • 库函数
    • 函数
    • 参数
  • Demo中的测试程序
    • main.c
    • wm_hal_msp.c
    • wm_it.c
    • fifo.c
    • fifo.h

Windows 10 20H2
HLK-W806-V1.0-KIT
WM_SDK_W806_v0.6.0


       摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》

7816/UART 控制器

设备端符合 APB 总线接口协议
支持中断或轮询工作方式
支持 DMA 传输模式,发送接收各存在 32-byte FIFO
DMA 只能按字节进行操作,最大 16-burst byte DMA 操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

兼容 UART 以及 7816 接口功能

串口功能

波特率可编程
5-8bit 数据长度,以及 parity 极性可配置
1 或 2 个 stop 位可配置
支持 RTS/CTS 流控
支持 Break 帧发送与接收
Overrun,parity error,frame error,rx break frame 中断指示

7816 接口功能

兼容 ISO-7816-3 T=0.T=1 模式
兼容 EVM2000 协议
可配置 guard time(11 ETU-267 ETU)
正向/反向约定可软件配置
支持发送/接收奇偶校验及重传功能
支持 0.5 和 1.5 停止位配置

下载口

       W806 芯片默认 UART0 为下载口,芯片无固件初始下载时,直接连接 UART0 接口,通过相关下载软件即可实现固件下载。当芯片内有固件,再次进入下载模式,可以通过拉低 BOOTMODE,然后上电进入下载模式。下载完成后去掉 BOOTMODE 拉低的操作,需要重启,固件才能运行。

库函数

函数

       打开wm_uart.h,有如下的函数声明:

//初始化所用串口的波特率、数据位、停止位、校验位、模式等
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);//将初始化之后的串口恢复成默认的状态–各个寄存器复位时的值
HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);//串口发送数据,使用超时管理机制 
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);//串口接收数据,使用超时管理机制
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);//串口中断模式发送  
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);/*** 以中断方式接收一定长度的数据.* 注意:pData指向的地址,空间长度必须大于等于32字节* 	  Size大于0,则接收够Size长度的数据执行一次HAL_UART_RxCpltCallback(huart);* 	  Sized等于0,则接收不定长的数据就执行一次HAL_UART_RxCpltCallback(huart);*       两种情况下,数据都存放在huart->pRxBuffPtr或者pData中,数据长度存放在huart->RxXferCount中*/
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);//串口中断服务函数,用来响应各种串口中断。
//函数实体里面有两个功能,一是清除中断标记位,二是调用相应的回调函数,
//如UART_Receive_IT、UART_Transmit_IT、UART_EndTransmit_IT
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);//串口发送中断回调函数,被UART_EndTransmit_IT调用
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);//串口接收中断回调函数,被UART_Receive_IT调用
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);

参数

结构体和枚举类型
看到STM32绷不住了

typedef struct
{uint32_t BaudRate;                  /*!< This member configures the UART communication baud rate.The baud rate is computed using the following formula:- IntegerDivider = ((PCLKx) / (16 * (huart->Init.BaudRate)))- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.This parameter can be a value of @ref UART_Word_Length */uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.This parameter can be a value of @ref UART_Stop_Bits */uint32_t Parity;                    /*!< Specifies the parity mode.This parameter can be a value of @ref UART_Parity@note When parity is enabled, the computed parity is insertedat the MSB position of the transmitted data (9th bit whenthe word length is set to 9 data bits; 8th bit when theword length is set to 8 data bits). */uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.This parameter can be a value of @ref UART_Mode */uint32_t HwFlowCtl;                 /*!< Specifies whether the hardware flow control mode is enabled or disabled.This parameter can be a value of @ref UART_Hardware_Flow_Control */uint32_t OverSampling;              /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8).This parameter can be a value of @ref UART_Over_Sampling. This feature is only available on STM32F100xx family, so OverSampling parameter should always be set to 16. */
} UART_InitTypeDef;typedef enum
{HAL_UART_STATE_RESET             = 0x00U,    /*!< Peripheral is not yet InitializedValue is allowed for gState and RxState */HAL_UART_STATE_READY             = 0x20U,    /*!< Peripheral Initialized and ready for useValue is allowed for gState and RxState */HAL_UART_STATE_BUSY              = 0x24U,    /*!< an internal process is ongoingValue is allowed for gState only */HAL_UART_STATE_BUSY_TX           = 0x21U,    /*!< Data Transmission process is ongoingValue is allowed for gState only */HAL_UART_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoingValue is allowed for RxState only */HAL_UART_STATE_BUSY_TX_RX        = 0x23U,    /*!< Data Transmission and Reception process is ongoingNot to be used for neither gState nor RxState.Value is result of combination (Or) between gState and RxState values */HAL_UART_STATE_TIMEOUT           = 0xA0U,    /*!< Timeout stateValue is allowed for gState only */HAL_UART_STATE_ERROR             = 0xE0U     /*!< ErrorValue is allowed for gState only */
} HAL_UART_StateTypeDef;typedef struct __UART_HandleTypeDef
{USART_TypeDef                 *Instance;        /*!< UART registers base address        */UART_InitTypeDef              Init;             /*!< UART communication parameters      */uint8_t                       *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */uint16_t                      TxXferSize;       /*!< UART Tx Transfer size              */__IO uint16_t                 TxXferCount;      /*!< UART Tx Transfer Counter           */uint8_t                       *pRxBuffPtr;      /*!< Pointer to UART Rx transfer Buffer */uint16_t                      RxXferSize;       /*!< UART Rx Transfer size              */__IO uint16_t                 RxXferCount;      /*!< UART Rx Transfer Counter           */HAL_LockTypeDef               Lock;             /*!< Locking object                     */__IO HAL_UART_StateTypeDef    gState;           /*!< UART state information related to global Handle managementand also related to Tx operations.This parameter can be a value of @ref HAL_UART_StateTypeDef */__IO HAL_UART_StateTypeDef    RxState;          /*!< UART state information related to Rx operations.This parameter can be a value of @ref HAL_UART_StateTypeDef */__IO uint32_t                 ErrorCode;        /*!< UART Error code                    */}UART_HandleTypeDef;typedef enum
{UART_FIFO_TX_NOT_FULL,UART_FIFO_TX_EMPTY,UART_FIFO_RX_NOT_EMPTY,
} HAL_UART_WaitFlagDef;

宏参数

#define UART0		((USART_TypeDef *)UART0_BASE)
#define UART1		((USART_TypeDef *)UART1_BASE)
#define UART2		((USART_TypeDef *)UART2_BASE)
#define UART3		((USART_TypeDef *)UART3_BASE)
#define UART4		((USART_TypeDef *)UART4_BASE)
#define UART5		((USART_TypeDef *)UART5_BASE)#define UART_FIFO_FULL 32#define HAL_UART_ERROR_NONE              0x00000000U   /*!< No error            */
#define HAL_UART_ERROR_FE                0x00000040U   /*!< Frame error         */
#define HAL_UART_ERROR_PE                0x00000080U   /*!< Parity error        */
#define HAL_UART_ERROR_ORE               0x00000100U   /*!< Overrun error       */#define UART_WORDLENGTH_5B                  ((uint32_t)UART_LC_DATAL_5BIT)
#define UART_WORDLENGTH_6B                  ((uint32_t)UART_LC_DATAL_6BIT)
#define UART_WORDLENGTH_7B                  ((uint32_t)UART_LC_DATAL_7BIT)
#define UART_WORDLENGTH_8B                  ((uint32_t)UART_LC_DATAL_8BIT)#define UART_STOPBITS_1                     0x00000000
#define UART_STOPBITS_2                     ((uint32_t)UART_LC_STOP)#define UART_PARITY_NONE                    0x00000000
#define UART_PARITY_EVEN                    ((uint32_t)UART_LC_PCE)
#define UART_PARITY_ODD                     ((uint32_t)(UART_LC_PCE | UART_LC_PS))#define UART_HWCONTROL_NONE                  0x00000000U
#define UART_HWCONTROL_RTS                   ((uint32_t)UART_FC_AFCE)
#define UART_HWCONTROL_CTS                   ((uint32_t)UART_FC_AFCE)
#define UART_HWCONTROL_RTS_CTS               ((uint32_t)UART_FC_AFCE)#define UART_MODE_RX                        ((uint32_t)UART_LC_RE)
#define UART_MODE_TX                        ((uint32_t)UART_LC_TE)
#define UART_MODE_TX_RX                     ((uint32_t)(UART_LC_RE | UART_LC_TE))#define UART_STATE_DISABLE                  0x00000000U
#define UART_STATE_ENABLE                   ((uint32_t)(UART_LC_RE | UART_LC_TE))

#define __HAL_UART_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->LC |= (UART_LC_RE | UART_LC_TE))#define __HAL_UART_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->LC &= ~(UART_LC_RE | UART_LC_TE))#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__, __OPERATING__) (__OPERATING__(__HANDLE__, __FLAG__))#define IS_UART_INSTANCE(INSTANCE) (((INSTANCE) == UART0) || \((INSTANCE) == UART1) || \((INSTANCE) == UART2) || \((INSTANCE) == UART3)  || \((INSTANCE) == UART4)  || \((INSTANCE) == UART5))#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_5B) || \((LENGTH) == UART_WORDLENGTH_6B) || \((LENGTH) == UART_WORDLENGTH_7B) || \((LENGTH) == UART_WORDLENGTH_8B))#define IS_UART_BAUDRATE(BAUDRATE) (((BAUDRATE) == 2000000) || \((BAUDRATE) == 1500000) || \((BAUDRATE) == 1250000) || \((BAUDRATE) == 1000000) || \((BAUDRATE) == 921600)  || \((BAUDRATE) == 460800) || \((BAUDRATE) == 230400) || \((BAUDRATE) == 115200) || \((BAUDRATE) == 57600) || \((BAUDRATE) == 38400)  || \((BAUDRATE) == 19200) || \((BAUDRATE) == 9600) || \((BAUDRATE) == 4800) || \((BAUDRATE) == 2400) || \((BAUDRATE) == 1800)  || \((BAUDRATE) == 1200)  || \((BAUDRATE) == 600))#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \((STOPBITS) == UART_STOPBITS_2))#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \((PARITY) == UART_PARITY_EVEN) || \((PARITY) == UART_PARITY_ODD))#define IS_UART_MODE(MODE) (((MODE) == UART_MODE_RX) || \((MODE) == UART_MODE_TX) || \((MODE) == UART_MODE_TX_RX))#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\(((CONTROL) == UART_HWCONTROL_NONE) || \((CONTROL) == UART_HWCONTROL_RTS) || \((CONTROL) == UART_HWCONTROL_CTS) || \((CONTROL) == UART_HWCONTROL_RTS_CTS))#define UART_RX_INT_FLAG (UART_INTS_OE | UART_INTS_PE | UART_INTS_FE |\UART_INTS_RL | UART_INTS_RTO | UART_INTS_BD)#define UART_RX_ERR_INT_FLAG (UART_INTS_BD | UART_INTS_FE | \UART_INTS_PE)#define UART_TX_INT_FLAG (UART_INTM_TL | UART_INTM_TEMPT)#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((__HANDLE__)->Instance->INTM &= ~ __INTERRUPT__)#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((__HANDLE__)->Instance->INTM |= __INTERRUPT__)#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->INTS |= __FLAG__)

Demo中的测试程序

串口1收发实验:PB6: UART1_TX,PB7: UART1_RX

main.c


#include <stdio.h>
#include <string.h>
#include "wm_hal.h"
#include "fifo.h"UART_HandleTypeDef huart1;static void UART1_Init(void);
void Error_Handler(void);#define IT_LEN 0 	// 大于等于0,0:接收不定长数据即可触发中断回调;大于0:接收N个长度数据才触发中断回调
static uint8_t buf[32] = {0}; // 必须大于等于32字节
#define LEN 2048
static uint8_t pdata[LEN] = {0};
int main(void)
{volatile int tx_len = 0;uint8_t tx_buf[100] = {0};SystemClock_Config(CPU_CLK_160M);printf("enter main\r\n");UART1_Init();FifoInit(pdata, LEN);HAL_UART_Receive_IT(&huart1, buf, IT_LEN);		// 只需调用一次,接收够设定的长度,进入中断回调,用户需要在中断回调中取走数据,此处设置了// 0个字节,即不定长while(1){	tx_len = FifoDataLen();if (tx_len > 0){tx_len = (tx_len > 100) ? 100 : tx_len;FifoRead(tx_buf, tx_len);HAL_UART_Transmit(&huart1, tx_buf, tx_len, 1000);}}return 0;
}static void UART1_Init(void)
{huart1.Instance = UART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX | UART_MODE_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}
}void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (FifoSpaceLen() >= huart->RxXferCount){FifoWrite(huart->pRxBuffPtr, huart->RxXferCount);}
}void Error_Handler(void)
{while (1){}
}void assert_failed(uint8_t *file, uint32_t line)
{printf("Wrong parameters value: file %s on line %d\r\n", file, line);
}

wm_hal_msp.c


#include "wm_hal.h"void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{if (huart->Instance == UART1){__HAL_RCC_UART1_CLK_ENABLE();__HAL_RCC_GPIO_CLK_ENABLE();//	PB6: UART1_TX//	PB7: UART1_RX__HAL_AFIO_REMAP_UART1_TX(GPIOB, GPIO_PIN_6);__HAL_AFIO_REMAP_UART1_RX(GPIOB, GPIO_PIN_7);HAL_NVIC_SetPriority(UART1_IRQn, 0);HAL_NVIC_EnableIRQ(UART1_IRQn);}
}void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{if (huart->Instance == UART1){__HAL_RCC_UART1_CLK_DISABLE();HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);}}

wm_it.c


#include "wm_hal.h"#define readl(addr) ({unsigned int __v = (*(volatile unsigned int *) (addr)); __v;})
__attribute__((isr)) void CORET_IRQHandler(void)
{readl(0xE000E010);HAL_IncTick();
}extern UART_HandleTypeDef huart1;__attribute__((isr)) void UART1_IRQHandler(void)
{HAL_UART_IRQHandler(&huart1);
}

fifo.c


#include "fifo.h"
#include "string.h"_fifo_str fifo_str;int FifoInit(uint8_t *fifo_addr, uint32_t fifo_size)
{_fifo_str *p = &fifo_str;if(fifo_addr == NULL || fifo_size == 0)return -1;memset((char *)p, 0, sizeof(_fifo_str));p->buf = fifo_addr;p->in = 0;p->out = 0;p->size = fifo_size;return 0;
}int FifoDataLen(void)
{_fifo_str *p = &fifo_str;return (p->in - p->out);
}int FifoSpaceLen(void)
{_fifo_str *p = &fifo_str;return (p->size - (p->in - p->out));
}int FifoRead(uint8_t *buf, uint32_t len)
{uint32_t i = 0, j = 0;_fifo_str *p = &fifo_str;j = (p->out % p->size);len = min(len, p->in - p->out);i = min(len, p->size - j);memcpy(buf, p->buf + j, i);memcpy(buf + i, p->buf, len - i);p->out += len;return len;
}int FifoWrite(uint8_t *buf, uint32_t len)
{uint32_t i = 0, j = 0;_fifo_str *p = &fifo_str;j = p->in % p->size;len = min(len, p->size - p->in + p->out);i = min(len, p->size - j);memcpy(p->buf + j, buf, i);memcpy(p->buf, buf + i, len - i);p->in += len;return len;
}void FifoClear(void)
{_fifo_str *p = &fifo_str;p->in = 0;p->out = 0;
}

fifo.h

#ifndef _FIF0_H_
#define _FIFO_H_#include "wm_hal.h"typedef struct fifo_t {uint8_t *buf;uint32_t size;uint32_t in;uint32_t out;
} _fifo_str;#define min(x,y) ((x) < (y)?(x):(y))int FifoInit(uint8_t *fifo_addr, uint32_t fifo_size);int FifoDataLen(void);int FifoSpaceLen(void);int FifoRead(uint8_t *buf, uint32_t len);int FifoWrite(uint8_t *buf, uint32_t len);void FifoClear(void);#endif

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400098.shtml

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

相关文章

【联盛德W806上手笔记】七、I2C

目录WM_SDK_W806_v0.6.0的库函数函数参数宏应用示例初始化使用测试I2C 控制器功能概述主要特性功能描述传输速率选择中断及启动停止可控快速输出及检测信号寄存器描述寄存器列表时钟分频寄存器_1时钟分频寄存器_2控制寄存器数据寄存器收发控制寄存器TXR 读出寄存器CR 读出寄存器…

【联盛德W806上手笔记】八、SPI及其DMA

目录高速 SPI 设备控制器库函数函数参数宏应用示例初始化引脚复用中断相关使用注意事项DataAlignmentDirection测试main.cwm_hal_msp.cwm_it.c其他改动实验现象Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书…

安装配置 radicale

为什么80%的码农都做不了架构师&#xff1f;>>> 可以直接pip安装,也可以下载源码安装,如果要存储到sql里面,则需要下载源码包,用里面的schema.sql 建表 默认安装后没有相应的配置文件,源码包里面也包含了 logging 和config,放到/etc/radicale 下 安装没什么说的,下…

【联盛德W806上手笔记】九、DMA

目录DMA 控制器功能概述功能描述DMA 通道DMA 数据流DMA 循环模式DMA 传输模式DMA 外设选择DMA 链表模式DMA 中断中断请求库函数函数参数宏应用Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 MCU 芯片规格书 V2.0》、《WM_W800_寄存器手册 V2.1》 DMA 控制…

SNF快速开发平台MVC-自由排序组件

1. 自由排序功能使用 在一些需要排序优先级的数据进行调整处理&#xff0c;如民族数据&#xff0c;在北方实施的时候汉族比较多&#xff0c;希望把汉族放在第一位。在蒙古实施项目时&#xff0c;蒙古族人最多把蒙古族放在第一选择位。 1.1. 效果展示 图 1.1 1.2. …

【联盛德W806上手笔记】十、ADC

目录ADCADC 电路设计库函数函数参数宏Demo中的例程main.cwm_hal_msp.cwm_it.cWindows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》 ADC 基于 Sigma-Delta ADC 的采集模块&#xff0c;集成 4 路 16 比特 AD…

【电路补习笔记】8、稳压电路 —— 线性电源及LDO

目录有名的电源芯片品牌DCDC电源分类开关电源vs线性稳压器线性电源参数线性电源工作原理集成稳压器78/79系列&#xff08;固定输出电压&#xff09;正、负对称输出两组电源的稳压电路扩展输出电压扩大输出电流LM317/LM337&#xff08;可调输出电压&#xff09;正、负对称输出两…

ajax代码整理

$.ajax({ type: "post", 【以POST或GET的方式请求。默认GET。PUT和DELETE也可以用&#xff0c;有的浏览器不支持】 url: url, 【请求的目的地址&#xff0c;须是一个字符串。】 contentType: "application/json", 【以哪种数据类型发送请求】 data: data, …

创建一个简单的WCF程序

为了使读者对基于WCF的编程模型有一个直观的映像&#xff0c;我将带领读者一步一步地创建一个完整的WCF应用。本应用功能虽然简单&#xff0c;但它涵盖了一个完整WCF应用的基本结构。对那些对WCF不是很了解的读者来说&#xff0c;这个例子将带领你正式进入WCF的世界。 在这个例…

深圳IO —— 一个汇编编程小游戏

目录简介数据手册接口简单 I/OXBus简单 I/O 对比 XBus语言参考程序结构注释标签寄存器accdatp0、p1、x0、x1、x2、x3null 伪寄存器指令操作数确保进行足够的睡眠 (slp)&#xff01;基本指令算法指令条件指令隐藏指令游戏界面DIY版本&#xff1a; 简介 以下介绍摘自未来软件园 …

unity shader 编辑器扩展类 ShaderGUI

这应该unity5才出的新功能了&#xff0c;今天看文档时刚巧看到了&#xff0c;就来尝试了一下。 效果如图&#xff1a; shader 的编辑器扩展分为2种方法&#xff1a; 是通过UnityEditor下的ShaderGUI类来实现的&#xff0c;形式比较近似于我们一般对unity编辑器的扩展方式。是通…

【电路补习笔记】9、电容式开关电源(电荷泵)

目录分类原理电荷泵基础开关电容稳压器的细调功能电荷泵的电压增益调节输出电容&#xff08;Co&#xff09;优点电容式开关稳压器减小纹波相关应用老师的主页&#xff1a;唐老师讲电赛 视频地址&#xff1a; 电源大师3——电容式开关电源&#xff08;电荷泵&#xff09;工作原理…

CPU 硬盘性能到底相差多少

本文以一个现代的、实际的个人电脑为对象&#xff0c;分析其中CPU&#xff08;Intel Core 2 Duo 3.0GHz&#xff09;以及各类子系统的运行速度——延迟和数据吞吐量。通过粗略的估算PC各个组件的相对运行速度&#xff0c;希望能给大家留下一个比较直观的印象。本文中的数据来自…

【电路补习笔记】10、电感式开关电源(BUCK 降压电路)

目录分类封装焊线式覆晶式开关电源三种基本的非隔离开关电源纹波&#xff08;ripple&#xff09;开关电源的元件构成有源开关肖特基二极管或快恢复二极管不使用普通硅二极管的原因电感电容分压电阻&#xff08;输出电压设置&#xff09;工作原理工作模式连续模式&#xff08;co…

php中Session的生成机制、回收机制和存储机制探究

转载:http://www.jb51.net/article/53938.htm这篇文章主要介绍了php中Session的生成机制、回收机制和存储机制探究,可以帮助大家对Session有一个全面的了解,需要的朋友可以参考下1、php中session的生成机制我们先来分析一下PHP中是怎么生成一个session的。设计出session的目的是…

wsl2 Ubuntu 18.04 安装 ROS

目录前期准备安装ROS初始化rosdep测试前期准备 WSL的安装见旧版 WSL 的手动安装步骤从步骤4开始弄。 图形界面安装见在WSL中使用GPU&#xff1a;WSL2 Ubuntu 18.04 CUDA Gnome图形界面环境配置 界面汉化见WSL-Ubuntu安装中文语言 这里使用鱼香ROS大佬的一键安装脚本&…

GPU CUDA 经典入门指南

转自&#xff1a;http://luofl1992.is-programmer.com/posts/38830.html CUDA编程中&#xff0c;习惯称CPU为Host&#xff0c;GPU为Device。编程中最开始接触的东西恐怕是并行架构&#xff0c;诸如Grid、Block的区别会让人一头雾水&#xff0c;我所看的书上所讲述的内容比较抽象…

用PyQt实现透明桌面时钟小部件

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- coding: utf-8 -*-Created on 2012-4-6author: wangxiaoimport sys from PyQt4 import QtGui, QtCore from PyQt4.QtCore import Qt from PyQt4.QtCore import QPoint from PyQt4.QtCore…

实现织梦dedecms百度主动推送(实时)网页抓取

做百度推广的时候&#xff0c;如何让百度快速收录呢&#xff0c;下面提供了三种方式&#xff0c;今天我们主要讲的是第一种。 如何选择链接提交方式 1、主动推送&#xff1a;最为快速的提交方式&#xff0c;推荐您将站点当天新产出链接立即通过此方式推送给百度&#xff0c;以保…

【RK3399Pro学习笔记】十八、点亮LED灯(python、C语言、bash)

目录GPIOpython3python-peripherypython2RPiC语言SysFs方式编写gpiolib.cgpiolib.hmain.c编译测试wiringPibash平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 GPIO (机翻)下表显示了座子的引脚&am…