GD32F307 DAC 输出波形

文章目录

    • DAC
      • DAC_CTL 控制寄存器
    • 定时器
      • TIMERx_CTL1 控制寄存器
      • 改变波形频率
    • DMA
      • DMA和外设配合
      • DMA_CHxCNT计数寄存器
    • 波形曲线
    • 总结
    • 源码

DAC

如下面框图所示,使能外部触发后(通过设置 DAC_CTL 寄存器的 DTENx 位), 当已经选择的触发事件发
生, DAC 保持数据(DACx_DH)会被转移到 DAC 数据输出寄存器(DACx_DO),经过一段时间之后,模拟输出变得有效。DAC引脚上的模拟输出电压DACoutput=VREF×DAC_DO/4096。

对于12位的DAC保持数据(DACx_DH),可以通过对DACx_R12DH、DACx_L12DH和DACx_R8DH中的任意一个寄存器写入数据来配置。

在外部触发使能的情况下,通过设置DAC_CTL寄存器的DDMAENx位来使能DMA请求。当有外部硬件触发的时候(不是软件触发),则产生一个DMA请求。

在这里插入图片描述

DAC_CTL 控制寄存器

名称描述
DWBW0[3:0]DAC0 噪声波位宽
DDMAEN0DAC0 DMA 使能
DWM0[1:0]DAC0 噪声波模式
DTSEL0[2:0]DAC0 触发选择
DBOFF0DAC0 输出缓冲区
DEN0DAC0 使能
DTEN0DAC0 触发使能

在这里插入图片描述

配置DAC其实还是配置的上面这些东西,只不过,代码里面是调用了固件库函数来配的。

其中在DAC0外部触发使能(DTEN0=1)的情况下,DAC0外部触发源选择TIMER6 TRGO。

/*DAC通道输出配置,定时器6触发,不开启输出缓存*/
static void sin_adc_channel_config(void)
{//DAC外设复位dac_deinit();/* DAC触发禁能 */dac_trigger_disable(SIN_DAC);//DAC噪声波模式选择dac_wave_mode_config(SIN_DAC, DAC_WAVE_DISABLE);//DAC输出缓冲区禁能dac_output_buffer_disable(SIN_DAC);/* DAC触发源的选择*/dac_trigger_source_config(SIN_DAC,DAC_TRIGGER_T6_TRGO);/* DAC的DMA功能使能 */dac_dma_enable(SIN_DAC);/* DAC触发使能 */dac_trigger_enable(SIN_DAC);/* DAC使能 */dac_enable(SIN_DAC);
}

定时器

选用基本定时器TIM6触发DAC。

如下面框图所示,TIMER_CK驱动计数器预分频器,预分频值由TIMERx_PSC寄存器确定,TIMER_CK经过预分频器产生PSC_CLK。向上计数模式下,计数器从0开始向上连续计数到自动加载值(在TIMERx_CAR寄存器中),然后,重新从0开始向上计数并产生上溢事件。此时,如果TIMERx_SWEVG寄存器的UPG位置1,计数值会被清0,并产生更新事件。发生更新事件时,所有的寄存器(重复计数器,自动重载寄存器,预分频寄存器)都将被更新。

在这里插入图片描述

TIMERx_CTL1 控制寄存器

在这里插入图片描述

其中MMC[2:0]位控制TRGO信号的选择,使用timer_master_output_trigger_source_select函数,主模式控制器选择更新事件作为TRGO。

使用timer_update_event_enable函数,将TIMERx_SWEVG寄存器的UPG位置1,那么定时器产生上溢事件时会产生更新事件,然后触发TIMERx_TRGO。进而触发DAC。

	//定时器主输出触发源选择timer_master_output_trigger_source_select(SIN_TIM,TIMER_TRI_OUT_SRC_UPDATE);//定时器更新事件使能timer_update_event_enable(SIN_TIM);

改变波形频率

