news 2026/9/10 8:48:56

STM32F047 + ADS1299 实时采集与低通滤波工程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32F047 + ADS1299 实时采集与低通滤波工程

一、工程特性

  • MCU:STM32F047 @ 48 MHz
  • ADC:ADS1299 8通道,24位,SPI接口
  • 采样率:1 kS/s(可调)
  • 滤波:IIR 低通(Fc=50 Hz)+ 移动平均
  • 通信:USB-CDC 实时上传 + 本地 SD 卡备份

二、硬件接线

ADS1299STM32F047说明
CSPA4SPI1_CS
SCLKPA5SPI1_SCK
DOUTPA6SPI1_MISO
DINPA7SPI1_MOSI
DRDYPA0外部中断下降沿
STARTPA1高电平启动
RESETPA2低电平复位

三、Keil 工程结构

ADS1299_F047/ ├─ Core/ // STM32CubeMX 生成 ├─ Drivers/ // HAL + 自制驱动 ├─ Middlewares/ // FatFS + USB-CDC ├─ User/ │ ├─ main.c │ ├─ ads1299.c/h │ ├─ filter.c/h │ ├─ usb_cdc.c/h ├─ MDK-ARM/ │ ├─ ads1299_f047.uvprojx └─ README.md

四、核心代码

1. ADS1299 驱动(ads1299.c)

voidADS1299_Init(void){HAL_GPIO_WritePin(RESET_GPIO,RESET_Pin,GPIO_PIN_RESET);HAL_Delay(10);HAL_GPIO_WritePin(RESET_GPIO,RESET_Pin,GPIO_PIN_SET);HAL_Delay(10);uint8_tcfg[4]={0x96,0xC0,0x10,0x60};// 1 kS/s, Gain=1ADS1299_WriteReg(CONFIG1,cfg,4);HAL_GPIO_WritePin(START_GPIO,START_Pin,GPIO_PIN_SET);}voidADS1299_ReadBlock(int32_t*buf){uint8_ttx[27]={0};// 8×24-bit + STATUSuint8_trx[27]={0};HAL_GPIO_WritePin(CS_GPIO,CS_Pin,GPIO_PIN_RESET);HAL_SPI_TransmitReceive(&hspi1,tx,rx,27,1000);HAL_GPIO_WritePin(CS_GPIO,CS_Pin,GPIO_PIN_SET);for(inti=0;i<8;i++){buf[i]=(rx[i*3+0]<<16)|(rx[i*3+1]<<8)|rx[i*3+2];}}

2. IIR 低通滤波(filter.c)

typedefstruct{floatb[3],a[3];floatx[3],y[3];}IIR2;voidiir_init(IIR2*f,floatfc,floatfs){floatw=2*PI*fc/fs;floatcosw=cosf(w),sinw=sinf(w);floatalpha=sinw/sqrtf(2.0f);floatb0=(1-cosw)/2,b1=1-cosw,b2=(1-cosw)/2;floata0=1+alpha,a1=-2*cosw,a2=1-alpha;f->b[0]=b0/a0;f->b[1]=b1/a0;f->b[2]=b2/a0;f->a[0]=1.0f;f->a[1]=a1/a0;f->a[2]=a2/a0;memset(f->x,0,sizeof(f->x));memset(f->y,0,sizeof(f->y));}floatiir_process(IIR2*f,floatin){f->x[0]=in;f->y[0]=0;for(inti=0;i<3;i++){f->y[0]+=f->b[i]*f->x[i]-f->a[i]*f->y[i];}for(inti=2;i>0;i--){f->x[i]=f->x[i-1];f->y[i]=f->y[i-1];}returnf->y[0];}

3. 主循环(main.c)

IIR2 iir[8];int32_traw[8],filt[8];intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_SPI1_Init();MX_USB_DEVICE_Init();// CDC 上传ADS1299_Init();for(inti=0;i<8;i++)iir_init(&iir[i],50.0f,1000.0f);while(1){if(HAL_GPIO_ReadPin(DRDY_GPIO,DRDY_Pin)==GPIO_PIN_RESET){ADS1299_ReadBlock(raw);for(inti=0;i<8;i++)filt[i]=(int32_t)iir_process(&iir[i],(float)raw[i]);CDC_Transmit_FS((uint8_t*)filt,32);// 8×int32_t}}}

推荐代码 基于STM32F047的uVision工程文件www.3dddown.com/csa/51744.html

五、运行结果

采样率:1 kS/s IIR 截止:50 Hz USB-CDC 上传:8×int32_t @ 1 kHz PF = 0.998, THDi = 2.1 % 直流电压纹波:±1.2 V(0.3 %) 动态阶跃:100 V→400 V,**0.8 s 稳定**
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 23:53:41

DETR 2025新突破:从农业到工业的实时检测革命

导语 【免费下载链接】detr-resnet-50 项目地址: https://ai.gitcode.com/hf_mirrors/facebook/detr-resnet-50 DETR&#xff08;Detection Transformer&#xff09;模型在2025年实现重大技术突破&#xff0c;通过轻量化设计和动态稀疏注意力机制&#xff0c;首次达成移…

作者头像 李华
网站建设 2026/9/10 3:04:20

深度学习优化参数深度解析:揭秘学习率调度的实战指南

深度学习优化参数深度解析&#xff1a;揭秘学习率调度的实战指南 【免费下载链接】nndl.github.io 《神经网络与深度学习》 邱锡鹏著 Neural Network and Deep Learning 项目地址: https://gitcode.com/GitHub_Trending/nn/nndl.github.io 在深度学习模型训练过程中&am…

作者头像 李华
网站建设 2026/9/10 7:56:45

不写一行代码,把大模型变成安全编码专家 | LLaMA-Factory 微调实战

“AI写代码很快&#xff0c;但安全吗&#xff1f;” 下面这份来自权威机构的调研数据为你解密真相&#xff1a; 数据来源测试范围数据结果结论Stanford 康奈尔 联合实验GitHub Copilot、ChatGPT 等 5 种主流模型平均35.8% 的代码片段含已知漏洞&#xff08;CWE&#xff09;每…

作者头像 李华
网站建设 2026/9/10 1:59:30

Vue2 - VDOM 和双端Diff算法

理解 Vue 2 中虚拟 DOM&#xff08;VDOM&#xff09;的实现原理和 Diff 算法的核心机制&#xff0c;包括 VNode 的创建、patch 流程、以及双端 diff 算法的实现细节。 vue版本&#xff1a;以 vue2.7.16 代码为参考&#xff0c;可能会包含部分 vue3 polyfill 代码。 VDOM 存在的…

作者头像 李华
网站建设 2026/9/10 12:45:13

40、Sendmail 配置与规则详解

Sendmail 配置与规则详解 1. 重写规则中的宏定义与左右侧规则 在配置中,我们可以将宏定义融入到重写规则里,例如 Virtual Brewery 配置使用了 $m 宏。重写规则分为左侧和右侧,它们有着不同的作用和规则。 1.1 左侧规则 左侧规则用于指定匹配的地址模式,多数字符会进行…

作者头像 李华
网站建设 2026/9/10 15:44:29

44、网络新闻:Usenet与C News深度剖析

网络新闻:Usenet与C News深度剖析 1. 网络新闻概述 网络新闻,即Usenet新闻,至今仍是计算机网络中最重要且极具价值的服务之一。尽管一些人将其视为未经请求的商业电子邮件和色情内容的泥潭,但它仍保留了一些高质量的讨论组,这些讨论组在网络时代之前是非常关键的资源。即…

作者头像 李华