STM32实验及结果 —— (003)HAL库FFT动态频谱
»
(001)HAL库LED点灯
(002)HAL库LCD帧动画
(003)HAL库FFT动态频谱
(004)HAL库FFT Speed Up
(005)HAL库认识DMA
(006)看门狗总结
(007)GPIO使用步骤
(008)CubeIDE实现USB外设*
(009)为什么C99
(010)Linux UDP广播注意事项
(011)Linux非阻塞TCP
(012)ARM架构防烧脚本
(013)OpenWrt交叉编译
(014)C99基本数据类型
(015)C99 结构体
(016)C99 枚举
(017)C99 的函数及左值右值
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(020)C99 数组及结构体中的数组存储空间
(021)C99标准函数库没有函数模板
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(024)C99的条件语句
(025)C99的选择语句
(026)C99的循环语句
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
(032)C99中的弱函数weak
(033)MTU TCP SOCKET
(034)STM32 UART连续发送数据函数
(035)STM32 UART连续接收数据函数
(036)STM32重定向printf输出到USART的方法
(037)STM32 Normal与Circle
(038)STM32 UART传输错误标志位的清除
(039)STM32 UART传输空闲中断
(040)STM32 串口、RS232是单根线发数据
(041)STM32 RS485差分信号通信
(042)STM32 等待DMA传输完成指定的字节数
(043)STM32进入低功耗模式
(044)DMA传输完成中断需要清空TCx标志位
(045)单字节中断HAL_UART_RxCpltCallback
(046)在单字节完成中断中处理Idle
(047)C99内置宏
(048)使能中断后中断服务程序才起作用
(049)STM32程序启动过程
(050)STM32热加载新的程序固件
(051)中断向量表的指定
(052)STM32程序内的地址空间
(053)STM32修改主程序存放的地方
(054)Bootloader具体实现更简单
🍓(001)关闭交换分区
🍓(002)格式化U盘为ext4并设定块大小为1k
🍓(003)获取linux版本信息及硬件架构信息
🍓(004)最新版Ubuntu加速
🍓(005)不稳定网络克隆360浏览器内核脚本
🍓(006)Ubuntu24.04无法运行firefox注意事项
🍓(007)MAC地址
🍓(008)RMII和PHY
🍓(009)Ubuntu Server防火墙配置
🍓(010)Linux主动让出CPU
🍓(011)Linux硬件概念
🍓(012)Linux系统中的进程间通信
🕹️(001)while(1){}不会让出CPU
🕹️(002)FreeRTOS主要函数
🕹️(003)FreeRTOS临界区ENTER_CRITICAL
🕹️(004)FreeRTOS NULL未定义问题的解决
🕹️(005)优先级最低的ARM硬件中断PENDSV
🕹️(006)任务优先级层数配置
🕹️(007)不同优先级任务创建注意事项
🕹️(008)关闭同级任务的时间片轮转
🕹️(009)OTA技术
🕹️(010)FreeRTOS静态任务创建
🕹️(011)FreeRTOS列出任务列表
🕹️(012)FreeRTOS堆空间使用量统计
🕹️(013)FreeRTOS通过任务名获取TaskHandle
🕹️(014)FreeRTOS常用任务创建方式
🕹️(015)FreeRTOS解决优先级反转的任务死锁
🕹️(016)FreeRTOS超级中断:SVC
🕹️(017)FreeRTOS中断处理函数运行在特权级
🕹️(018)FreeRTOS SVC进入用户模式的方法
🕹️(019)FreeRTOS实现绝对时间间隔开始任务
🕹️(020)FreeRTOS低功耗通过Tickless实现
🕹️(021)FreeRTOS IdleHook
🕹️(022)FreeRTOS Hooks
🕹️(023)FreeRTOS主动让出CPU
🕹️(024)FreeRTOS信号量
🕹️(025)FreeRTOS解决优先级反转问题的方法
🕹️(026)FreeRTOS获得任务的优先级
🕹️(027)FreeRTOS设置任务的优先级
🕹️(028)FreeRTOS中函数的前缀
🕹️(029)硬件中断中不能调用FreeRTOS的函数
🕹️(030)底半操作的任务接收信号量处理数据
🕹️(031)启用无限期等待
🕹️(032)中断处理函数中调用FreeRTOS的函数
🕹️(033)对于FreeRTOS顶半与底半操作的原则
🕹️(034)STM32中的FATFS支持exFat
🕹️(035)FreeRTOS中的消息队列
🕹️(036)FreeRTOS中的定时任务
🕹️(037)默认生成代码没法ping板子的原因
🕹️(038)LwIP Tcp Server开发例程
🕹️(039)切记别用mutex
🕹️(040)MEMP与Pbuf的关系
    小时候,看到过假功放的跳动频谱。它没有随着音乐的不同而变化,而是固定地、等幅度地上下跳动。也看到过随着音乐不同而跳动不同的功放面板。一直很想瞧瞧真正的动态频谱是怎么做出来的。有幸现代互联网还没有完全知识收费。虽然,知道FFT,但,没有实操过FFT。所以,找了几天的FFT算法。最后找到了一份优秀的、容易理解原理的FFT算法代码。其中的过程极其坎坷,因为,大学学过的傅里叶变换算法课忘得差不多了。代码,一份一份地尝试。最后逐渐开始理解什么是旋转函数,开始理解采样率和输出最高频率的关系,开始理解了很多科技电视上带着半径线的一个一个同心圆在那不断旋转代表的含义,并且开始尝试着修改别人的代码。
    实验硬件搭配上,起初觉得一个STM32板子带模数转换了就不需要再买音频外设了,但是我错了,简单的麦克风没有音频信号的波幅放大很难起到微弱声音数据的采集作用。于是,翻动了主板的数据手册,也买了不少AD、DA的小功能板。
    动图是自学和研发FFT动态频谱图时的研究成果,当前这个版本的板子程序采用的是CubeIDE开发的代码,从逻辑上分析:没有问题。其中,ADC采样中断和时钟中断都采用了CubeIDE的配置实现。板子是STM32F103C8T6外加麦克风音频放大模块(外设),性能比较低,所以采样率控制在了300Hz以内,FFT旋转函数个数控制在了128个,输出只有64个有效频点。
    感慨,STM32CubeIDE+Keil——无限可能。
    也许我不该贴上FFT的算法实现,但,那是高等院校大学二年级必修课中所有人都需要做的编程实验。贴上,我参考的尚未知识收费的FFT代码参考地址:https://blog.csdn.net/qq_42528769/article/details/105599043
    ————www.v-signon.com学习者共勉
                        
«
——张人杰·www.v-signon.com学习者共勉
返回上一页
备案号:京ICP备19038994号-2
个人作品网站:www.up-task.com 主办:个人 English
免责声明:本网站3d地球模型购买自3d.3d66.com,如权利人发现存在误传其作品情形,请及时与本站联系。