这里面,设置不同的定时周期,会改变输出波形的频率。
按照下面这样设置,最终会得到4KHZ的正弦波。

/*TIMx触发配置*/
void sin_timx_trigger_function_config(void)
{timer_parameter_struct timer_initpara;rcu_periph_clock_enable(SIN_TIM_CLK);timer_deinit(SIN_TIM);/* TIMER6 configuration */timer_initpara.prescaler         = 1-1;//预分频timer_initpara.counterdirection  = TIMER_COUNTER_UP;//向上计数timer_initpara.period            = 225-1;//定时周期timer_init(SIN_TIM,&timer_initpara);//定时器主输出触发源选择timer_master_output_trigger_source_select(SIN_TIM,TIMER_TRI_OUT_SRC_UPDATE);//定时器更新事件使能timer_update_event_enable(SIN_TIM);
}

DMA

DMA控制器提供了一种硬件的方式,在外设和存储器之间或者存储器和存储器之间传输数据。无需CPU的介入,使CPU可以专注在处理其他系统功能上。

DMA传输 ,从源地址读取数据后,将读取的数据存储到目的地址。

AHB从接口配置DMA,AHB主接口进行数据传输,仲裁器进行DMA请求的优先级管理。

在这里插入图片描述

dma_parameter_struct结构体:

名称描述
periph_addr外设基地址
periph_width外设数据传输宽度
memory_addr存储器基地址
memory_width存储器数据传输宽度
numberDMA通道数据传输数量
priorityDMA通道传输软件优先级
periph_inc外设地址生成算法模式
memory_inc存储器地址生成算法模式
directionDMA通道数据传输方向

初始化,设定上面结构体的值,其实还是对DMA_CHxCTL寄存器的一些设置。设置传输方向为从存储器读出并写入外设。

在这里插入图片描述

存储器和外设都独立的支持两种地址生成算法:固定模式和增量模式。寄存器DMA_CHxCTL的PNAGA和MNAGA位用来设置存储器和外设的地址生成算法,固定模式中,地址一直固定为初始化的基地址,增量模式中,下一次传输数据的地址是当前地址加1(或2、4,取决于数据传输宽度) ,前面波形数组uint16_t Sine[POINT_NUM2]定义的是U16,所以设置的宽度也是16bit。

//DMA配置
static void sin_dma_config(void)
{dma_parameter_struct dma_init_struct;/* enable DMA CLK */rcu_periph_clock_enable(SIN_DMA_CLK);/* deinitialize DMA channel3(USART0 tx) */dma_deinit(SIN_DMA, SIN_DMA_CHANNEL);dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
//	dma_init_struct.memory_addr = ;dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
//	dma_init_struct.number = ;
//	dma_init_struct.periph_addr = ;dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;dma_init(SIN_DMA, SIN_DMA_CHANNEL, &dma_init_struct);/* configure DMA mode 存储器到存储器DMA传输禁能*/dma_memory_to_memory_disable(SIN_DMA, SIN_DMA_CHANNEL);
}

DMA和外设配合

循环模式用来处理连续的外设请求,循环模式中,当每次DMA传输完成后,CNT值会被重新载入,且传输完成标志位会被置1。
DMA会一直响应外设的请求,直到通道使能位(DMA_CHxCTL寄存器的CHEN位)被清0。

当DMA控制器在同一时间接收到多个外设请求时,仲裁器将根据外设请求的优先级来决定响应哪一个外设请求。当通道具有相同的软件优先级时,编号低的通道优先级高。

多个外设请求被映射到同一个DMA 通道。这些请求信号在经过逻辑或后进入DMA。通过配置对应外设的寄存器,每个外设
的请求均可以独立的开启或关闭。DMA1各通道请求表如下,由于外设是DAC_CH0,所以选用DMA1的Channel2通道。

在这里插入图片描述

