测心率stm32需要什么样的stm32开发板原理图

基于STM32的数据采集+心率检测仪(原理图、PCB、程序源码等)
+仪功能概述:& & & &该设计本是以NUCLEO_F411RE为控制核心,利用芯片内部的模数转换器来采集外部的模拟信号,并在TFT液晶屏的配合下来显示采集的数据。为便于直观分析,还将采集的数据绘制成波形图。为验证其设计功能,特配置了心率传感器来获取心率信号,经实际验证能在采集过程中达到设计的基本要求,为波形的图像文件生成提供了相应的支持。此外,在外挂串行通信模块的条件下,能实现采集数据的上传以供更深层次的数据分析和处理。实物作品图:系统框图:软件设计分为两部分:一个是基于模数转换的数据采集与分析部分;另一个是基于SD卡的文件管理系统,主要负责图像文件的显示与生成。对于数据采集与分析部分,其程序流程图如下:视频演示:
电路相关文件(请在PC端查看下载)
电路城电路折扣劵获取途径:
电路城7~10折折扣劵(全场通用):对本电路进行评分获取;
电路城6折折扣劵(限购≤100元电路):申请成为卖家,上传电路,审核成功后获取。
版权声明:电路城所有电路均源于网友上传或网上搜集,供学习和研究使用,其版权归原作者所有,对可以提供充分证据的侵权信息,本站将在确认后24小时内删除。对本电路进行投诉建议,点击反馈给电路城。
使用说明:直接使用附件资料或需要对资料PCB板进行打样的买家,请先核对资料的完整性,如果出现问题,电路城不承担任何经济损失!
大家都在看:
给大家分享Altium Designer画的STM32F072C8T6最小系统原理图和PCB图资料,需要的可以下载,免费分享!原理图以及PCB图截图如下:附件内容截图:
来自:时间:
给大家分享一个ST原厂出来的STM32评估板的资料Altium Designer画的原理图和PCB图如下:附件内容截图:附件可以下载工程文件!
来自:时间:
正好老师给了题目,要求画出STM32F407最小系统原理图以及PCB图,小菜鸟从网上找到了这个资料,主芯片STM32F407ZET6,包括原理图和PCB。正好符合我的要求,分享出来给同样需要的朋友!最小系统原理图:最小系统PCB图:
来自:时间:
本设计是基于STM32F103、STM32F407通用开发板PCB源文件,已经打样验证成功。一个开发板的价格等于两套开发板的资源,开发板资源非常丰富。该STM32F103/STM32F407通用开发板实物截图:STM32F103/STM32F407通用开发板主要的模块功能有:1、TFT液晶屏接口2、10M以太网模块3、扩展Nor Flash4、扩展SRAM5、串口模块6、自定义键盘7、自定义LED8、EEPROM存储9、SPI Flash10、预留了IO口11、SD卡12、USB HOST13、USB SLAVE14、CAN15、RS48516、红外遥控接收接口17、DH11/DS18B20接口18、MPU6050陀螺仪19、红外发射或者控制其它输入输出接口20、NRF24L01无线接口21、蜂鸣器同时板载一键下载功能附件内容截图:需要例程的加群:
来自:时间:
本装置DC-DC采用Boost升压,DCAC采用单相全桥逆变电路结构,以TI公司的浮点数字信号控制器TMS320F28335 DSP为控制电路核心,采用规则采样法和DSP片内ePWM模块功能实现PWM和SPWM波。PV最大功率点跟踪(MPPT)采用了恒压跟踪法(CVT法)来实现,并用软件锁相环进行系统的同频、同相控制,控制灵活简单。注:系统DCDC和DCAC的驱动PWM都由TMS320F28335提供,离网运行。附件资料截图:TMS320F28335光伏离网并网逆变器实物截图:
来自:时间:
猜你喜欢(实时推荐最适合你的电路)
该NRF24L01的6路无线温度采集系统采用一个接收机,六个发射机,分别采集NTC热敏电阻传感器温度,接收机接收六路发射机传输的温度数据,将温度数据显示到接收机板上1.4寸TFT液晶屏上,测温范围为0度到99度,无线传输距离空旷处50米。温度传感器采用高精度NTC热敏电阻防水型。无线传输模式发射机采用六个不同的数据通道,可同时传输。1路接收,NRF24L01-6路无线温度采集系统实物截图:说明:该NRF24L01-6路无线温度采集系统扩展功能(需用户自行添加编程),接收机板载有3个独立按键、7路可控12V电源输出,可直接控制DC12V继电器。
1路接收,NRF24L01-6路无线温度采集系统各项参数:
电路板工艺:蓝/绿色覆铜板(工厂加工);单片机型号:发射机采用STM8S103F3P6;接收机采用STC15F2K60S2;无线传输模块:NRF24L01;接收机液晶显示模块:1.4寸TFT;接收机供电电压:DC12V;发射机供电电压:DC5V;温度传感器:高精度NTC热敏电阻10K防水型;测温范围:0度到99度,分辨率为1度;接受发射无线传输距离:空旷地50米;连接状态指示:显示“断开”或“连接”;
实物购买链接:/item.htm?spm=a1z10.3-c.w40...技术QQ:(咨询可发邮件);全部附件资料截图:
1路接收,6路NRF24L01无线温度采集系统视频演示:
来自:时间:
本设计介绍的是2015年全国大学生电子设计竞赛F题数字频率计,见附件下载其数字频率计源码/参考资料等。该数字频率计源码程序主要分为FPGA和STM32两部分。FPGA部分:实现了对输入信号的频率,占空比,时间间隔的测量并且通过串口发送到stm32f103单片机上进行处理及显示;单片机部分:主要实现与FPGA通信,通过串口将测量到的频率、时间间隔、占空比数据进行处理并用3.5寸电阻TFT彩屏显示出来。说明:单片机型号:STM32F103ZET6
编译环境:keil 5FPGA型号:EP4CE6E22C8, 编译环境 quartus ii 15.0附件资料截图:
来自:时间:
本设计介绍的是基于stm32单片机DIY制作的LED彩灯显示系统,见附件下载其原理图,stm32源码及BOM。该stm32单片机LED彩灯显示系统可以实现LED彩灯循环显示。该设计主要由8个四种颜色的LED灯,设备控制开关,STM32F103C8T6芯片等构成。该stm32单片机LED彩灯显示系统设计有循环切换按键,按键控制循环类型,按键按下后要进行单一循环,按键再次下后取消现在循环,进行自主四种循环PS:我这里还有设计之前剩余电路板,需要的话,可以在讨论区给我QQ留言购买。
来自:时间:
本设计是基于STM32四轴飞行器开发-通用I2C驱动库,可以快速实现各种I2C器件驱动开发,从此告别 I2C 总线调试。通用I2C驱动库采用面向对象的方法设计(纯C语言),具备极高质量的代码完成度。如果你是嵌入式开发者,你将看到如何开发高质量可复用的代码,真正做到一次开发,终身受用!附件内容包括STM32四轴飞行器开发-通用I2C驱动库包括MPU6050/HCM5883/BMP280/MS5611/GT911 这几款芯片的驱动源码和四轴飞行器原理图。STM32四轴飞行器试飞视频:/v_show/id_XMTcyMjEyMTk4MA==.htm...
STM32四轴飞行器开发-通用I2C驱动库附件资料截图:
I2C通用驱动库 API :若需四轴飞行器源码请联系我:
来自:时间:
本项目只做了FPGA向STM32发送数据,属于单向通信,另外,为了产生数据发送到STM32,FPGA程序中写了一个计数器,实际工程中根据自己的需求删除即可,FPGA中的SPI模块中有完整的发送接收程序,因为本次不需要FPGA接收数据,所以接收部分写出来了,但未例化到顶层文件。使用平台:FPGA板+STM32板(我使用的是正点原子战舰板,根据自己的STM32板子,修改TFT驱动程序,SPI使用的是SPI2,可自行修改)连接方式:查看目录下 IO分配.txt附件资料截图:
来自:时间:
2016 年 11 月 16日
xQIAO购买了:
宁静天空&血色翅膀购买了:
禁奥义.真-『搞基大琺』购买了:
youyouxhz购买了:
liuwen-396482购买了:
免费下载!
您想购买此电路吗?,上传电路,审核成功后获取电路城6折折扣劵。
6折折扣劵只能购买小于100元(含100元)的电路。 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
基于STM32的心率监测仪设计
下载积分:1000
内容提示:基于STM32的心率监测仪设计
文档格式:PDF|
浏览次数:244|
上传日期: 11:31:32|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
基于STM32的心率监测仪设计
关注微信公众号【Nucleo心得】+脉搏心率监测实验 - 【stm32/stm8】 - 电子工程世界-论坛
后使用快捷导航没有帐号?
请完成以下验证码
查看: 9041|回复: 19
【Nucleo心得】+脉搏心率监测实验
在线时间207 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
首先感谢论坛的这次团购,让我们可以使用ST的Nucleo开发板来尽情发挥自己的设计。
& && & 之前玩过ST的几块discovery板子,功能都很强大,板子上都有一些可以体现其芯片特色的外设设备。而这次拿到的Nucleo开发板的设计理念并不一样,其并没有扩展外设,而是将接口尽可能地自由发挥出来,留给了用户更大的自由度。其接口兼容arduino板子接口,而编程环境可以使用Mbed网上平台,风格十分类似arduino,因此玩过arduino的玩家可以很快上手mbed开发平台,将其原有的arduino设计轻松转移到Mbed平台。
之前已经在Mbed平台下玩过了KL25Z开发板,发现Mbed平台具有诸多优点,无需安装,驱动完备,程序可导出在keil等平台下调试。最近更是看到ARM公司对MBED的长远规划,感觉这个平台会极大推动物联网的发展,个人比较看好,认为有替代arduino等开源平台的潜力,是实现快速成型的好平台。其他的优点就不说了,希望大家有时间和精力可以好好了解。
& && & 言归正传,本实验使用开源脉搏心率传感器Pulse sensor配合NUCLEO-L053R8开发板实现心率监测,并在电脑上显示脉搏曲线和心率数值。pulse sensor采集脉搏的原理是使用515nm波长的绿光照射人体皮肤,由于皮肤内的血液随心脏搏动而造成反射光也出现波动,从而探测到脉搏变化,通过记录相邻两个波峰之间的时间差来计算出心率数值。
先给出两个物品的图片:
IMG_350_副本.jpg (554.59 KB, 下载次数: 2)
开发板和传感器
22:22 上传
传感器一共三个引脚:模拟输出,电源输入,地
按照下面将其连接到开发板上:
pulsesensor-NUCLEO-L053R8
VOUT& && & -&& && & A0
VCC& && && &&-& && &3.3V
GND& && &&&&-& && &GND
3_副本.jpg (118.91 KB, 下载次数: 0)
22:29 上传
将原有的arduino程序移植过来,如下: #include &mbed.h&
#define false 0 #define true 1 T DigitalOut led1(LED1); //DigitalOut led2(PTA13); AnalogIn pulsepin(A0);//analog input pin Serial pc(SERIAL_TX, SERIAL_RX);//USB TO SERIAL
// these variables are volatile because they are used during the shorterrupt service routine! volatile short BPM;& && && && && && & // used to hold the pulse rate volatile short S& && && && && & // holds the incoming raw data volatile short IBI = 600;& && && && & // holds the time between beats, must be seeded! volatile char Pulse =& &&&// true when pulse wave is high, false when it's low volatile char QS =& && &&&// becomes true when Arduoino finds a beat. volatile short rate[10];& && && && && && &&&// array to hold last ten IBI values volatile unsigned long sampleCounter = 0;& && && & // used to determine pulse timing volatile unsigned long lastBeatTime = 0;& && && &&&// used to find IBI volatile short P =512;& && && && && && && & // used to find peak in pulse wave, seeded volatile short T = 512;& && && && && && && &// used to find trough in pulse wave, seeded volatile short thresh = 512;& && && && && & // used to find instant moment of heart beat, seeded volatile short amp = 100;& && && && && && & // used to hold amplitude of pulse waveform, seeded volatile char firstBeat =& && &&&// used to seed rate array so we startup with reasonable BPM volatile char secondBeat =& && &// used to seed rate array so we startup with reasonable BPM
//void ledFadeToBeat() //{ //& & fadeRate -= 15;& && && && && && && && & //&&set LED fade value //& & fadeRate = constrain(fadeRate,0,255);& &//&&keep LED fade value from going shorto negative numbers! //& & analogWrite(fadePin,fadeRate);& && && & //&&fade LED //} void timer_isr(void) { & & //cli();& && && && && && && && && && && && &&&// disable shorterrupts while we do this & &
& & Signal = pulsepin.read_u16()&&6;& && && && &&&// read the Pulse Sensor & & sampleCounter += 2;& && && && && && && && & // keep track of the time in mS with this variable & & short N = sampleCounter - lastBeatT& && & // monitor the time since the last beat to avoid noise
& & //&&find the peak and trough of the pulse wave & & if(Signal & thresh && N & (IBI/5)*3) {& && &// avoid dichrotic noise by waiting 3/5 of last IBI & && &&&if (Signal & T) {& && && && && && && &&&// T is the trough & && && && &T = S& && && && && && && && & // keep track of lowest poshort in pulse wave & && &&&} & & }
& & if(Signal & thresh && Signal & P) {& && && &// thresh condition helps avoid noise & && &&&P = S& && && && && && && && && &&&// P is the peak & & }& && && && && && && && && && && && && & // keep track of highest poshort in pulse wave
& & //&&NOW IT'S TIME TO LOOK FOR THE HEART BEAT & & // signal surges up in value every time there is a pulse & & if (N & 250) {& && && && && && && && && && && & // avoid high frequency noise & && &&&if ( (Signal & thresh) && (Pulse == false) && (N & (IBI/5)*3) ) { & && && && &Pulse =& && && && && && && && && && & // set the Pulse flag when we think there is a pulse & && && && &led1=1;& && && && && & // turn on pin 13 LED & && && && &IBI = sampleCounter - lastBeatT& && && &// measure time between beats in mS & && && && &lastBeatTime = sampleC& && && && && &// keep track of time for next pulse
& && && && &if(secondBeat) {& && && && && && && &&&// if this is the second beat, if secondBeat == TRUE & && && && && & secondBeat =& && && && && && &// clear secondBeat flag & && && && && & for(short i=0; i&=9; i++) {& && && && &// seed the running total to get a realisitic BPM at startup & && && && && && &&&rate[i] = IBI; & && && && && & } & && && && &}
& && && && &if(firstBeat) {& && && && && && && && &// if it's the first time we found a beat, if firstBeat == TRUE & && && && && & firstBeat =& && && && && && & // clear firstBeat flag & && && && && & secondBeat =& && && && && && & // set the second beat flag & && && && && & //sei();& && && && && && && && && && & // enable shorterrupts again & && && && && && && && && && && && && && && &// IBI value is unreliable so discard it & && && && &}
& && && && &// keep a running total of the last 10 IBI values & && && && &unsigned short runningTotal = 0;& && && && && && &// clear the runningTotal variable
& && && && &for(short i=0; i&=8; i++) {& && && && && &// shift data in the rate array & && && && && & rate[i] = rate[i+1];& && && && && && &// and drop the oldest IBI value & && && && && & runningTotal += rate[i];& && && && &&&// add up the 9 oldest IBI values & && && && &}
& && && && &rate[9] = IBI;& && && && && && && && &&&// add the latest IBI to the rate array & && && && &runningTotal += rate[9];& && && && && & // add the latest IBI to runningTotal & && && && &runningTotal /= 10;& && && && && && && &// average the last 10 IBI values & && && && &BPM = 60000/runningT& && && && && &// how many beats can fit shorto a minute? that's BPM! & && && && &QS =& && && && && && && && && && &// set Quantified Self flag & && && && &// QS FLAG IS NOT CLEARED INSIDE THIS ISR & && &&&} & & }
& & if (Signal & thresh && Pulse == true) {&&// when the values are going down, the beat is over & && &&&led1=0;& && && && &// turn off pin 13 LED & && &&&Pulse =& && && && && && && && & // reset the Pulse flag so we can do it again & && &&&amp = P - T;& && && && && && && && && &// get amplitude of the pulse wave & && &&&thresh = amp/2 + T;& && && && && && &&&// set thresh at 50% of the amplitude & && &&&P =& && && && && && && && && & // reset these for next time & && &&&T = & & }
& & if (N & 2500) {& && && && && && && && &&&// if 2.5 seconds go by without a beat & && &&&thresh = 512;& && && && && && && && &&&// set thresh default & && &&&P = 512;& && && && && && && && && && & // set P default & && &&&T = 512;& && && && && && && && && && & // set T default & && &&&lastBeatTime = sampleC& && && & // bring the lastBeatTime up to date & && &&&firstBeat =& && && && && && && & // set these to avoid noise & && &&&secondBeat =& && && && && && &&&// when we get the heartbeat back & & } & & //sei();& && && && && && && && && && && &&&// enable shorterrupts when youre done! }
void sendDataToProcessing(char symbol, short data ) { & & pc.putc(symbol);& && && && && & // symbol prefix tells Processing what type of data is coming & & pc.printf(&%d\r\n&, data);& && && && && & // the data to send culminating in a carriage return } int main() { & & pc.baud(115200);& && && && & // we agree to talk fast! & & tick.attach_us(&timer_isr,2000);& && && && && &&&// sets up to read Pulse Sensor signal every 2mS & & while(1) { & && &&&sendDataToProcessing('S', Signal);& &&&// send Processing the raw Pulse Sensor data & && &&&if (QS == true) {& && && && && && && & // Quantified Self flag is true when arduino finds a heartbeat & && && && &//fadeRate = 255;& && && && && && &// Set 'fadeRate' Variable to 255 to fade LED with pulse & && && && &sendDataToProcessing('B',BPM);& &// send heart rate with a 'B' prefix & && && && &sendDataToProcessing('Q',IBI);& &// send time between beats with a 'Q' prefix & && && && &QS =& && && && && && && & // reset the Quantified Self flag for next time & && &&&}
& && &&&//ledFadeToBeat(); & && &&&wait(0.02);& && && && && && && && && &&&//&&take a break & & } }复制代码MBED平台下载程序很简单,只需要将编译产生的文件拖进开发板在电脑上显示的U盘空间中就可以了。
程序中以500hz频率进行AD采集,将数据滤波处理后通过串口发送到电脑上,同时板子上的LD2小灯会跟随心跳频率闪烁。
上位机软件采用开源软件processing,程序可以在pulsesensor官网下载得到。直接运行后可以看到采集到脉搏波形和心率数值。
2.JPG (57.26 KB, 下载次数: 2)
22:35 上传
最后附上演示视频:
可以看到心率值可以正常读取。下一步准备加上OLED模块显示心率数值。
心率传感器:
&&&&&&&&&&
在线时间1321 小时
威望1302分
芯币5754枚
E金币122枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1302, 距离下一级还需 698 积分
纯净的硅(高级), 积分 1302, 距离下一级还需 698 积分
挺不错,这个上位机软件processing我去了解下
在线时间2287 小时
芯币2817枚
E金币415枚
TA的帖子TA的资源
纯净的硅(初级), 积分 604, 距离下一级还需 196 积分
纯净的硅(初级), 积分 604, 距离下一级还需 196 积分
不错,感谢分享
在线时间27 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 30, 距离下一级还需 170 积分
一粒金砂(中级), 积分 30, 距离下一级还需 170 积分
你好&&请问一下 为什么 要 把 AD的采样值&&右移 6位呢 ?
AD只需要10位精度就够了,所以只取了高10位&
在线时间207 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
你好&&请问一下 为什么 要 把 AD的采样值&&右移 6位呢 ?
AD只需要10位精度就够了,所以只取了高10位
心率传感器:
在线时间8 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
在线时间104 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 73, 距离下一级还需 127 积分
一粒金砂(中级), 积分 73, 距离下一级还需 127 积分
不错,上位机软件
在线时间44 小时
TA的帖子TA的资源
宇宙尘埃, 积分 -6, 距离下一级还需 6 积分
宇宙尘埃, 积分 -6, 距离下一级还需 6 积分
在线时间6 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
开发简单多了 相比官方库
在线时间37 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
做的挺好呀。
专业电子方案/zigbee方案设计,毕业设计。QQ:
在线时间4 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
在线时间4 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
有没有人用STM32写过这个啊?我移植之后发现数据时好时坏,有时心率传感器根本检测不到,不知道是不是传感器本身的问题,程序还有待研究。求大神支招
我用CUBE的库移植过,没问题的。注意AD需使用10位精度,其他的定时器和串口都配好就没什么难度了。&
在线时间157 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 119, 距离下一级还需 81 积分
一粒金砂(中级), 积分 119, 距离下一级还需 81 积分
谢谢分享。。
在线时间207 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
有没有人用STM32写过这个啊?我移植之后发现数据时好时坏,有时心率传感器根本检测不到,不知道是不是传感 ...
我用CUBE的库移植过,没问题的。注意AD需使用10位精度,其他的定时器和串口都配好就没什么难度了。
心率传感器:
在线时间4 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
我用CUBE的库移植过,没问题的。注意AD需使用10位精度,其他的定时器和串口都配好就没什么难度了。
你应该有STM32的例程吧?能不能发给我?
不好意思,此例程不公开&
在线时间207 小时
TA的帖子TA的资源
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
一粒金砂(高级), 积分 254, 距离下一级还需 246 积分
你应该有STM32的例程吧?能不能发给我?
不好意思,此例程不公开
心率传感器:
在线时间4 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
一粒金砂(中级), 积分 6, 距离下一级还需 194 积分
不好意思,此例程不公开
其实淘宝上有例程,买模块就给,主要我的是老师买的,不好意思麻烦他,不公开就算了,过些日子就都有啦,你还是自己留着吧
在线时间11 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
你好,请问一下,有没有51系列的例程??有的话可否发一份给我,邮箱:&&谢谢
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
请问楼主,sampleCounter += 这一句是什么意思?注释没有看太懂。另外请问Timer中断多长时间执行一次?谢谢!
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWORLD 官方微信
EE福利 唾手可得
Powered by

我要回帖

更多关于 stm32f407开发板例程 的文章

 

随机推荐