# STM32_SDR **Repository Path**: ledgejin/STM32_SDR ## Basic Information - **Project Name**: STM32_SDR - **Description**: 使用STM32F405RGT6设计短波SDR接收机。 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 3 - **Created**: 2024-06-11 - **Last Updated**: 2025-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: SDR ## README # STM32_SDR #### :one: 介绍 使用STM32F405RGT6设计短波SDR接收机。 ![](./pic/系统框图.png) ![](./pic/PCB1.jpg) #### :two: 开发者介绍 #### :three: 开发要求 :triangular_flag_on_post: 绘图要求      :beginner: 使用visio      :beginner: 文字大小10pt大小      :beginner: 中英文字体微软雅黑 :triangular_flag_on_post: 开发环境要求      :beginner: CubeMX      :beginner: KEIL :triangular_flag_on_post: 开发代码上传要求      :beginner: 所有开发均基于SVN最新版本代码      :beginner: 所有提交到master的代码均要功能正常      :beginner: 测试代码可以重新新建Branch存放 :triangular_flag_on_post: 开发代码存放位置 Application用于存放应用层代码,这一部分的代码主要是为了完成接收机的基本功能,如信号的解调,UI的显示,人机交互 CubeMX用于存放底层配置代码,配置代码理论上不允许手动修改,如要修改请说明具体的原因 Hardware用于存放外设驱动文件 ![image-20240611170809108](./pic/存放代码1.png) ![c](./pic/HardwareFolder.png) Hardware文件中存有各个驱动代码 #### :four: 开发计划 - [x] ✔️ MS5351驱动的编写 - [x] ✔️ AIC3204驱动的编写   ❎通过IIC配置   ❎通过IIS配合DMA读取数据   ❎解析数据   ❎ 编码器驱动的编写   ❎ 五向开关驱动的编写 - [ ] ❌ 串口shell的开发   ❎ TFT彩屏驱动的开发 - [ ] ❌ 数据的FFT再TFT上显示 - [ ] ❌ FIR滤波器的配置   ❎ AM的解调-信号解调有效果,但是效果不好 - [ ] ❌ FM的解调 - [ ] ❌ DSB的解调 - [ ] ❌ SSB的解调 - [ ] ❌ UI的设计 - [ ] ❌ 基于串口的BOOTLOADER开发 - [ ] ❌ 基于串口PC上位机开发 #### :five: 软件架构     :battery: 单片机:STM32F405RGT6     :battery: 音频芯片:AIC3204     :battery: 混频芯片:SA612     :battery: 本振:MS5351     :battery: LDO:LP5907MFX-3.3 整块板子的时钟来源于MS5351,由STM32控制输出信号的频率,一路给音频信号提供时钟, 一路给门电路使用,产生正交的本振信号,正交的本振信号给两块混频器。 6层板的层叠结构为,信号层1、地、信号层2、电源层、地、信号层2。 #### :six: 硬件测试 硬件基础将测试电路的基本功能和特性。 ##### MS5351信号输出波形 有源温补晶振工作正常,由于示波器带宽、表笔的带宽较差,无法得到标准的方波信号 ![c](./pic/25M.jpg) - [ ] **测试不同温度下的频率值,绘制曲线** ##### D触发器正交信号 正交信号输出相差基本为90°,后期将测试不同频率下的正交情况 ![c](./pic/74LV74.png) - [x] **测试不同频率的正交情况,并绘制误差曲线** 在低频段100KHz-6MHz之间,相位差随着频率的增加,也会增加,但是中间有段会突起,可能是测量抖动导致的。 ![c](./pic/低频相位差.png) 在1MHz-32MHz之间,相位差基本都在90网上,后续将优化触发器走线,减小走线长度带来的时延问题。 ![c](./pic/1-32M相位差.png) - [ ] **测试最大输入频率** ##### LNA放大器特性 尝试使用信号源输入-20dbm的单音信号,从1MHz-50MHz,测量LNA的输出幅频特性如下。 ![c](./pic/LNA幅频特性.png) 理论上幅频特性都是在某一个频段上有较大的增益,其他的频段增益较小。类似于带通滤波器的特性。所以重新测试输入与输出信号的比值后绘图如下, ![c](./pic/LNA频率增益特性.png) 可以看到曲线平坦了很多,主要原因是信号源输出并不是绝对的平坦的。 但是LNA放大器会带有部分的谐波。 这边使用-30dbm的信号输入。测量输入与输出的频谱图。 下面是输入10MHz的信号频谱图 ![c](./pic/IN_10M_FFT.bmp) 经过放大器输出的10MHz的信号频谱图 ![c](./pic/OUT_10M_FFT.bmp) 下面是输入20MHz的信号频谱图 ![c](./pic/IN_20M_FFT.bmp) 经过放大器输出的10MHz的信号频谱图 ![c](./pic/OUT_20M_FFT.bmp) 下面是输入30MHz的信号频谱图 ![c](./pic/IN_30M_FFT.bmp) 经过放大器输出的10MHz的信号频谱图 ![c](./pic/OUT_30M_FFT.bmp) 下面是输入40MHz的信号频谱图 ![c](./pic/IN_40M_FFT.bmp) 经过放大器输出的40MHz的信号频谱图 ![c](./pic/OUT_40M_FFT.bmp) 下面是输入50MHz的信号频谱图 ![c](./pic/IN_50M_FFT.bmp) 经过放大器输出的40MHz的信号频谱图 ![c](./pic/OUT_50M_FFT.bmp) 可以看到放大之后的谐波会增加不少。后续需要寻找更好的LNA。 ##### 混频电路测试 MS5351输出16M,经过分频器得到4MHz本振信号,分别与4.03MHz、12.03MHz、20.03MHz、射频信号进行混频效果如下 输入信号:4.03MHz ![c](./pic/Mixer1.png) 输出信号:30KHz ![c](./pic/Mixer1_out.jpg) 输入信号:12.03MHz ![c](./pic/Mixer2.jpg) 输出信号:30KHz ![c](./pic/Mixer2_out.jpg) 输入信号:20.03MHz ![c](./pic/Mixer3.jpg) 输出信号:30KHz ![c](./pic/Mixer3_out.jpg) - [ ] **测试使用谐波混频后的中频幅度,并绘制曲线** - [ ] **测试使用谐波混频后的中频幅度,并绘制曲线** ##### CodeC测试 ###### beep输出 CodeC测试蜂鸣器 ![c](./pic/CodeC波形3.png) 示波器测量测试点波形如下 ![c](./pic/CodeC波形4.png) ![c](./pic/CodeC波形1.png) CodeC输出正弦波如下 ![c](./pic/CodeC波形.png) 展开测试如下 ![c](./pic/CodeC波形2.png) ###### cubeMX配置 这里一定要注意,CodeC为IIS的主设备就需要配置STM32为从设备。否则会造成IIS无法收发数据 因为此时STM32为IIS主设备,COdeC也为主设备,导致总线上的时钟不对。 ![c](./pic/cubemx_iis配置1.png) 下图为两个主设备在同一个总线上通信,可以看到总线上两个引脚输出的电平开始打架了。 ![c](./pic/错乱的IIS时许.png) 当CodeC为主,STM32为主后时许正常 ![c](./pic/正常的IIS时许.png) 同时还需要开启DMA传输,ADC的采集熟读很快,需要DMA搬运数据,解放CPU的工作。 ![c](./pic/cubemx_iis配置2.png) ###### adc输入 采集之后adc的数据出现了,两个通道数据错乱的问题。最后发现其实不是数据错乱的问题。 是因为在串口输出的时候,关闭了DMA的数据采集,但是因为串口输出耗时较长,CodeC作为主设备,会一直发送数据,等下次开启DMA接收的时候 左右通道可能会错位。 ![c](./pic/iis_adc_1.jpg) 具体的细节如下 ![c](./pic/iis_adc_2.jpg) 只输出一组i、q数据后发现并没有出现左右声道错位的现象。 ![c](./pic/iis_adc_3.png) 但是幅度有有些差异,修改CodeC的配置信息如下所示,修复NE602下变频的基带信号幅度不一致的问题。 ![c](./pic/codec_cfg_2.png) 修改CodeC配置,并且在代码中增加增益之后。i、q正交信号如下所示。 ![c](./pic/iis_adc_4.png) 示波器测量效果如下。 ![c](./pic/iis_adc_5.jpg) 使用示波器的XY模式,i、q信号不圆。有点放,类似是正交三角波的感觉。 ![c](./pic/iis_adc_6.jpg) 使用示波器的XY模式,测量信号源产生正交正弦波,莉萨如非常的圆啊。看来调谐电路出现了失真。 ![c](./pic/iis_adc_7.jpg) ###### dac输出 尝试使用DAC输出后发现,信号不是很连续,按照道理信号是连续的,最后发现是因为我只在半满DMA的时候输入数据, ![c](./pic/iis_dac_1.jpg) ###### 双缓冲 因为输入信号分为左右声道,并且DMA还有半满DMA和全满DMA回调函数所以设计一个数据类型。 ![c](./pic/double_struct_2.png) 之后在半满DMA和全满DMA回调函数中使用该结构体。 ![c](./pic/double_struct_1.png) ###### FFT效果图 FFT效果如下,具体的频率输入记不清了,但是每次都会增加一点。不过可以看到除了信号输入之外还有其他谐波存在。 ![c](./pic/iis_codec_fft.png) 48K的传输速度,48K里面有左右声道,所以单个声道的采样率为24K,之后做1024点的FFT,之后可以在频谱上显示12K的频谱。 之后输入与本振相差的12K的信号。可以看到最后的峰值在第512点左右。 ![c](./pic/iis_codec_fft_2.png) #### :seven: 参与贡献 1. :email:[erinjin](erinjin@foxmail.com) 2. :email:[zhuxianguo](zhuxianguo@outlook.com) #### :eight:参考资料 ❎❌✔️ 1. ✈️ [语音降噪](https://www.armbbs.cn/forum.php?mod=viewthread&tid=121445&extra=page%3D1) 2. ✈️ [数学库](https://www.jjj.de/fxt/)