为了保证数据的有效传输, DMA控制器中引入了外设和存储器的握手机制。请求信号由外设发出,表明外设已经准备好发送或接收数据,应答信号由DMA控制器响应,表明DMA控制器已经发送AHB命令去访问外设。

在这里插入图片描述

DMA_CHxCNT计数寄存器

在这里插入图片描述

CNT[15:0],该寄存器表明还有多少数据等待被传输。一旦通道使能,该寄存器为只读的,并在每个DMA传输之后值减1。如果该寄存器的值为0,无论通道开启与否,都不会有数据传输。如果该通道工作在循环模式下,一旦通道的传输任务完成,该寄存器会被自动重装载为初始设置值。程序中,用dma_transfer_number_config函数配置该寄存器的值。

#define ARRAYNUM(arr_name)     (uint32_t)(sizeof(arr_name)/sizeof(*(arr_name)))
#define DAC0_R12DH_ADDRESS    	((uint32_t)0x40007408)
void sin_dma_function_config(void)
{	//DMAx的通道y的存储器基地址配置dma_memory_address_config(SIN_DMA,SIN_DMA_CHANNEL,(uint32_t)Sine);//配置DMAx通道y还有多少数据要传输dma_transfer_number_config(SIN_DMA,SIN_DMA_CHANNEL,ARRAYNUM(Sine));//DMAx的通道y的外设基地址配置dma_periph_address_config(SIN_DMA,SIN_DMA_CHANNEL,DAC0_R12DH_ADDRESS);//DMA循环模式开启dma_circulation_enable(SIN_DMA, SIN_DMA_CHANNEL);//DMA的通道使能dma_channel_enable(SIN_DMA, SIN_DMA_CHANNEL);
}

外设基地址配置:

DAC0_R12DH地址偏移: 0x08

DAC 基地址: 0x4000 7400

DAC0_R12DH地址:0x4000 7408

波形曲线

其中可以修改点数,使波形变得平滑;也可以修改波形幅值;也可以修改波形形状。

#! python3
#coding=utf-8import matplotlib.pyplot as plt 
import numpy as np
import math#修改本变量可以更改点数,如16、32、64等
POINT_NUM = 120pi = math.pi#一个周期 POINT_NUM 个点
n = np.linspace(0,2*pi,POINT_NUM)#计算POINT_NUM个点的正弦值
a = map(math.sin,n)r =[]
for i in a:#调整幅值至在0~1区间i+=1       #按3.3V电压调整幅值#i*= 3.3/2   #求取dac数值,12位dac LSB = 3.3V/2**12 ri = round(i*2**12/3.3) #检查参数if ri >= 4095:ri = 4095#得到dac数值序列r.append( ri )print(list(map(int,r)))#写入序列到文件
with open("py_dac_sinWav.c",'w',encoding= 'gb2312') as f:print(list(map(int,r)),file= f)#绘图
plt.plot(n,r,"-o")
plt.show()

如果得到的值为a,那么(a/4096)*3.3就是实际输出的电压值。

uint16_t Sine[POINT_NUM2] = {
1241, 1307, 1372, 1437, 1501, 1565, 1628, 1690, 1750, 1809, 1867, 1922, 1976, 2028, 2077, 2125, 2169, 2212, 2251, 2288, 2322, 2352, 2380, 2404, 2426, 2444, 2458, 2469, 2477, 2481, 2482, 2480, 2474, 2464, 2451, 2435, 2415, 2393, 2367, 2337, 2305, 2270, 2232, 2191, 2147, 2101, 2053, 2002, 1949, 1895, 1838, 1780, 1720, 1659, 1597, 1533, 1469, 1405, 1339, 1274, 1208, 1143, 1078, 1013, 949, 886, 824, 762, 703, 644, 588, 533, 480, 430, 381, 335, 292, 251, 213, 177, 145, 116, 90, 67, 47, 31, 18, 9, 3, 0, 1, 5, 13, 24, 39, 57, 78, 102, 130, 161, 195, 231, 271, 313, 358, 405, 455, 506, 560, 616, 673, 732, 793, 855, 917, 981, 1045, 1110, 1176, 1241
};

