ST官方给出的DSP库中汇编计算256点的FFT存在精度低的缺陷,通过改进汇编程序,可将精度提高到32bit,只增加很少的运算时间,对于STM32F1这样的单片机来说具有很大的优势
2021-11-05 08:34:08 16KB fft 32bit
1
总共包含32个PCM文件,采样位宽为16bit,采样频率为16Khz,声道数为单声道。(都是歌曲,如再见青春,凉凉等)
2021-10-28 14:50:48 190.74MB PCM 音频
1
双通道、16位 nanoDAC+,内置2 ppm/°C基准电压源和SPI接口
2021-10-23 21:05:48 1.35MB DAC 16bit 双通道 集成SPI接口
1
C#编写的24bit(RGB888)与16bit(RGB565)颜色格式相互转换小工具,免安装直接运行coloredit.exe
2021-10-13 16:02:54 16KB 颜色格式转换小工具
1
STM32F407单片机 24bit_ADC_电压采集+16bit_DAC_电压输出实验KEIL工程源码+AD7190 ADC模块+AD5689R DAC模块硬件PDF原理图
STM32F407单片机16bit_DAC_AD5689模拟量(0V~10V)电压输出实验KEIL工程源码: int main(void) { uint16_t data=0; double temp,opa; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); KEY_GPIO_Init(); printf("硬石DAC(AD5689)模块模拟量电压输出测试\n"); AD5689_Init(); AD5689_WriteUpdate_DACREG(DAC_A,data); AD5689_WriteUpdate_DACREG(DAC_B,0xFFFF-data); printf("data:%d\n",data); opa=OPA_RES_R2/OPA_RES_R1; while(1) { if(KEY1_StateRead()==KEY_DOWN) { if(data>(0xFFFF-1000)) data=(0xFFFF-1000); data +=1000; AD5689_WriteUpdate_DACREG(DAC_A,data); AD5689_WriteUpdate_DACREG(DAC_B,0xFFFF-data); temp=(double)data*2500*opa/0xFFFF; //temp为目标电源值,这里先放大1000倍(方便计算而已),等后面显示再还原 //data是数字量DA值,当data取值为:0~0xFFFF对应AD5689输出为0~2.5V //本例程是输出0V~10V,这个功能主要是靠运放实现,特殊的电路使得: //AD5689输出0V时对应运放输出0V,AD5689输出2.5V对应运放输出10V //(上面虽说是10V,实际上应该是 2.5V*opa(运放放大倍数),这里opa=40.2K/10K=4.02) //所以使得程序:data值为0时运放输出0V,data为0xFFFF时输出运放输出10V //temp=data/0xFFFF*2.5*1000*opa printf("data:%d->%0.3fV\n",data,temp/1000); } if(KEY2_StateRead()==KEY_DOWN) { if(data%0.3fV\n",data,temp/1000); } HAL_Delay(50);
STM32F407单片机16bit_DAC_AD5689模拟量(-10V~10V)电压输出实验KEIL工程源码: int main(void) { uint16_t data=0xFFFF/2; double temp,opa; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); KEY_GPIO_Init(); printf("硬石DAC(AD5689)模块模拟量电压输出测试\n"); AD5689_Init(); AD5689_WriteUpdate_DACREG(DAC_A,data); AD5689_WriteUpdate_DACREG(DAC_B,0xFFFF-data); printf("data:%d\n",data); opa=OPA_RES_R2/OPA_RES_R1; while(1) { if(KEY1_StateRead()==KEY_DOWN) { if(data>(0xFFFF-1000)) data=(0xFFFF-1000); data +=1000; AD5689_WriteUpdate_DACREG(DAC_A,data); AD5689_WriteUpdate_DACREG(DAC_B,0xFFFF-data); temp=(double)(data*2-0xFFFF)*2500*opa/0xFFFF; //temp为目标电源值,这里先放大1000倍(方便计算而已),等后面显示再还原 //data是数字量DA值,当data取值为:0~0xFFFF对应AD5689输出为0~5V //本例程是输出-10V~10V,这个功能主要是靠运放实现,特殊的电路使得: //AD5689输出0V时对应运放输出-10V,AD5689输出2.5V对应运放输出0V,AD5689输出5V对应运放输出10V //(上面虽说是10V,实际上应该是 2.5V*opa(运放放大倍数),这里opa=40.2K/10K=4.02) //所以使得程序:data值为0时运放输出-10V, data为0xFFFF/2时输出运放输出0V,data为0xFFFF时输出运放输出10V //temp=(data-0xFFFF/2)/(0xFFFF/2)*2.5*1000*opa printf("data:%d->%0.3fV\n",data,temp/1000); } if(KEY2_StateRead()==KEY_DOWN) { if(data<1000) data=1000; data -=1000;
STM32F407单片机24bit_ADC_AD7190称重模块+16bit_DAC_电压输出实验KEIL工程源码 int main(void) { uint16_t data=0xFFFF/2; double temp,opa; float data_temp; int32_t weight_count; uint8_t cali_flag=0; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); /* 初始化LED */ LED_GPIO_Init(); KEY_GPIO_Init(); /* 初始化BEEP */ BEEP_GPIO_Init(); if(AD7190_Init()==0) { printf("获取不到 AD7190 !\n"); while(1) { HAL_Delay(1000); if(AD7190_Init()) break; } } printf("检测到 AD7190 !\n"); weight_ad7190_conf(); HAL_Delay(500); weight_Zero_Data = weight_ad7190_ReadAvg(6); printf("zero:%d\n",weight_Zero_Data); printf("硬石DAC(AD5689)模块模拟量电压输出\n"); AD5689_Init(); AD5689_WriteUpdate_DACREG(DAC_A,data); AD5689_WriteUpdate_DACREG(DAC_B,0xFFFF-data); printf("data:%d\n",data); opa=OPA_RES_R2/OPA_RES_R1; while(1) { weight_count=weight_ad7190_ReadAvg(3); data_temp=weight_count-weight_Zero_Data; weight=data_temp*1000/weight_proportion; printf("重量:%d->%.2f\n",weight_count,weight); HAL_Delay(200); if(KEY1_StateRead()==KEY_DOWN) // 清零 { weight_Zero_Data = weight_ad7190_ReadAvg(6); printf("zero:%d\n",weight_Zero_Data); cali_flag=1; } if(KEY2_StateRead()==KEY_DOWN) // 校准:必须先按“清零”键,然后把20g砝码放在称上,按下校准键 { if(cali_flag) { weight_count = weight_ad7190_ReadAvg(6); weight_proportion=(weight_count-weight_Zero_Data)*1000/100; printf("weight_proportion:%d\n",weight_proportion); } cali_flag=0; } if(KEY3_StateRead()==KEY_DOWN) { if(data>(0xFFFF-1000)) data=(0xFFFF-1000); data +=1000; AD5689_WriteUpdate_DACREG(DAC_A,data); AD5689_WriteUpdate_DACREG(DAC_B,0xFFFF-data); temp=(double)(data*2-0xFFFF)*2500*opa/0xFFFF; //temp为目标电源值,这里先放大1000倍(方便计算而已),等后面显示再还原 //data是数字量DA值,当data取值
ADS1115(16bit ADC)驱动程序
2021-09-07 14:03:46 3KB ADS1115 HAL库 STM32
1
ADS1118(16bit ADC)
2021-09-07 14:03:46 3KB ADS1118 HAL库 STM32
1