嵌入式学习——串口通信小试
嵌入式学习——串口通信小试
目录
- 嵌入式学习——串口通信小试
- 1.了解串口协议和RS-232、485标准,以及RS-232、485电平与TTL电平的区别
- 1.1 什么是串口协议
- 1.2 RS-232标准
- 1.3 RS-485标准
- 1.4 RS-232、RS-485电平与TTL电平的区别:
- 2. USB转串口CH340接线
- 3. 完成一个STM32的USART串口通讯程序(查询方式即可)
- 3.1 题目要求
- 3.2 所需器件
- 3.3 使用HAL库进行串口通信程序编写
- 3.3.1 配置工程文件
- 3.3.2调试并烧录
- 3.4 使用MDK汇编语言进行串口通信程序编写
- 3.4.1 创建工程
- 3.4.2 写入程序
- 4.keil观察管脚的时序波形
1.了解串口协议和RS-232、485标准,以及RS-232、485电平与TTL电平的区别
1.1 什么是串口协议
串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范
通信接口背景知识
设备之间通信的方式:
一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是:
串行通信的分类
1、按照数据传送方向,分为:
单工:数据传输只支持数据在一个方向上传输;
半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。
全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。
2、按照通信方式,分为:
同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。
异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线。
在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。
在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。
在同步通讯中,数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。
常见的串行通信接口:
1.2 RS-232标准
简介:
RS-232接口是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准是采用负逻辑传送,即:+3V~+15V对应0,-3V~-15V对应1。
STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。
UART引脚连接方法
RXD:数据输入引脚,数据接受;
TXD:数据发送引脚,数据发送。
若是芯片与PC机(或上位机)相连,除了共地之外,就不能这样直接交叉连接了。
尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。故,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。如图:
RS-232通讯协议标准串口的设备间通讯结构图如下:
因此,单片机串口与PC串口通信遵循下面的连接方式:
在单片机串口与上位机给出的rs232口之间,通过电平转换电路,实现TTL电平与RS232电平之间的转换。
1.3 RS-485标准
简介:
RS-485标准专门弥补RS-232通讯距离短、速率低等缺点而产生。RS-485标准只规定了平衡发送器和接收器的特性。而没有规定接插件、传输电缆和应用层通讯协议。
RS-485有两线制和四线制两种接线,四线制只能实现点对点的通讯方式,现很少采用,多采用两线制接线方式。这种接线方式为总线式拓朴结构在同一总线上最多可以挂线32–128个结点。
在RS-485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。通讯协议采用按照设备地址查询的方式,其通讯的效率很低,不适合高速传输系统。一般速率不超过19200bps。波特率为9600Bps、1200Bps。RS-485标准的最大传输距离约为1219米,最大传输速率为10Mbps。
RS-485 的电气特性:
逻辑“1”以两线间的电压差为+(2—6) V 表示;
逻辑“0”以两线间的电压差为 -(2—6)V 表示;
接口信号电平比 RS -232-C 降低了,就不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。
RS-485优点:
RS-485 接口的最大传输距离标准值为 4000 英尺,实际上可达 3000 米。
RS-485 接口在总线上是允许连接多达 128 个收发器,因 RS-485 接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选的串行接口。
RS-485传输线路:
因为 RS485 接口组成的半双工网络 ,一般只需二根连线,所以 RS485 接口均采用屏蔽双绞线传输。
1.4 RS-232、RS-485电平与TTL电平的区别:
RS-232逻辑电平:
逻辑“1”以两线间的电压差为-(3—15)V表示;
逻辑“0”以两线间的电压差为+(3—15)V表示;
RS-485逻辑电平:
逻辑“1”以两线间的电压差为+(2—6) V 表示;
逻辑“0”以两线间的电压差为 -(2—6)V 表示;
TTL逻辑电平:
逻辑“1”以两线间的电压差为+5 V 表示;
逻辑“0”以两线间的电压差为 0 V 表示;
2. USB转串口CH340接线
USB转串口模块可以使用5V、3V3电压供电,需要将跳线帽进行安装 (将5V和VCC盖住或者将3.3V与VCC盖住)。
由电脑USB通过板载稳压芯片供电,最大700mA。
测试USB转串口模块工作是否正常的步骤:
可以对USB转串口模块进行测试,将USB的电压引脚用跳帽接上,然后将RXD和TXD两个引脚用跳帽或者杜邦线接上。
然后打开串口终端,点击“手动发送”或者“自动发送”,如果在接收区可以接收到数据,说明USB转串口模块工作正常,否则需要检查接线是否正确、电路板元器件是否损坏。
USB转串口电路板与单片机的接线图,VCC接线是为了单片机供电,USB转串口的RXD引脚与单片机的TXD引脚相连,USB转串口的TXD引脚与单片机的RXD引脚相连,两者的GND引脚直接相连。如图:
3. 完成一个STM32的USART串口通讯程序(查询方式即可)
3.1 题目要求
完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
3.2 所需器件
STM32F103C8T6最小核心板
USB转TTL
CH340驱动(USB串口驱动)_XP_WIN7共用 (如果串口调试助手能够检测到端口就不需要这个驱动,如有需要请参考次博客:【嵌入式09】STM32串口通信,发送Hello Windows示例)
串口调试助手
链接:https://pan.baidu.com/s/1WyvtnCJad_BqXbwTzhcofw
提取码:h2xc
3.3 使用HAL库进行串口通信程序编写
3.3.1 配置工程文件
下载STM32CubeX以及新建工程步骤请看参考次博客:https://blog.csdn.net/qq_66144143/article/details/127309228?spm=1001.2014.3001.5501
这里是本次学习所需改变的配置:
选择时钟:外部时钟源(Crystal/Ceramaic Resonator)
再点击connectivity,然后选择USART2(通用同步异步收发器),再选择Asynchronous
然后进行时钟设置:
然后按照刚刚发的参考博客,设置好之后再点开keil文件即可。
3.3.2调试并烧录
然后在打开的keil文件里面打开main.c文件,找到while循坏,把下面的代码复制进去:
char data[]="hello windows!\n";HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//高电平点亮A12HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);HAL_Delay(100);//低电平熄灭A12HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);HAL_Delay(900);
如图:
然后就可以进行调试了,调试成功之后就可以烧录了,需要注意的是这里我们使用的是USART2接口,查询STM32F103C8T6的引脚图可知,USART2对应的RXD和TXD为PA2和PA3接口,进行串口调试的时候,需要把烧录的时候连接PA10和PA9的接口改为连接PA2和PA3接口。引脚图:
烧录HEX文件:
串口调试助手效果:
3.4 使用MDK汇编语言进行串口通信程序编写
3.4.1 创建工程
配置请参考博客:https://blog.csdn.net/qq_66144143/article/details/127199953
3.4.2 写入程序
复制下面的汇编语言:
;RCC寄存器地址映像
RCC_BASE EQU 0x40021000
RCC_CR EQU (RCC_BASE + 0x00)
RCC_CFGR EQU (RCC_BASE + 0x04)
RCC_CIR EQU (RCC_BASE + 0x08)
RCC_APB2RSTR EQU (RCC_BASE + 0x0C)
RCC_APB1RSTR EQU (RCC_BASE + 0x10)
RCC_AHBENR EQU (RCC_BASE + 0x14)
RCC_APB2ENR EQU (RCC_BASE + 0x18)
RCC_APB1ENR EQU (RCC_BASE + 0x1C)
RCC_BDCR EQU (RCC_BASE + 0x20)
RCC_CSR EQU (RCC_BASE + 0x24) ;AFIO寄存器地址映像
AFIO_BASE EQU 0x40010000
AFIO_EVCR EQU (AFIO_BASE + 0x00)
AFIO_MAPR EQU (AFIO_BASE + 0x04)
AFIO_EXTICR1 EQU (AFIO_BASE + 0x08)
AFIO_EXTICR2 EQU (AFIO_BASE + 0x0C)
AFIO_EXTICR3 EQU (AFIO_BASE + 0x10)
AFIO_EXTICR4 EQU (AFIO_BASE + 0x14) ;GPIOA寄存器地址映像
GPIOA_BASE EQU 0x40010800
GPIOA_CRL EQU (GPIOA_BASE + 0x00)
GPIOA_CRH EQU (GPIOA_BASE + 0x04)
GPIOA_IDR EQU (GPIOA_BASE + 0x08)
GPIOA_ODR EQU (GPIOA_BASE + 0x0C)
GPIOA_BSRR EQU (GPIOA_BASE + 0x10)
GPIOA_BRR EQU (GPIOA_BASE + 0x14)
GPIOA_LCKR EQU (GPIOA_BASE + 0x18) ;GPIO C口控制
GPIOC_BASE EQU 0x40011000
GPIOC_CRL EQU (GPIOC_BASE + 0x00)
GPIOC_CRH EQU (GPIOC_BASE + 0x04)
GPIOC_IDR EQU (GPIOC_BASE + 0x08)
GPIOC_ODR EQU (GPIOC_BASE + 0x0C)
GPIOC_BSRR EQU (GPIOC_BASE + 0x10)
GPIOC_BRR EQU (GPIOC_BASE + 0x14)
GPIOC_LCKR EQU (GPIOC_BASE + 0x18) ;串口1控制
USART1_BASE EQU 0x40013800
USART1_SR EQU (USART1_BASE + 0x00)
USART1_DR EQU (USART1_BASE + 0x04)
USART1_BRR EQU (USART1_BASE + 0x08)
USART1_CR1 EQU (USART1_BASE + 0x0c)
USART1_CR2 EQU (USART1_BASE + 0x10)
USART1_CR3 EQU (USART1_BASE + 0x14)
USART1_GTPR EQU (USART1_BASE + 0x18) ;NVIC寄存器地址
NVIC_BASE EQU 0xE000E000
NVIC_SETEN EQU (NVIC_BASE + 0x0010)
;SETENA寄存器阵列的起始地址
NVIC_IRQPRI EQU (NVIC_BASE + 0x0400)
;中断优先级寄存器阵列的起始地址
NVIC_VECTTBL EQU (NVIC_BASE + 0x0D08)
;向量表偏移寄存器的地址
NVIC_AIRCR EQU (NVIC_BASE + 0x0D0C)
;应用程序中断及复位控制寄存器的地址
SETENA0 EQU 0xE000E100
SETENA1 EQU 0xE000E104 ;SysTick寄存器地址
SysTick_BASE EQU 0xE000E010
SYSTICKCSR EQU (SysTick_BASE + 0x00)
SYSTICKRVR EQU (SysTick_BASE + 0x04) ;FLASH缓冲寄存器地址映像
FLASH_ACR EQU 0x40022000 ;SCB_BASE EQU (SCS_BASE + 0x0D00) MSP_TOP EQU 0x20005000
;主堆栈起始值
PSP_TOP EQU 0x20004E00
;进程堆栈起始值 BitAlias_BASE EQU 0x22000000
;位带别名区起始地址
Flag1 EQU 0x20000200
b_flas EQU (BitAlias_BASE + (0x200*32) + (0*4))
;位地址
b_05s EQU (BitAlias_BASE + (0x200*32) + (1*4))
;位地址
DlyI EQU 0x20000204
DlyJ EQU 0x20000208
DlyK EQU 0x2000020C
SysTim EQU 0x20000210 ;常数定义
Bit0 EQU 0x00000001
Bit1 EQU 0x00000002
Bit2 EQU 0x00000004
Bit3 EQU 0x00000008
Bit4 EQU 0x00000010
Bit5 EQU 0x00000020
Bit6 EQU 0x00000040
Bit7 EQU 0x00000080
Bit8 EQU 0x00000100
Bit9 EQU 0x00000200
Bit10 EQU 0x00000400
Bit11 EQU 0x00000800
Bit12 EQU 0x00001000
Bit13 EQU 0x00002000
Bit14 EQU 0x00004000
Bit15 EQU 0x00008000
Bit16 EQU 0x00010000
Bit17 EQU 0x00020000
Bit18 EQU 0x00040000
Bit19 EQU 0x00080000
Bit20 EQU 0x00100000
Bit21 EQU 0x00200000
Bit22 EQU 0x00400000
Bit23 EQU 0x00800000
Bit24 EQU 0x01000000
Bit25 EQU 0x02000000
Bit26 EQU 0x04000000
Bit27 EQU 0x08000000
Bit28 EQU 0x10000000
Bit29 EQU 0x20000000
Bit30 EQU 0x40000000
Bit31 EQU 0x80000000 ;向量表 AREA RESET, DATA, READONLY DCD MSP_TOP ;初始化主堆栈 DCD Start ;复位向量 DCD NMI_Handler ;NMI Handler DCD HardFault_Handler ;Hard Fault Handler DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD SysTick_Handler ;SysTick Handler SPACE 20 ;预留空间20字节 ;代码段 AREA |.text|, CODE, READONLY ;主程序开始 ENTRY ;指示程序从这里开始执行
Start ;时钟系统设置 ldr r0, =RCC_CR ldr r1, [r0] orr r1, #Bit16 str r1, [r0] ;开启外部晶振使能 ;启动外部8M晶振 ClkOk ldr r1, [r0] ands r1, #Bit17 beq ClkOk ;等待外部晶振就绪 ldr r1,[r0] orr r1,#Bit17 str r1,[r0] ;FLASH缓冲器 ldr r0, =FLASH_ACR mov r1, #0x00000032 str r1, [r0] ;设置PLL锁相环倍率为7,HSE输入不分频 ldr r0, =RCC_CFGR ldr r1, [r0] orr r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14) orr r1, #Bit10 str r1, [r0] ;启动PLL锁相环 ldr r0, =RCC_CR ldr r1, [r0] orr r1, #Bit24 str r1, [r0]
PllOk ldr r1, [r0] ands r1, #Bit25 beq PllOk ;选择PLL时钟作为系统时钟 ldr r0, =RCC_CFGR ldr r1, [r0] orr r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14) orr r1, #Bit10 orr r1, #Bit1 str r1, [r0] ;其它RCC相关设置 ldr r0, =RCC_APB2ENR mov r1, #(Bit14 :OR: Bit4 :OR: Bit2) str r1, [r0] ;IO端口设置 ldr r0, =GPIOC_CRL ldr r1, [r0] orr r1, #(Bit28 :OR: Bit29) ;PC.7输出模式,最大速度50MHz and r1, #(~Bit30 & ~Bit31) ;PC.7通用推挽输出模式 str r1, [r0] ;PA9串口0发射脚 ldr r0, =GPIOA_CRH ldr r1, [r0] orr r1, #(Bit4 :OR: Bit5) ;PA.9输出模式,最大速度50MHz orr r1, #Bit7 and r1, #~Bit6 ;10:复用功能推挽输出模式 str r1, [r0] ldr r0, =USART1_BRR mov r1, #0x271 str r1, [r0] ;配置波特率-> 115200 ldr r0, =USART1_CR1 mov r1, #0x200c str r1, [r0] ;USART模块总使能 发送与接收使能 ;71 02 00 00 2c 20 00 00 ;AFIO 参数设置 ;Systick 参数设置 ldr r0, =SYSTICKRVR ;Systick装初值 mov r1, #9000 str r1, [r0] ldr r0, =SYSTICKCSR ;设定,启动Systick mov r1, #0x03 str r1, [r0] ;NVIC ;ldr r0, =SETENA0 ;mov r1, 0x00800000 ;str r1, [r0] ;ldr r0, =SETENA1 ;mov r1, #0x00000100 ;str r1, [r0] ;切换成用户级线程序模式 ldr r0, =PSP_TOP ;初始化线程堆栈 msr psp, r0 mov r0, #3 msr control, r0 ;初始化SRAM寄存器 mov r1, #0 ldr r0, =Flag1 str r1, [r0] ldr r0, =DlyI str r1, [r0] ldr r0, =DlyJ str r1, [r0] ldr r0, =DlyK str r1, [r0] ldr r0, =SysTim str r1, [r0] ;主循环
main ldr r0, =Flag1 ldr r1, [r0] tst r1, #Bit1 ;SysTick产生0.5s,置位bit 1 beq main ;0.5s标志还没有置位 ;0.5s标志已经置位 ldr r0, =b_05s ;位带操作清零0.5s标志 mov r1, #0 str r1, [r0] bl LedFlas mov r0, #'H' bl send_a_charmov r0, #'e' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'o' bl send_a_charmov r0, #' ' bl send_a_charmov r0, #'w' bl send_a_charmov r0, #'o' bl send_a_charmov r0, #'r' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'d' bl send_a_charmov r0, #'\n' bl send_a_charb main;子程序 串口1发送一个字符
send_a_char push {r0 - r3} ldr r2, =USART1_DR str r0, [r2]
b1 ldr r2, =USART1_SR ldr r2, [r2] tst r2, #0x40 beq b1 ;发送完成(Transmission complete)等待 pop {r0 - r3} bx lr ;子程序 led闪烁
LedFlas push {r0 - r3} ldr r0, =Flag1 ldr r1, [r0] tst r1, #Bit0 ;bit0 闪烁标志位 beq ONLED ;为0 打开led灯 ;为1 关闭led灯 ldr r0, =b_flas mov r1, #0 str r1, [r0] ;闪烁标志位置为0,下一状态为打开灯 ;PC.7输出0 ldr r0, =GPIOC_BRR ldr r1, [r0] orr r1, #Bit7 str r1, [r0] b LedEx
ONLED ;为0 打开led灯 ldr r0, =b_flas mov r1, #1 str r1, [r0] ;闪烁标志位置为1,下一状态为关闭灯 ;PC.7输出1 ldr r0, =GPIOC_BSRR ldr r1, [r0] orr r1, #Bit7 str r1, [r0]
LedEx pop {r0 - r3} bx lr ;异常程序
NMI_Handler bx lr HardFault_Handler bx lr SysTick_Handler ldr r0, =SysTim ldr r1, [r0] add r1, #1 str r1, [r0] cmp r1, #500 bcc TickExit mov r1, #0 str r1, [r0] ldr r0, =b_05s ;大于等于500次 清零时钟滴答计数器 设置0.5s标志位 ;位带操作置1 mov r1, #1 str r1, [r0]
TickExit bx lr ALIGN ;通过用零或空指令NOP填充,来使当前位置与一个指定的边界对齐 END
然后调试即可。
4.keil观察管脚的时序波形
开始观察前,需要点击魔法棒配置虚拟仿真,见博客:https://blog.csdn.net/qq_66144143/article/details/127309228?spm=1001.2014.3001.5501
需要注意的是:只观察PA2和PA3口是不会出现波形的,需要通过另外设置一个GPIO口作为输出来观察波形。
波形如图:
参考博客:
【嵌入式09】STM32串口通信,发送Hello Windows示例
RS485通讯标准协议解读
嵌入式学习——串口通信小试相关推荐
- Linux ROS与嵌入式的串口通信
1.根据ros wiki的官方教程 学习即可,并且有许多例子可供学习 http://wiki.ros.org/rosserial_arduino/Tutorials 2.用ASIO读写设备串行口 AS ...
- FPGA学习—串口通信
FPGA学习系列 接下来介绍串口通信控制,本次就不用串口回环了,像正点原子,野火等fpga教程都会教串口回环,所以本文我将介绍如何串口控制去执行一些操作.之后也将拓展FPGA控制串口屏. 目录 FPG ...
- 第5-6周-实验作业-串口通信小试
目录 一.寄存器写流水灯 1.在Cube_Mx选择F103C8芯片包 2.设置GPIO 3.设置时钟 4.生成函数后对main函数进行修改 5. 利用寄存器写流水灯,代码如下 二.串口通信 1.串口初 ...
- 【实验】串口通信小试
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理. 二.代码编写 三.所用软 ...
- 嵌入式开发—串口通信
文章目录 1 概述 1.1 串口通信是什么 1.2 波特率 1.3 串口通信的用途 2 串口收发 2.1 波特率发生器 2.2 收发FIFO 2.3 DMA 3 串口收发程序设计 3.1 串口发送数据 ...
- MSP430f2619学习—串口通信
1.初始化 USCI_A0引脚:P3.4.P3.5: UCA0CTL0:配置寄存器0,可配置奇偶校验位.数据位.通信模式等参数: UCA0CTL1:配置寄存器1,可配置时钟源等参数: 串口0初始化配置 ...
- STM32串口通信学习总结
STM32串口通信学习总结 1.概述 1.1学习目的 ...
- ESP32学习记录<三>串口通信
ESP32学习记录<三>串口通信 文章目录 ESP32学习记录<三>串口通信 前言 一.通过串口打印出数据 1.初始化串口 2.打印数据 二.串口控制LED亮灭 1.接收串口发 ...
- 【正点原子FPGA连载】第十四章 串口通信实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...
最新文章
- 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积
- 北大华为鹏城联合首次提出视觉 Transformer 后量化算法!
- Nagios监控linux服务器
- C语言math.h中的常用函数实例详解
- freeRtos学习笔(1)内核剪裁
- 大话PM | 产品经理必备利器——UML
- Flutter 下拉刷新花式玩法
- 免费注册丨全国社会媒体处理大会(SMP 2020)召开,98场报告日程全公开
- C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结
- c++ 写入文件_利用Python把数据存储在csv文件中
- win7 oracle数据库删除用户名,win7操作系统、 oracle10g 数据库创建、卸载 用户名的创建 、删除...
- HEX2BIN不能在win7_64位下执行的Keil官方解决方案
- anaconda安装LabelImg
- Android NDK 建立cocos2dx项目
- TSINGSEE青犀视频开发AI人脸对比如何输出多个对比相似度的人脸?
- 微信小程序实现身份证识别功能
- 网络web渗透工程师-教你怎么喝着茶,把甲方爸爸的活干了。
- python 微信公众号网页接口调用_Python调用微信公众平台接口操作示例
- 长坂坡被赵云挑翻50多员武将资料全部资料(转)
- 解密 富士白光HAKKO触摸屏上传密码解密