效果如下。

在这里插入图片描述

总结

1.使能TIM6触发DAC,其中,将TIMERx_SWEVG寄存器的UPG位置1,定时器产生上溢事件时会产生更新事件,主模式控制器选择更新事件作为TRGO。由于设置了DAC的DAC_CTL寄存器的DDMAENx位来使能DMA请求,当有外部硬件触发的时候,DAC则产生一个DMA请求。

3.使用DMA传输数据,从存储器读出数据并写入外设,也就是说,DMA从Sine数组的地址读数据,写到DAC0_R12DH寄存器里面。

2.触发事件发生, DAC保持数据(DACx_DH)会被转移到DAC数据输出寄存器(DACx_DO),经过一段时间之后,DAC引脚上的输出电压DACoutput=VREF×DAC_DO/4096。

4.总而言之,定时器从0开始向上连续计数到自动加载值,然后,重新从0开始向上计数并产生上溢事件,TIMERx_SWEVG寄存器的UPG位置1,计数值会被清0,并产生更新事件,主模式控制器选择更新事件作为TRGO,触发DAC,产生DMA请求,搬运数组的数据。由于DMA设置为循环模式,当每次DMA传输完成后,CNT值(待传输的数据个数)会被重新载入,DMA会一直响应外设的请求,如此循环往复,把波形曲线的值写到DAC0_R12DH寄存器里面,然后在DAC引脚上输出电压,DACoutput=VREF×DAC_DO/4096。

5.使用一个外设,看用户手册,可以知道外设大概都有哪些功能,要使用外设的某些功能都需要怎么配置寄存器。写程序的话,可能提供库函数,库函数就是把配置寄存器的那些代码给封装起来了,然后使用库函数把外设用起来就好了。

源码

GD32F307DAC输出波形-单片机文档类资源-CSDN文库
bsp_dac.c文件如下

main.c调用void sin_app(void)函数即可。

#include "systick.h"
#include "bsp_dac.h"
#define POINT_NUM 32
#define POINT_NUM2 120#define ARRAYNUM(arr_name)     (uint32_t)(sizeof(arr_name)/sizeof(*(arr_name)))
#define DAC0_R12DH_ADDRESS    	((uint32_t)0x40007408)#define DAC_OUT_VAL    		 (0x09B3)#define SIN_TIM				TIMER6
#define SIN_TIM_CLK		RCU_TIMER6#define SIN_DAC						 DAC0
#define SIN_DAC_CLK				 RCU_DAC#define SIN_PIN            GPIO_PIN_4
#define SIN_GPIO_PORT      GPIOA
#define SIN_GPIO_CLK       RCU_GPIOA#define SIN_DMA					   DMA1
#define SIN_DMA_CLK			   RCU_DMA1
#define SIN_DMA_CHANNEL    DMA_CH2uint16_t Sine12bit[POINT_NUM] = {1241, 1491, 1731, 1950, 2141, 2295, 2405, 2468, 2481, 2443, 2356, 2223, 2050, 1844, 1613, 1367, 1116, 
870, 639, 433, 260, 127, 40, 2, 14, 77, 188, 342, 532, 752, 991, 1241
};
uint16_t Sine[POINT_NUM2] = {
1241, 1307, 1372, 1437, 1501, 1565, 1628, 1690, 1750, 1809, 1867, 1922, 1976, 2028, 2077, 2125, 2169, 2212, 2251, 2288, 2322, 2352, 2380, 2404, 2426, 2444, 2458, 2469, 2477, 2481, 2482, 2480, 2474, 2464, 2451, 2435, 2415, 2393, 2367, 2337, 2305, 2270, 2232, 2191, 2147, 2101, 2053, 2002, 1949, 1895, 1838, 1780, 1720, 1659, 1597, 1533, 1469, 1405, 1339, 1274, 1208, 1143, 1078, 1013, 949, 886, 824, 762, 703, 644, 588, 533, 480, 430, 381, 335, 292, 251, 213, 177, 145, 116, 90, 67, 47, 31, 18, 9, 3, 0, 1, 5, 13, 24, 39, 57, 78, 102, 130, 161, 195, 231, 271, 313, 358, 405, 455, 506, 560, 616, 673, 732, 793, 855, 917, 981, 1045, 1110, 1176, 1241
};/*DAC引脚配置*/
static void sin_dac_gpio_config(void)
{/* enable the clock of peripherals */rcu_periph_clock_enable(SIN_GPIO_CLK);rcu_periph_clock_enable(SIN_DAC_CLK);rcu_periph_clock_enable(RCU_AF);/* once enabled the DAC, the corresponding GPIO pin is connected to the DAC converter automatically */gpio_init(SIN_GPIO_PORT, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, SIN_PIN);}/*DAC通道输出配置,定时器6触发,不开启输出缓存*/
static void sin_adc_channel_config(void)
{dac_deinit();/* configure the DAC0 */dac_trigger_disable(SIN_DAC);dac_wave_mode_config(SIN_DAC, DAC_WAVE_DISABLE);dac_output_buffer_disable(SIN_DAC);/* DAC触发源的选择*/dac_trigger_source_config(SIN_DAC,DAC_TRIGGER_T6_TRGO);/* DAC的DMA功能使能 */dac_dma_enable(SIN_DAC);/* DAC触发使能 */dac_trigger_enable(SIN_DAC);/* enable DAC0 */dac_enable(SIN_DAC);}
//DMA配置
static void sin_dma_config(void)
{dma_parameter_struct dma_init_struct;/* enable DMA CLK */rcu_periph_clock_enable(SIN_DMA_CLK);/* deinitialize DMA channel3(USART0 tx) */dma_deinit(SIN_DMA, SIN_DMA_CHANNEL);dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
//	dma_init_struct.memory_addr = ;dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
//	dma_init_struct.number = ;
//	dma_init_struct.periph_addr = ;dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;dma_init(SIN_DMA, SIN_DMA_CHANNEL, &dma_init_struct);/* configure DMA mode */dma_memory_to_memory_disable(SIN_DMA, SIN_DMA_CHANNEL);
}void sin_config(void)
{//引脚配置sin_dac_gpio_config();//通道配置sin_adc_channel_config();//DMA配置sin_dma_config();
}void sin_dma_function_config(void)
{	//DMAx的通道y的存储器基地址配置dma_memory_address_config(SIN_DMA,SIN_DMA_CHANNEL,(uint32_t)Sine);//配置DMAx通道y还有多少数据要传输dma_transfer_number_config(SIN_DMA,SIN_DMA_CHANNEL,ARRAYNUM(Sine));//DMAx的通道y的外设基地址配置dma_periph_address_config(SIN_DMA,SIN_DMA_CHANNEL,DAC0_R12DH_ADDRESS);//DMA循环模式开启dma_circulation_enable(SIN_DMA, SIN_DMA_CHANNEL);//DMA的通道使能dma_channel_enable(SIN_DMA, SIN_DMA_CHANNEL);
}/*TIMx触发配置*/
void sin_timx_trigger_function_config(void)
{timer_parameter_struct timer_initpara;rcu_periph_clock_enable(SIN_TIM_CLK);timer_deinit(SIN_TIM);/* TIMER6 configuration */timer_initpara.prescaler         = 1-1;//预分频timer_initpara.counterdirection  = TIMER_COUNTER_UP;//向上计数timer_initpara.period            = 225-1;//定时周期timer_init(SIN_TIM,&timer_initpara);//定时器主输出触发源选择timer_master_output_trigger_source_select(SIN_TIM,TIMER_TRI_OUT_SRC_UPDATE);//定时器更新事件使能timer_update_event_enable(SIN_TIM);
}/*操作函数*/
void sin_app(void)
{//*配置*/sin_config();//DMA功能配置sin_dma_function_config();// TIMER触发功能配置sin_timx_trigger_function_config();// TIMER启动timer_enable(SIN_TIM);}

bsp_dac.h文件

#include "gd32f30x.h"void sin_app(void);

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

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

相关文章

GD32 ADC采集电压

文章目录ADCTIMDMA其他一些初始化main总结使用芯片为GD32F307 ADC 连续转换模式,可以运行在规则组通道上,一旦相应软件触发或者外部触发产生,ADC就会采样和转换规定的通道。 采样时间,每个通道可以用不同的时间采样。ADC使用若…

DAC、ADC、FFT使用总结

目录计算公式波形生成DAC波形频率ADC采样时间离散傅里叶变换DFTFFT计算公式 DAC、ADC、FFT之间有些参数环环相扣,所以先整合一下公式。 1.系统时钟周期72MHZ。 2.定时器的单个时钟周期。 3.定时器的触发周期。 4.正弦波一个周期的时间,其中N为正弦波一…

c++代码根据点位连线_邹军:数控车倒角C与自动倒圆角R编程方法

提示:点击上方↑↑"数控达人"即可每天免费订阅【邹军,十多年数控工作经验,现自创一套有理论,有干货,还有方法论做支撑的实战编程教程(PDF),从而让你编写程序就像做填空题一样简单。在没有人指引你…

不愿意和别人打交道_始终和人保持距离,最不合群的3星座,孤僻却有真本事,能成大事...

始终和人保持距离,最不合群的3星座,孤僻却有真本事,能成大事巨蟹座巨蟹座的人真的是天生孤僻,他们始终和人保持距离,也不喜欢跟别人打交道,最怕就是应酬的事,看起来很不合群,但是巨蟹…

stc15w4k32s4芯片引脚图片_单片机引脚功能初识及提高(3)

40个接口我们已经了解了29个了,在开始我们 今天的内容之前,我们先对之前的内容总结一下。图片来源网络最小系统电源部分(20脚GND,40脚VCC[5v])复位部分(9脚,给高电平进行复位)下载部分(ISP下载接6,7,8脚,ch…

tsd3dmapper软件使用方法_TOYO模组选型软件使用方法

直线模组选型对于机械工程师和采购人员来说,是最基础的硬性要求。直线滑台模组选型中性能是其中之一,还要根据需求考虑:相对应的,在选购直线滑台模组时,先根据下面几点需求来断定直线滑台模组的详细参数需求。可以参考…

pdf从结构新建书签_强力推荐一款PDF神器

某阅读器作为一款在全球范围内流行的PDF阅读器,能够快速打开、浏览、审阅、注释、签署及打印任何PDF文件,具有轻快、高效、安全等特性,是目前一款带有PDF创建功能的阅读器。此外,它以安全著称,从底层技术、应用设计、功…

二元相图软件_Materials Studio 领先的材料模拟软件

BIOVIA MATERIALS STUDIO拥有完善的建模和模拟工具,能够帮助材料科学与化学领域的研究者对材料中原子、分子结构与性质、性能间的关系进行预测。利用Materials Studio,各工业领域的研究者能够对诸多类型的材料,如制药、催化剂、高分子及复合材…

java8 stream 做累加_《Java 8 in Action》Chapter 1:为什么要关心Java 8

自1998年 JDK 1.0(Java 1.0) 发布以来,Java 已经受到了学生、项目经理和程序员等一大批活跃用户的欢迎。这一语言极富活力,不断被用在大大小小的项目里。从 Java 1.1(1997年) 一直到 Java 7(2011年),Java 通过增加新功能,不断得到…

fabric go sdk 依赖的安装_从这些角度看 Go 是一门很棒的语言

Go 当前引起了很多关注。让我们看一下 Go 好的部分。我最近用 Go 写了一个 SSH 服务器[1],在其中启动容器。该项目已经发展到很大规模,并且我向 Go 发起了 PR[2],以修复我发现的错误。在积累了比 “Hello world!” 更多的经验之后…

程序win10_win10该文件没有与之关联的程序来执行操作

当初我遇到这个问题的时候,也是一脸懵!在度娘那里尝试了许多种方法,都没有得到解决!那些方法我就不一一介绍了,百度一大堆!下面就来分享一下我解决的办法!1.打开默认程序2.找到设置程序访问和计…

node工程默认url_node 爬虫入门实例,简单易懂

前言本文介绍一个 koa 的爬虫项目,受众对象为初学前端不久的小伙伴,通过这个项目能对 node 爬虫有一个简单的认识,也能自己动手写一些简单的爬虫。项目地址:Fe-Icy/firm-spider​github.com启动 koa 服务Koa (koajs) -- 基于 Node…

xshell6 不更新无法使用_世纪金花商联卡无法正常使用 客服:因门店面临改造,涉及品牌、规则每天都在更新...

有效期10年、无消费限制的世纪金花商联卡在半年前开始无法正常使用,11月22日,世纪金花赛高店内200多个零售品牌,只有一个品牌可以无金额限制地正常使用商联卡,世纪金花各门店每日可使用的品牌数量、规则都在变化,什么时…

linux ls 中文乱码_每天一个linux命令:Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件&…

linux中cooy命令_Linux:CentOS 7中常用的基础命令

对于学习Linux系统来说,命令是必须熟练掌握的第一个部分。Linux系统中的命令有600多个,但常用的基础命令并不多。虽然不同版本的Linux系统的命令稍有不同,但命令的语法与使用方法基本相同,因此读者只要掌握了CentOS 7中常用的基础…

730阵列卡支持多大硬盘_3分钟告诉你:OPPO Reno普通版和旗舰版的差距到底有多大...

昨天OPPO正式发布了Reno系列手机:分为标准版和旗舰版两款。宣传普通版的售价和旗舰版的卖点是手机厂商一贯的传统。为了搞清楚普通版和旗舰版的差距到底有多大,今天我和大家一起扒一扒这两款手机之间的区别到底有多大,供大家在选机时做一个参…

查看list的形状_用Wordcloud生成指定形状的词云图

wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概。首先贴出一张词云图(以哈利波特小说为例):在生成词云图之前,首先要做一些准备工作1.安装结巴分词库…

oc引导win方法_[OC更新]机械革命8代、9代标压稳定版更新

加关注这种话银家怎么好意思说出口嘛更新机型机械革命Z2G机械革命Z2AIRG机械革命X3(9th ver)机械革命umi air(1080p ver)机械革命X9TI机械革命X8TI-R机械革命X8TI-G机械革命Z2机械革命Z2AIR机械革命X8TI机械革命X8TI PLUS机械革命X3(8th ver)机械革命S1PLUS(8750H)机械革命X2更…

有机晶体数据库_Cambridge Structural Database 2017 晶体结构分析软件分享

文 / 利刃君微信ID / ziyuanliren666全文共2024字,推荐阅读时间6分钟。剑桥结构数据库系统(The Cambridge Structural Database System,简写为CSDS)是基于X光和中子衍射实验唯一的小分子及金属有机分子晶体的结构数据库,收录了全世界范围内所…

win ftp 指定的密码无效。请键入新密码。_重设OS X (macOS)系统帐户密码的5种方法...

为了保护自己的隐私安全,不少 Mac 用户都会选择给自己的设备设置密码,但是时不时的会出现忘掉密码的情况。分享找回(重设)OS X (macOS)系统账号密码的5种方法。如果你忘记了 OS X (macOS&#x…